http://habrahabr.ru/post/249425/
Начну с пиара другого проекта, который мне очень нравится использовать — pyenv. Это порт rbenv для python, который служит для установки нужных версий python в папку пользователя в недра ~/.pyenv, и активации нужной версии руками или, что более грамотно, через файл .pyenv-version в папке проекта.
Следуя этой старой доброй традиции обмениваться здравыми идеями с ruby сообществом, я решил портировать идею Bundler (http://bundler.io/), и назвал его Pundle. Это вторая часть рабочего процесса связанного с версиями интерпретаторов и пакетов в руби, и как и первая, достаточно разумна.
Главная идея pundle в том, чтобы не создавать отдельную директорию на каждую комбинацию версий пакетов как в virtualenv, а вместо этого поставить все пакеты в директории типа .pundlerdir/python-version-variant/package-name-2.3.4, и при старте проекта, взяв информацию из frozen.txt, активировать нужные версии пакетов
Это плохо работает с пакетами которые пытаются делать всякие хитрости с раскладыванием .pth файлов в site-packages, но отлично работает с нормальными вариантами. А их подавляющее большинство, ну про хитрые есть время придумать как с ними быть.
Итак, поиграемся:
> brew install pyenv
> pyenv install 3.4.1
> pyenv shell 3.4.1
> python --version
Python 3.4.1
Отлично, нужная версия интерпретатора! Вы же уже начали переходить на третью версию чтобы переломить тенденцию к медленному умиранию языка? Тогда следуем дальше, вдохнем больше новизны и создадим файл requirements.txt с содержимым:
trafaret > 0.5
nomad > 1.8
Ну а теперь запустим pundle:
> pip install pundle
...
> python -m pundle
Install some packages
... много буков, символов, междометий, медитация
На данном этапе мы поставили пакеты и получили файл frozen.txt.
nomad==1.9 # nomad << requirements file
opster==4.1 # opster>=4.0 << nomad << requirements file
termcolor==1.1.0 # termcolor << nomad << requirements file
trafaret==0.5.3 # trafaret << requirements file
Получили два пакета, которые хотели, и пару в нагрузку как зависимости nomad (тоже хорошая
штука, но Саша про нее лучше жгет сам).
Дальше у нас есть два варианта — первый это в файле, которым мы планируем запускать наш проект руками импортировать pundle и попросить его активировать нужные версии проектов.
Я же предпочитаю команду fixate чтобы добавить активацию нужных версий пакетов в usercustomize.py:
> python -m pundle fixate
С этого момента мы можем запускать интерпретатор и автоматически иметь доступ к нужным версиям пакетов:
> python
>>> import nomad
>>> nomad.__version__
'1.9'
pyenv тут
github.com/yyuu/pyenv
pundle тут
github.com/Deepwalker/pundler
Использовать надо на машине разработчика, а не при деплоее. На сервере смысла нет в пяти питонах и в семи джанго.
Я с удовольствием использую оба проекта в реальной работе, и мне очень нравится не возиться с virtualenv и версиями интерпретатора. Но мне немного скучно использовать pundle одному, поэтому я взялся за пиар и приглашаю всех изменить рабочий процесс современного питонера на новый и продвинутый.