python

Pundle — bundler для python

  • понедельник, 2 февраля 2015 г. в 02:14:34
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 одному, поэтому я взялся за пиар и приглашаю всех изменить рабочий процесс современного питонера на новый и продвинутый.