1 февраля 2011 в 11:42

Простейший способ создать окружение virtualenv

В этой статье я хочу вам рассказать про это уникальный способ создания изолированных окружений Python для удобной и комфортной разработки даже в самых дремучих условиях.

$ python -murllib http://tiny.cc/ve-setup | python

Так это выглядит, а под катом находится пара рецептов использования.

Установка Django на абстрактный дремучий хостинг


Допустим, что на хостинге установлен только Python, но там нет ни Django, ни Virtualenv, а так же у вас нет прав суперпользователя для того, чтобы исправить данную ситуацию. Ваша задача — создать проект на Django и убедиться, что всё работает.

# установить
python -murllib http://tiny.cc/ve-setup | python - --no-site-packages p
./p/bin/pip install django==1.2.4
# убедиться
. ./p/bin/activate
django-admin.py startproject example
python example/manage.py runserver

Установка Django в дремучий wine


Допустим, что вы обкурились манами хотите проверить работоспособность вашего проекта на Django под windows wine.

wget http://www.python.org/ftp/python/2.6.6/python-2.6.6.msi
# Важно: необходимо выбрать установку "For all users"
msiexec /i python-2.6.6.msi
wine C:/python26/python.exe -murllib http://tiny.cc/ve-setup | wine C:/python26/python.exe - w
./w/Scripts/pip.exe django
./w/Scripts/python.exe ./w/Scripts/django-admin.py startproject example
./w/Scripts/python.exe example/manage.py runserver

Кстати, бинарные библиотеки (такие как lxml) нужно устанавливать с помощью easy_install.exe, а не pip.exe, так как последний работает только с исходниками.

Как это работает


Смотрите сами — это размещается на GitHub.
+21
7873
55
funca 20,1

Комментарии (6)

+3
Riz, #
Есть только предложение, что на дремучем хостинге наадо быть очень аккуратным с --no-site-packages, потому что далеко не факт что вам захочется(и сможется) развлекаться со сборкой PIP или биндингов к БД.
–1
funca, #
согласен. в принципе, тем хуже для примера. здесь я хотел показать, что virtualenv'у, устанавливаемому таким способом, можно передавать знакомые параметры.
+1
funca, #
В продолжении темы.
Если нужные зависимости прописать в файл requirements.pip, например:

django==1.2.4
-e hg+http://bitbucket.org/andrewgodwin/south/@stableish#egg=South-stable

и добавить в начало запускающего модуля вашего проекта вот такой код:

#!/usr/bin/env python
try:
    from ve_setup import use_virtualenv
except ImportError:
    import urllib
    urllib.retrive("http://tiny.cc/ve-setup", 've_setup.py')
    from ve_setup import use_virtualenv
use_virtualenv(['--distribute', "python"], requirements="requirements.pip", activate=True)

# application code
from django.core.management import execute_manager
...

тогда все необходимое установится автоматически при первом запуске скрипта, и сразу же станет доступным к использованию.
+1
Riz, #
Это интересное решение, но лучше всё-же разделять деплоймент и запуск приложения :)
0
funca, #
В принципе, я согласен. Но есть вырожденные ситуации, где, как мне кажется, это может быть полезно.

Например, если ваше приложение и есть инсталлятор — где инициализация virtualenv лишь первый шаг, а дальше накладываются пачти, создаются конфиги и т.п.

Я использую такую возможность в скрипте, запускающем тесты для проекта. Это создает единую точку входа, упрощая интеграцию с CI-сервером. А «интегрированный» деплоймент позволяет лишний раз убедиться, что все зависимости прописаны.

У pip есть замечательная фича — он умеет создавать бандлы (bundle) для установки всех зависимостей «оффлайн». Единственная проблема — для распаковки бандла на целевом хосте должен быть установлен сам pip, желательно не самый старый. Путем такого трюка с virtualenv это ограничение достаточно легко обходится.
0
o_O_Tync, #
Не помешало бы словами объяснить как это работает, и главное — чем это лучше добавления в PYTHONPATH папки, куда при необходимости можно закопировать нужные модули? :)

Только зарегистрированные пользователи могут оставлять комментарии.
Войдите, пожалуйста.