19 июня 2012 г. Django easy_install pip PyPI Python Virtualenv

Python. Строим виртуальное окружение с помощью virtualenv

Virtualenv предназначен для создания виртуального окружения (далее просто "окружение") для вашего проекта. К примеру, вашему проекту нужен отличный от установленного python или какие-либо библиотеки отличных версий, вы можете создать общее окружение для нескольких проектов или по одному собственному для каждого проекта. Тем самым вы сможете устанавливать, изменять и удалять пакеты, и это не повлияет на другие ваши проекты или системное окружение.

В статье рассматривается версия 1.7.1.2

Установка

Для начала надо его установить в вашу систему, через PyPI:

$ sudo pip install virtualenv
$ sudo easy_install virtualenv

Или через Debian, Ubuntu:

$ sudo apt-get install python-virtualenv

Или через FreeBSD:

$ cd /usr/ports/evel/py-virtualenv
$ make install clean

Использование

Для начала рассмотрим самые полезные возможности, остальные вы можете посмотреть в man virtualenv:


--no-site-packages

Запретить использование системного site-packages (для полной изоляции вашего окружения от системы). Например у вас в системе установлена "Django 1.3", если вы будете использовать эту опцию, то в созданном окружении эта "Django" не будет доступна.
В текущих версиях virtualenv эта опция используется по умолчанию, можете её не указывать.

--system-site-packages

Эта опция противоположна предыдущей, то есть заставляет окружение использовать установленные в системе пакеты, если не нашлись онные в окружении.

-p PYTHON_EXE, --python=PYTHON_EXE

Вы можете указать нужную вам версию интерпретатора python, при этом он должен быть установлен в системе. Если вы опустили эту опцию, то будет использоваться умолчательный (Выполните which python чтобы узнать какой он у вас, но скорее всего это будет /usr/bin/python).

--distribute

Использовать Ditribute.
Опция используется по умолчанию.

--setuptools

Использовать Setuptools поверх Ditribute. Вы можете установить переменную окружения вашей системы VIRTUALENV_SETUPTOOLS, чтобы Setuptools стал умолчательным вместо Ditribute.
$ export VIRTUALENV_SETUPTOOLS=true


--extra-search-dir=SEARCH_DIRS

Указанные директории будут использовать для поиска в них пакетов при установке через setuptools/distribute/pip. Это подходит в случае когда вы не хотите их устаналивать из PyPI.
Подробное описание тут.

--never-download

Не использовать сеть для получения пакетов. Используется совместно с --extra-search-dir=SEARCH_DIRS.
Подробное описание тут.

--relocatable

Сделать существующее окружение относительным, то есть после этого вы сможете перемещать каталог с окружением и оно не будет зависеть от своего места дислокации, но опция в данный момент экспериментальная.
Подробное описание тут.

--prompt=PROMPT

Выводимое имя окружения (подсказка), например вы можете создать с названием (MY_VENV):
$ virtualenv --prompt="(MY_VENV)" <venv_name>
source venv/bin/activate
(MY_VENV)$


--clear

Используется для очистки существующего окружения от пакетов и прочих изменений.

Создаем общее окружение (для нескольких проектов) без использования системного site-packages:

$ mkdir ~/venv && cd ~/venv
$ virtualenv --no-site-packages <venv_name>

Часто я создаю окружение непосредственно в каталоге проекта:

$ cd ~/work/<project_name>
$ mkdir venv && echo "Virtualenv directory" > venv/README
$ git add venv && echo "/venv/" >> .gitignore && git add -f .gitignore
$ virtualenv --no-site-packages --prompt="(<project_name>)" <venv_name>

После того как вы установили новое окружение, у вас будет следующая структура:

~/venv/<venv_name>
├── bin
│   ├── activate
│   ├── easy_install
│   ├── pip
│   ├── python
│   └── ...
├── include
│   └── python2.7 -> /usr/include/python2.7
├── lib
│   └── python2.7
│       ├── distutils
│       │   └── ...
│       ├── site-packages
│       │   └── ...
│       └── ...
└── local
    ├── bin -> /home/username/venv/<venv_name>/bin
    ├── include -> /home/username/venv/<venv_name>/include
    └── lib -> /home/username/venv/<venv_name>/lib

Таким образом вам сразу же доступны изолированные python, pip и easy_install.

Работа с окружением

Для начала работы вам следует активировать окружение так:

$ source ~/venv/<venv_name>/bin/activate

Для окончания работы с окружением (например для переключение на системный python) следует выполнить в командной строке:

$ deactivate

Вы также можете запустить python по абсолютному пути (это может пригодится например в cron), пример:

$ ~/venv/<venv_name>/bin/python manage.py

Установка пакетов в окружение

Надо активировать окружение и запустить pip или easy_install:

$ source ~/venv/<venv_name>/bin/activate
$ pip install <something>
$ easy_install <something>

Также через pip вы можете установить не активируя окружение:

$ pip install -E ~/venv/<venv_name> <something>
Вот и всё, про virtualenvwrapper не буду рассказывать, так как и без него всё хорошо и просто.

Что ещё почитать?

Комментарии

virtualenvwrapper хорош тем, что не надо помнить, где у тебя лежат virtualenvы. workon [tab] — и вуаля — список уже существующих окружений. workon [virtual name] — и «Вы на месте» :)

И кстати, Вы уж дополните статью о pip freeze и прочее, чтобы была полная картина.

А так статья good. Спс.

Спасибо, извините что сразу не ответил, про pip я тогда писал отдельную статью, но так и не опубликовал, думал в течении недели опубликую.

Вышла новая версия http://pypi.python.org/pypi/virtualenv/1.8 но там только багфиксы и незаметные фичи

Да. кстати я начал пользоваться virtualenvwrapper, потому что удобно для проектов, которым не надо иметь своего персонального каталога с вирт. окружением, а помнить пути для них тяжко. В итоге:

# Создаст и переключится в созданное вирт. окружение "somevenv"
mkvirtualenv somevenv

# Так можно переключаться
workon<tab> somevenv

user@myhost:~/venv/mysite$ source ~/venv/mysite/bin/activate
(mysite)user@myhost:~/venv/mysite$ python manage.py
python: can't open file 'manage.py': [Errno 2] No such file or directory

А так и есть - файла manage.py в этом каталоге нема.
Я правильно понимаю что его именно команда 'virtualenv --no-site-packages mysite' должна была создать ?

Не, это просто пример использования, а именно запуск django-приложения.. Сейчас исправлю)

Просто, внятно, доступно,
Огромная блпгодарность!

Спасибо вам за такую статью!!! Во всём разобралась, всё установила.

Не рабочий метод

@Ki почему? Дайте развернутое объяснение

Оставьте свой комментарий

Markdown