Понятие виртуальной среды в 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.
Активация
В зависимости от вашей ОС в папке проекта выполните:
- на Linux или macOS: source myproject_environment/bin/activate;
- на Windows: myproject_environment\Scripts\activate.
Замените myproject_environment на название, которое вы создали на предыдущем шаге. После выполнения команды в терминале появится префикс, который указывает на успешную активацию изолированной среды. В нашем примере это myproject_environment. Теперь все команды, связанные с установкой компонентов, управлением зависимостями и запусками скриптов, будут выполнены в контексте myproject_environment.
Если при попытке активации на Windows появилась ошибка безопасности с текстом «Выполнение сценариев отключено в этой системе», попробуйте следующее:
- В PowerShell выбрать «Запуск от имени администратора».
- Проверить текущую политику выполнения скриптов с помощью запроса Get-ExecutionPolicy.
- Если политика отключена (Restricted), изменить настройку на RemoteSigned с помощью запроса Set-ExecutionPolicy RemoteSigned.
- Подтвердить изменения нажатием 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 поддерживает более ранние версии и имеет дополнительные функции, например возможность выбирать интерпретатор.