Включите исполнение JavaScript в браузере, чтобы запустить приложение.

Что такое venv и virtualenv в Python

Утилиты venv и virtualenv позволяют построить виртуальную среду в Python. Рассказываем, зачем это нужно и как использовать на Windows и Linux.

Понятие виртуальной среды в Python

В Пайтоне можно помещать проекты в изолированные рабочие пространства. Тогда у каждого приложения, скрипта и сервиса, которые вы разрабатываете, могут быть свои зависимости, не влияющие на другие проекты. Такие пространства называются виртуальными средами (virtual environment).

Независимое виртуальное пространство позволяет избежать конфликтов версий. Например, приложение А работает на библиотеке Pandas 1.0, а программе Б нужен Pandas 2.2.3. После обновления библиотеки перестает работать приложение А, без обновления не работает программа Б.

Также virtual environment помогает изолировать проект от системных библиотек и упрощает развертывание на разных машинах. Обособленные пространства удобно использовать для обучения, исследования возможностей разных версий Пайтон, тестирования фреймворков и инструментов, не рискуя нарушить работоспособность ранее написанного кода. 

Альтернатива virtual environment — контейнеризация, например Kubernetes или Docker. Контейнеры дают больше производительности и гибкости: приложение проще перенести в другую систему. Но virtual environment проще в настройке и управлении, поэтому чаще используется для небольших разработок и хорошо подходит программистам, которые только начинают осваивать Пайтон.

Для работы с изолированными средами можно использовать модули venv и virtualenv.

Как работать с venv

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

Создание virtual environment

Создайте папку проекта и зайдите в нее:

mkdir myproject

cd myproject

Выполните следующее:

python -m venv myproject_environment

Здесь myproject_environment — имя директории, где будут храниться файлы виртуального окружения. Вы можете указать любое название. Флаг -m запускает venv как исполняемый модуль.

В результате должен появиться каталог с именем директории, в нашем примере — myproject_environment. Внутри каталога хранятся копии интерпретатора, подкаталоги и файлы, необходимые для работы изолированной среды.

После этого нужно активировать virtual environment.

Активация

В зависимости от вашей ОС в папке проекта выполните:

  1. на Linux или macOS: source myproject_environment/bin/activate;
  2. на Windows: myproject_environment\Scripts\activate.

Замените myproject_environment на название, которое вы создали на предыдущем шаге. После выполнения команды в терминале появится префикс, который указывает на успешную активацию изолированной среды. В нашем примере это myproject_environment. Теперь все команды, связанные с установкой компонентов, управлением зависимостями и запусками скриптов, будут выполнены в контексте myproject_environment.

Если при попытке активации на Windows появилась ошибка безопасности с текстом «Выполнение сценариев отключено в этой системе», попробуйте следующее:

  1. В PowerShell выбрать «Запуск от имени администратора».
  2. Проверить текущую политику выполнения скриптов с помощью запроса Get-ExecutionPolicy.
  3. Если политика отключена (Restricted), изменить настройку на RemoteSigned с помощью запроса Set-ExecutionPolicy RemoteSigned.
  4. Подтвердить изменения нажатием Y.

После этого можно снова выполнить Get-ExecutionPolicy, чтобы проверить, сохранились ли изменения. Если политика выполнения скриптов включена (RemoteSigned), еще раз запустите процедуру активации для Windows.

На Linux возможная проблема на этапе активации — ошибка разрешения прав доступа (Permission denied). Это значит, что у вас нет достаточных прав для выполнения файла активации. Попробуйте запустить команду с правами администратора:

sudo source myproject_environment/bin/activate

Также часто встречается ошибка отсутствия файла или каталога (The system cannot find the path specified, No such file or directory). Убедитесь, что находитесь в корневой директории проекта и правильно указали путь до файла активации.

Установка пакетов

После успешной активации в полученное изолированное пространство можно устанавливать пакеты. Для примера установим Flask:

pip install flask

Все пакеты, которые вы устанавливаете, останутся доступными только в рамках virtual environment. Команды и запросы будут работать с компонентами и версиями данного окружения.

Чтобы посмотреть все доступные функции, отправьте запрос: 

python -m venv –help

Система покажет справочную информацию по работе с virtual environment, включая активацию и деактивацию.

Деактивация

Чтобы запустить другое окружение или вернуться к обычной системе, нужно выйти из текущей виртуальной среды. Для этого выполните:

deactivate

Если данное изолированное пространство больше не нужно, можно удалить папку venv, в которой хранятся все файлы виртуальной среды. 

Чтобы сохранить наполнение и файлы virtual environment на будущее, выполните:

pip freeze > requirements.txt 

Система сгенерирует файл requirements.txt со списком всех установленных пакетов. Если то же самое рабочее пространство нужно будет воссоздать в другой директории или на другом компьютере с Linux или Windows, достаточно выполнить:

pip install -r requirements.txt 

Если вы постоянно работаете с виртуальными средами и часто переключаетесь между ними, для автоматизации процесса попробуйте Virtualenvwrapper. Это набор расширений для организации нескольких virtual environment, быстрой активации, удаления и управления ими на одном компьютере.

Как работать с virtualenv

Инструмент подходит для Python более ранних выпусков, 2 и 3, требует установки.

Для инсталляции virtualenv выполните:

pip install virtualenv

Чтобы проверить, установлен ли virtualenv, в командной строке или терминале выполните:

virtualenv –version

или

pip show virtualenv

Если модуль установлен, вы увидите информацию с названием, расположением и остальными метаданными.

Создание virtual environment

Создадим изолированное рабочее пространство с названием myproject_environment:

cd myproject

virtualenv myproject_environment

Система создаст в каталоге myproject папку myproject_environment.

Модуль virtualenv позволяет выбрать интерпретатор Python. Чтобы это сделать, при создании нужно задать нужные параметры интерпретатора, например:

virtualenv -p /usr/bin/python2.7 myproject_environment

или

virtualenv -p python3 myproject_environment

Здесь параметр -p указывает выпуск интерпретатора, который вы хотите использовать. Все файлы и зависимости будут помещены в каталог myproject_environment.

Проверить текущую версию можно с помощью команды python –version.

Активация

Алгоритм активации зависит от операционной системы, на которой вы работаете.

Если у вас macOS или Linux, выполните source myproject_environment/bin/activate, где myproject_environment — имя вашего окружения из предыдущего шага.

На Windows запустите myproject_environment\Scripts\activate.

Установка пакетов

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

Деактивация

Выйти из текущего окружения можно с помощью команды deactivate.

Если файлы больше не понадобятся, удалите соответствующую папку:

rm -rf myproject_environment

Чтобы сохранить список установленных пакетов, используйте pip freeze по алгоритму, описанному в предыдущем разделе.

Что выбрать: venv или virtualenv?

Назначение обоих инструментов — создание независимого рабочего пространства со своим набором компонентов и настроек. С помощью этих модулей можно изолировать несколько проектов, например чтобы писать и тестировать код, который должен работать в разных условиях. Вы можете разворачивать отдельные virtual environment для каждой разработки, чтобы их зависимости не пересекались.

При этом venv проще в использовании, так как не требует отдельной установки, но совместим только с Python 3.3+. Virtualenv поддерживает более ранние версии и имеет дополнительные функции, например возможность выбирать интерпретатор.