Добрый день!
Подсмотрев на форуме тему про "как узнать кто
использует мои пакеты?" озадачился и решил подойти к этому вопросу со
стороны донесения информации до пользователей, т.е. буду потихоньку
делать анонсы своих пакетов.
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 и создание песочниц внутри скрипта, а не при помощи коммандной строки. Об этом можно прочитать в оф. документации.