Деплоймент python проекта: pip & virtualenv
При работе над 3task мы разработали удобный способ установки зависимостей для проекта. Америку я не открою, просто расскажу, что мы сделали. Надеюсь, кому-нибудь пригодится.
Зависимости обрабатываются с помощью двух инструментов: pip и virtualenv.
Virtualenv позволяет создать собственное окружение проекта, в которое можно установить любые библиотеки любых версий и они никак не будут влиять на другие проекты. Это достаточно удобно. К примеру, можно обновлять джангу и не бояться, что другие проекты попадают, как это могло бы случиться в системе, где несколько проектов используют глобально установленную django.
Pip — это инструмент для установки python-приложений. Грууубо говоря, это аналог easy_install, отличающийся рядом вкусных плюшек. Одна из убойных его фишек — возможность ставить софт прямо из репозитория. Я пробовал ставить из git, svn, hg — всё работает. Возможно, easy_install умеет что-то подобное, я не в курсе, честно говоря. Другие отличительные черты pip: поддержка virtualenv и возможность ставить софт по заранее составленному списку.
Эти два инструмента образуют удобную связку, которая позволяет вызовом одной команды настроить окружение для проекта. Выглядеть это может, например, так.
Файлик build/buildenv.sh руководит всем процессом:
#!/bin/sh
echo Creating environment
virtualenv .env
echo Install PIP inside virtual environment
./.env/bin/easy_install pip
echo Installing dependencies
./.env/bin/pip install -E .env -r ./build/pipreq.txt
То есть сначала создаём виртуальное окружение с помощью инструмента virtualenv. Далее устанавливаем pip через easy_install. Можно, конечно и средствами пакетного менеджера вашей ОС, но easy_install стоит почти везде, так что грех этим не воспользоваться. Третий шаг — установка необходимых библиотек в виртуальное окружение по списку.
Приведу пример файла зависимостей:
-e svn+http://code.djangoproject.com/svn/django/trunk@10748#egg=django
-e svn+http://django-filebrowser.googlecode.com/svn/trunk@358#egg=django-filebrowser
-e svn+http://sorl-thumbnail.googlecode.com/svn/trunk@449#egg=solr
-e svn+http://django-tagging.googlecode.com/svn/trunk@156#egg=django-tagging
-e hg+http://bitbucket.org/lorien/django-account#egg=django-account
-e hg+http://hg.barbuza.info/supercaptcha/#egg=supercaptcha
-e hg+http://bitbucket.org/lorien/pybb#egg=pybb
django-renderform
simplejson
markdown
beautifulsoup
http://django-tinymce.googlecode.com/files/django-tinymce-1.5.tar.gz
Как видите, источники можно указывать самые разные: адреса hg/git/svn репозиториев, адреса архивов, просто имена (поиск идёт через pypi.python.org). Единственное условие: пакет по указанному адресу должен обязательно содержать файл setup.py.
Если специально не запрещать, то пакет ищется сначала в виртуальном окружении, в случае неудачи — в глобальном окружении. Это мне помогло в случае PIL. Почему-то не хотел он компиляться при установке через pip — я поставил его через apt. Драйвера баз данных типа mysqdb мне тоже кажется удобным ставить отдельно — в глобальную область видимости.
Можно почитать по теме:






Comments
А сам проект нужно закидывать в директорию, созданню vurtualenv или достаточно производить запуск как ./env/bin/python /path/to/my/project/manage.py ?
У меня обычно вирт. окружение внутри проекта лежит, просто я в .hgignore (я mercurial юзаю) прописываю эту директорию. Вот. А далее есть два способа: 1-й способ — я им пользуюсь. Просто изменяем manage.py и пишем в первой строчке:
2-й способ — вроде б так, не пробовал :)
А вот ещё как я настраивал WSGI-скрипт для запуска в виртуальном окружении:
http://code.google.com/p/modwsgi/wiki/VirtualEnvironments
эт для WSGI
Ммм, как будто ты вчерашнее сообщение моё прочитал :) Кстати, чтот самого деплоймента тут маловато, или само приложение тоже через pip ставится?
Прочитал, ага. И подумал, надо тож чего-нить написать :D Давно уже хотел.
У меня пока вот такой нехитрый деплоймент. Сам проект я клонирую по ssh и потом ручками на сервере запускаю build.sh :-) Всякие fabric и buildout пощупать хочется — пока руки не дошли.
А куда там build.sh? У нас же python, не C?
Я не понимаю вопроса.
Что делает build.sh? Python ведь не компилируемый?
buildenv.sh, а не build.sh — в статье показано содержимое этого файла, читай внимательнее :-)
А, ты про мой комментарий? Там опечатко, имелся в виду, конечно же, buildenv.sh
И чем это лучше buildout? Кроме, естественно, монструозности buildout? Насколько я вижу, у buildout возможностей намного больше, можно делать отличные вещи.
Отлично :-)
fabric+pip приятнее :)
That is possible to purchase the school essays, if choose a professional <a href=”http://www.qualityessay.com”>papers service</a>. Just because the professionals only can perform a masterpiece.
You are obviously, a professional but when you want to choose the essay papers, I would propose you to determine the greates one.
Great job!
As a rule, university students require some assistance completing their term papers. So I would recommend to buy essays, which seems to be a right way to A+ grades.
Thanks for this great site and wonderful article. Kathy from <a href=”http://www.realtungsten.com/”>tungsten rings</a>
Thanks for this.
[url=http://www.naseya.com/games/cooking/]cooking games[/url]
freelance writer
Thank you so much.
All u need to know about <a href=”http://phlebotomyclinic.com/”>phlebotomy certification</a> <a href=”http://phlebotomyclinic.com/”>phlebotomy training</a>
great website keep up the good work.
hey long time i’ll reach still
freelance writer