Начну с пиара другого проекта, который мне очень нравится использовать — 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. Дальше у нас есть два варианта — первый это в файле, которым мы планируем запускать наш проект руками импортировать 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 одному, поэтому я взялся за пиар и приглашаю всех изменить рабочий процесс современного питонера на новый и продвинутый.
Автор: Deepwalker