Мне всегда казалось, что для небольших проектов использование buildout - это как с пушки по воробьям: долго, сложно и неудобно. Хотелось чего-то более простого и понятного. И таким оказалась связка virtualenv + pip.
Про virtualenv я уже писал тут. pip - это замена easy_install, менеджер пакетов для python, который позволяет быстро и удобно устанавливать, обновлять и удалять пакеты. Более подробно можно почитать на официальном сайте. Сейчас же меня интересует возможность быстрого развертывания необходимого окружения для запуска проекта. В двух словах, задача выглядит так:
Нужно запустить проект, который для работы требует следующие пакеты:
- Django;
- SQL Alchemy;
- pep8 & pylint для проверки кода.
Стандартный алгоритм решения - создать новое окружение с помощью virtualenv и установить нужные пакеты. Но ведь не делать же это каждый раз каждому разработчику руками? А на build-сервере? Пришедшая мне первая мысль (написание нужного bash-скрипта) к счастью, оказалась не совсем правильной. Т.е. для полной автоматизации небольшой bash-скрипт будет не лишним, но вот устанавливать пакеты проще и правильнее через pip. Итак, как же нам установить все необходимые пакеты?
Шаг 1. Создаем virtual environment
$ virtualenv ./pip-test/ –no-site-packages
Ключ –no-site-packages указывает на то, что в нашем окружении не будет доступа к пакетам, установленных в операционной системе. Такая себе чистая, ничем не испачканная песочница.
Шаг 2. Устанавливаем нужные пакеты
Первый раз все-таки будет необходимо установить все пакеты вручную, т.к. список нужных пакетов на данном этапе бывает далеко не всегда.
$ pip install Django$ pip install SQLAlchemy$ pip install pep8$ pip install pylint
Шаг 3. Автоматизируем установку пакетов
После установки нужных пакетов можно выполнить команду pip freeze -l, которая выведет на экран список установленных пакетов с их версиями. В моем случае, это выглядит так:
$ pip freeze -lDjango==1.3.1SQLAlchemy==0.7.4logilab-astng==0.23.1logilab-common==0.57.1pep8==0.6.1pylint==0.25.1
Ключ -l выводит пакеты установленный только внутри virtualenv, что при создании окружения с ключем –no-site-packages теряет всякий смысл.
Далее этот список нужно сохранить:
$ pip freeze -l > pip-requirements
Тепреь в файле pip-requirements лежит список всех необходимых для запуска пакетов. Этот нужно положить в вашу source control и при необходимости обновлять.
Чтобы установить все необходимые пакеты, необходимо выполнить команду:
$ pip install -r pip-requirements
Несколько рускоязычных статей про buildout можно найту тут: http://www.vurt.ru/tag/buildout