Python (Русский)/Virtual environment (Русский)
virtualenv — это инструмент, используемый для создания изолированного рабочего пространства для приложения Python. Он даёт некоторые преимущества: например, возможность локальной установки модулей, экспорта рабочей среды и выполнения программы Python внутри этого окружения.
Обзор
Виртуальное окружение (virtual environment) — это каталог, в который устанавливаются некоторые исполняемые файлы и скрипты. Среди файлов есть python для выполнения скриптов и pip для установки других модулей в окружении. Также есть скрипты для активации окружения в различных командных облочках (по одному для bash, csh и fish). По сути, виртуальное окружение имитирует полную системную установку Python и всех необходимых модулей, не вмешиваясь в работу системы, на которой будет запускаться приложение.
В 2017 году был опубликован Pipenv, который управляет всеми вышеперечисленными инструментами: виртуальными окружениями интерпретаторов python, зависимостями пакетов, их активацией и блокировкой версий в Pipfile.
Установка
Python 3.3+ поставляется с модулем venv. Для более старых версий Python можно использовать сторонний инструмент virtualenv.
Пакеты
Установите один из следующих пакетов:
- Python 3.3+: python
- Python 3: python-virtualenv
Для Pipenv:
- Python 3: python-pipenv
Использование
Все три инструмента похожи.
Создание
Используйте venv или virtualenv для создания виртуального окружения в каталоге вашего проекта. Не забудьте исключить каталог venv из вашей системы контроля версий — для его восстановления достаточно копии pip freeze
.
venv
Он входит в состав python (3.3+):
$ python -m venv envname
virtualenv
Доступен в пакете python-virtualenv.
$ virtualenv envname
Активация
Для активации виртуального окружения используйте один из имеющихся скриптов для вашей командной оболочки. Пример для bash:
$ source envname/bin/activate (envname) $
Теперь команды python и pip будут запускаться и управлять пакетами только внутри виртуального окружения, не затрагивая систему.
Для выхода из виртуального окружения выполните функцию, которую создал скрипт активации:
(envname) $ deactivate
Версии Python
По умолчанию виртуальные окружения создаются с использованием стандартного системного Python. Файл bin/python — это просто символическая ссылка на системный python:
$ ls -l envname/bin/python lrwxrwxrwx 1 foo foo 15 янв 29 18:48 envname/bin/python -> /usr/bin/python
Если вы хотите использовать другую версию Python внутри виртуального окружения, можно использовать опцию -p
/--python
у virtualenv:
$ virtualenv -p 3.8 envname $ ls -l envname/bin/python lrwxrwxrwx 1 foo foo 18 янв 29 18:48 envname/bin/python -> /usr/bin/python3.8
Также можно использовать pypy3:
$ virtualenv -p pypy3 envname
virtualenvwrapper
virtualenvwrapper позволяет более удобно управлять виртуальными окружениями через командную строку, предоставляя несколько полезных команд для создания, активации и удаления виртуальных окружений. Этот пакет является обёрткой для python-virtualenv.
Установка
Установите пакет python-virtualenvwrapper и добавьте в ~/.bashrc
:
export WORKON_HOME=~/.virtualenvs source /usr/bin/virtualenvwrapper.sh
Строка source /usr/bin/virtualenvwrapper.sh
может несколько замедлить запуск новой командной оболочки. Для решения проблемы можно использовать source /usr/bin/virtualenvwrapper_lazy.sh
, который загрузит virtualenvwrapper только при первом обращении к нему.
Перезапустите консоль для применения изменений. Каталог WORKON_HOME
будет создан автоматически.
Использование
Подробности можно почитать в официальной документации.
Создание виртуального окружения (все опции командной строки, кроме -a
, -i
, -r
и -h
, передаются в virtualenv, так что можно использовать опцию -p
для выбора нужной версии Python):
$ mkvirtualenv my_env
Активация виртуального окружения:
$ workon my_env
Установка пакето внутри виртуального окружения (скажем, Django):
(my_env) $ pip install django
Выход из виртуального окружения:
(my_env) $ deactivate
Pipenv
pipenv упрощает управление через командную строку, предоставляя одну программу, которая выполняет все функции вышеперечисленных инструментов.
Установка
Установите пакет python-pipenv.
Использование
Все команды можно выполнять в папке проекта, и pipenv распознает текущую ситуацию — найдёт виртуальное окружение в текущем каталоге и будет использовать его.
Подробности в документации: [1], [2], [3].