Virtual Environment или виртуальная среда — это инструмент, который позволяет держать и хранить зависимости, требуемые для различных проектов в разделенных хранилищах, которые образуются созданием виртуальных сред. Это может решить проблему, когда проекту X, требуется утилита от версии 1.x, а проекту Y требует эта же утилита, но с версией 4.x. Это позволяет держать и сохранять вашу глобальную директорию пакетов чистым от хаоса и мусора версий утилит и позволяет легко управлять различными версиями утилит в локальной среде.
Для примера, вы работает с проектом, который требует Django 1.3, которому также необходим проект, который требует Django 1.0 и виртуальные среды в Python дают такую возможность.
Инструмент virtualenv
virtualenv — это инструмент, который позволяет создавать изолированные среды выполнения кода Python. virtualenv создает папку, которая содержит все необходимые выполнения, используя пакеты, которые необходимы проекту на Python.
virtualenv устанавливается через pip:
pip install virtualenv
Создание виртуальной среды Python
Создаем виртуальную среду для проекта:
cd my_project_folder virtualenv venv
Команда virtualenv venv должен создать папку в текущей директории, в котором должны находиться исполняемые файлы Python и копии библиотек pip, которых вы можете использовать для установки других пакетов. Имя виртуальной среды( в нашем случае, это venv) может быть любым. Если не вводить имя, то все эти выполняемые файлы будут находиться в текущей директории без добавления в подпапку.
Это создаст копию Python в любой директории, где запустите эту команду, положит его в папку под именем venv.
Вы также можете использовать версию интерпретатора
virtualenv -p /usr/bin/python2.7 venv
Данная команда будет использовать интерпретатор в директории /usr/bin/python2.7
Активация виртуальной среды Python
Перед началом использования виртуальной среды необходимо сначала ее активировать командой:
source venv/bin/activate
Название текущей виртуальной среды должно появиться в правой части командной строки запроса (т.е. (venv) Your-Computer: your_project UserName$), чтобы вы знали, что она сейчас активна. С текущего момента, любой пакет, который вы установите при помощи pip должен быть перемещен в папку venv, который изолирован от глобальной инсталляции Python.
Устанавливаем пакеты как обычно:
pip install requests
Деактивация виртуальной среды Python
Если вы завершили работу с виртуальной средой, то можете сделать выход из нее, задав команду деактивации
deactivate
Это произведет обратный выход из виртаульной среды к интерпретатору системы по умолчанию со всеми его установленными библиотеками.
Удаление виртуальной среды Python
Для удаления виртуальной среды достаточно просто удалить директорию командой
rm -rf venv
Через некоторое время вы, возможно, столкнетесь с множеством виртуальных сред, засоренных в вашей системе, и, возможно, вы забудете их имена или место их размещения.
Дополнительные замечания
Запуская команду virtualenv с опцией —no-site-packages не будут включены пакеты, которые установлены глобально. Это может быть полезно для сохранения списка пакетов в случае, если к нему нужно получить доступ позже. [Это поведение по умолчанию для virtualenv 1.7 и поздних.]
Заморозка пакетов виртуальной среды Python
Чтобы ваша среда была последовательной, рекомендуется «заморозить» текущее состояние пакетов среды. Для этого запустите
pip freeze > requirements.txt
Эта команда создаст файл requirements.txt, который будет содержать простой список пакетов в текущей среде и их соответствующие версии. Тем самым, вы сможете посмотреть список установленных пакетов без требуемого формата, используя “pip list”.
Импорт пакетов виртуальной среды Python
Позже, список в данном файле может облегчить сложности разработчику, если он захочет пересоздать такую же среду, установив похожие пакеты с их версиями и делается это командой
pip install -r requirements.txt
Это может помочь обеспечить согласованность между установками, между развертками и между разработчиками.
Один из важных моментов. Необходимо исключить папку виртуальной среды из контроля исходного кода, добавив его в список игноринга.
Инструмент virtualenvwrapper
virtualenvwrapper предоставляет набор команд, которые делают работу с виртуальными средами более приятным и продуктивным. Он также размещает все ваши виртуальные среды в одном месте.
Для установки(перед этим проверьте, что у вас установлен virtualenv)
pip install virtualenvwrapper export WORKON_HOME=~/Envs source /usr/local/bin/virtualenvwrapper.sh
После этих команд все виртуальные среды будут создаваться в глобальной директории /root/Evns/.
(Тут полная инструкция по установка virtualenvwrapper.)
Для Windows. Для пользователей Windows есть специфичная версия под названием virtualenvwrapper-win.
pip install virtualenvwrapper-winВ Windows путь path для WORKON_HOME является %USERPROFILE%/Envs
Создаем среду при помощи команд virtualenvwrapper
Создание виртуальной среды
mkvirtualenv venv
Это создаст папку виртуальной среды venv внутри ~/Envs.
Работа над виртуальной средой при помощи команд virtualenvwrapper
workon venv
Альтернативно вы можете создать проект, который создаст виртуальную среду, а также директорию проекта внутри $PROJECT_HOME
mkproject myproject
virtualenvwrapper предоставляет таб-завершение на именах среды. Это реально помогает вам, когда у вас много сред и есть вероятность забыть их имена
Деактивация при помощи команд virtualenvwrapper
Деактивация по-прежнему остается неизменной
deactivate
Удаление при помощи команд virtualenvwrapper
Удаление
rmvirtualenv venv
Другие полезные команды virtualenvwrapper
1) Список всех сред
lsvirtualenv
2) Переход в директорию текущей активной среды, так вы сможете увидеть ее site-packages, к примеру
cdvirtualenv
3) Похож, как и выше, но заходить внутрь site-packages активной текущей среды
cdsitepackages
4) Покажет содержимое директории site-packages
lssitepackages
Тут полный список всех остальных полезных команд модуля virtualenvwrapper.
Инструмент virtualenv-burrito
С virtualenv-burrito вы можете иметь рабочую комбинированную среду virtualenv + virtualenvwrapper в одной команде.
Инструмент autoenv
Модуль autoenv позволяет при переходе в директорию, которая содержит .env автомагически активировать среду.
Установка в Linux
git clone git://github.com/kennethreitz/autoenv.git ~/.autoenv echo 'source ~/.autoenv/activate.sh' >> ~/.bashrc
Установка в Mac через brew
brew install autoenv
Список источников