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 хорош тем, что не надо помнить, где у тебя лежат virtualenvы. workon [tab] — и вуаля — список уже существующих окружений. workon [virtual name] — и «Вы на месте» :)
И кстати, Вы уж дополните статью о pip freeze и прочее, чтобы была полная картина.
А так статья good. Спс.
Спасибо, извините что сразу не ответил, про pip я тогда писал отдельную статью, но так и не опубликовал, думал в течении недели опубликую.
Вышла новая версия http://pypi.python.org/pypi/virtualenv/1.8 но там только багфиксы и незаметные фичи
Да. кстати я начал пользоваться virtualenvwrapper, потому что удобно для проектов, которым не надо иметь своего персонального каталога с вирт. окружением, а помнить пути для них тяжко. В итоге:
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 почему? Дайте развернутое объяснение
Как его использовать в проекте?
Запускать все через консоль находясь в каталоге переменной среды?
Или все доступно через компилятор (пользуюсь PyCharm)
Спасибо.
@Polmik я пользуюсь консолью и emacs. Не знаю как в PyCharm, но мне кажется там можно просто в настройках указать путь до venv.
В py3 этот virtualenv добавили в поставку с самим питоном, там все абсолютно также, так что думаю PyCharm должен поддерживать
PyCharm поддерживает venv, в PyCharm Ctrl+Alt+S и выбираете из списка нужный интерпретатор
Оставьте свой комментарий