Автор Тема: [ANN] python-module-virtualenv  (Прочитано 3491 раз)

Оффлайн redbaron

  • Начинающий
  • *
  • Сообщений: 21
[ANN] python-module-virtualenv
« : 21.09.2008 10:42:41 »
Добрый день!
Подсмотрев на форуме тему про "как узнать кто
использует мои пакеты?" озадачился и решил подойти к этому вопросу со
стороны донесения информации до пользователей, т.е. буду потихоньку
делать анонсы своих пакетов.




virtualenv - это средство создания независимых Python окружений. Работает просто: $ virtualenv /path/to/dir после чего в указанном вами каталоге будут установлены:
  • копия python (симлинками)
  • python-setuptools
  • скрипт easy_install
  • sh-скрипт активации окружения activate

Из прав требует только права на запись в каталог, т.е. любой пользователь где-нибудь у себя в $HOME может без проблем создать себе такую python-песочницу.

Все исполняемые файлы располагаются в /path/to/dir/bin/ , если вы активно хотите использовать какое-либо одно окружение, то вместо того, чтобы набирать полный путь можете воспользоваться скриптом activate,
он не исполняемый, его надо подключать через команду $ source /path/to/dir/bin/activate, это сделает выбранное вами окружение активным для текущего шелла. Отключить тоже просто: просто наберите в шелле deactivate и все вернется на место.

Работосопособность песочницы не зависит от activate, т.е. все что будет вызвано (не важно как) из /path/to/dir/bin/* будет работать только с этой песочницей, в том числе и сам python, который расположиться в /path/to/dir/bin/python. Особенно такое поведение полезно в случае скрипта easy_install.

Если вы работаете с Python, то наверняка знаете что, например $ easy_install Twisted вытянет из интернета Twisted и все его зависимости. Раньше для этого необходимы были root права или шаманство с переменными окружения, чтобы он не
ставил софт в системные каталоги, теперь достаточно создать песочницу при помощи virtualenv и ставить все в нее. Это избавляет вас от необходимости пинать маинтэйнеров python-module* чтобы они обновили наконец то, что вам надо, вы в этом вопросе становитесь независимыми от дистрибутива (но это не значит, что ваша песочница сможет безболезненно переехать на другой дистрибутив!). Конечно, если софт использует системные библиотеки (например пакет lxml использует libxml2 и libxslt), то вам по-прежнему надо поставить эти библиотеки в систему при помощи apt-get, также понадобятся заголовочные файлы (libxml2-devel, libxslt-devel) и компилятор, чудес не бывает и virtualenv не сделает это за вас :) В большенстве случаев вам достаточно установить python-devel, чтобы С расширения смогли скомпилироваться

Работа с virtualenv облегчает обслуживание проектов, я например, завожу по песочнице на каждый проект, что дает мне возможность более новые проекты начинать с более новыми версиями софта, а старые могут спокойно работать на старом,  не требуя его обновления.

easy_install ищет и скачивает софт с http://pypi.python.org, который не всегда там есть, но абсолютное большенство python софта упаковано при помощи setuptools, а значит может быть установлено через скрипт setup.py. Т.е. вам необходимо скачать с сайта интересующего вас проекта архив с последней версией, распаковать во временный каталог, перейти в него и выполнить $ /path/to/env/bin/python setup.py install
Вкратце все. За бортом остались такие вопросы, как управление наследованием от системного python и создание песочниц внутри скрипта, а не при помощи коммандной строки. Об этом можно прочитать в оф. документации.