Pundle — bundler для python
Начну с пиара другого проекта, который мне очень нравится использовать — 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/pyenvpundle тут github.com/Deepwalker/pundler
Использовать надо на машине разработчика, а не при деплоее. На сервере смысла нет в пяти питонах и в семи джанго.
Я с удовольствием использую оба проекта в реальной работе, и мне очень нравится не возиться с virtualenv и версиями интерпретатора. Но мне немного скучно использовать pundle одному, поэтому я взялся за пиар и приглашаю всех изменить рабочий процесс современного питонера на новый и продвинутый.