Так случилось, что на данный момент автор балуется скриптами на python и стоит на пороге изучения Django. Естественно, в такой интересной ситуации нельзя однажды не наткнуться на сложности в работе с несколькими проектами и призванным решить все проблемы virtualenv. Впрочем, о нём уже только ленивый не писал, и если читателю приходилось сталкиваться с указанным приложением, этот пост вряд ли расскажет ему о чём-то новом. Тем не менее, поговорим о виртуальных окружениях.

На кой оно нужно?

Итак, чем может быть полезен virtualenv? Предположим, вы взялись за разработку сайта с использованием python v3 и django v1.5. и всё бы хорошо, да вот незадача: вам срочно понадобилось посмортеть какой-то проект, где автором используются совершенно иные библиотеки и версия python, несовместимая с вашей. Итак, у вас есть два пути: поставить все эти библиотеки и раздельно пользоваться ими, что не есть удобно. Таким образом вы захламляете системные каталоги и спустя какое-то время сам чёрт не разберёт что где лежит и зачем это было нужно. Путь второй заключается в установке virtualenv и использования его возможностей для своих нехитрых нужд.

Virtualenv пригодится для создания виртуальных окружений, внутри которых может использоваться другая версия python, другой набор модулей и приложений для текущей задачи. При этом все модули и приложения не устанавливаются в системные каталоги, а лежат исключительно в указанных директориях виртуального окружения. Их можно удалить по отдельности, а можно просто «снести» каталог виртуального окружения, чтобы избавиться от всего, что там лежит. Неплохо, верно?

Установка и использование

Теперь установим pip и virtualenv и посмотрим, как пользоваться всем этим хозяйством на практике. Прежде всего следует выбрать версию python, которая будет использоваться в создаваемом виртуальном окружении и указать, что мы не хотим использовать системные пакеты:

$ virtualenv -p /usr/bin/python2.7 --no-site-packages ~/.virtualenvs/env2.7

Running virtualenv with interpreter /usr/bin/python2.7
The --no-site-packages flag is deprecated; it is now the default behavior.
New python executable in /home/redvi/.virtualenvs/env2.7/bin/python2.7
Also creating executable in /home/redvi/.virtualenvs/env2.7/bin/python
Installing setuptools..............................done.
Installing pip...............done.

Так, мы создали директорию .virtualenvs, которая будет содержать различные виртуальные окружения и первое виртуальное окружение, которое просто использует python v2.7. Примечание: если установка прерывается с ошибкой Permission Denied, проверьте не смонтирован ли раздел, где создаётся виртуально окружение, с параметром noexec. Директория env2.7 служит всего лишь примером, вы можете создавать виртуальное окружение под каждый проект, например, назвав его .virtualenvs/myapp. Теперь нужно активировать виртуальное окружение:

$ source .virtualenvs/env2.7/bin/activate

Далее, находясь в выбранном виртуальном окружении, установим что-нибудь. К примеру, у автора имеется django v1.5, но захотелось поставить v1.4:

$ pip install django==1.4
$ python
>>> Python 2.7.3
>>> import django
>>> django.VERSION
>>> (1, 4, 0, 'final', 0)
$ pip uninstall django==1.4

Uninstalling Django:
/home/user/.virtualenvs/env2.7/bin/django-admin.py
/home/user/.virtualenvs/env2.7/lib/python2.7/site-packages/Django-1.4-py2.7.egg-info
/home/user/.virtualenvs/env2.7/lib/python2.7/site-packages/django
Proceed (y/n)? y
Successfully uninstalled Django

Думаю, этот пример достаточно показателен. При установке Django 1.4 вы не обнаружите его в системных каталогах — только в .virualenv/env2.7 Чтобы выйти из виртуального окружения введите команду $ deactivate.

Примечание: pip — небольшая и очень удобная программа, которая позволяет устанавливать и удалять python-приложения в одну команду. Pip можно установить как из репозиториев вашего дистрибутива для всей системы, так и в рамках окружения virtualenv.

О virtualenvwrapper

В иных руководствах рекомендуется использовать вдовесок virtualenvwrapper, призванный упростить работу с самим virtualenv. Думается, он не особенно нужен, ибо единственной вещью, которую делать лениво представляется переключение между виртуальными окружениями: слишком длинную команду приходится вводить для такого простого действия. Но это можно легко поправить, добавив в ваш .bashrc или .zshrc несколько псевдонимов для окружений, например так:

alias env3='source ~/.virtualenvs/env3.2/bin/activate'
alias env2='source ~/.virtualenvs/env2.7/bin/activate'
alias blog='source ~/.virtualenvs/blog/bin/activate'

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

  • $ evn2 – вошли в окружение, работаем работу
  • $ deactivate – деактивируем окружение
  • $ env3 – входим в другое окружение

При использовании virtualenvwrapper:

  • $ mkvirtualenv myapp – создаст новое окружение myapp
  • $ workon myapp – переключиться на myapp
  • $ deactivate – деактивировать
  • $ rmvirtualenv myapp – удалить

Официальная документация проекта: http://virtualenv.org ⤧  Следующая запись Оформление глав TeX/LaTeX