All articles, tagged with “virtualenv”

Установка satchmo 0.9 в virtualenv

Читаем quickstart и делаем:

lorien@lorien:~$ cd /web
lorien@lorien:/web$ mkdir supershop
lorien@lorien:/web$ cd supershop
lorien@lorien:/web/supershop$ virtualenv .env
New python executable in .env/bin/python
Installing setuptools............done.
lorien@lorien:/web/supershop$ source .env/bin/activate
(.env)lorien@lorien:/web/supershop$ easy_install pip
...
(.env)lorien@lorien:/web/supershop$ pip install -r http://bitbucket.org/chris1610/satchmo/raw/tip/scripts/requirements.txt
...
(.env)lorien@lorien:/web/supershop$ pip install -e hg+http://bitbucket.org/chris1610/satchmo/@v0.9#egg=satchmo
...
(.env)lorien@lorien:/web/supershop$ clonesatchmo.py
...
ImportError: No module named satchmo_skeleton
(.env)lorien@lorien:/web/supershop$ ln -s /web/supershop/.env/src/satchmo/satchmo/projects/skeleton /web/supershop/.env/lib/python2.5/site-packages/satchmo_skeleton
(.env)lorien@lorien:/web/supershop$ clonesatchmo.py
...
Store installation complete.
You may run the server by typying: 
 cd store 
 python manage.py runserver

Деплоймент 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 мне тоже кажется удобным ставить отдельно — в глобальную область видимости.

Можно почитать по теме: