Модуль venv в Python: как установить и настроить виртуальную среду
При разработке приложения на языке Python часто требуется создание изолированной или виртуальной среды (окружения). Раньше это делали с помощью инструмента virtualenv. Начиная с версии Python 3.3, он входит в стандартную библиотеку, выполняя те же функции в модуле venv.
Сегодня мы рассмотрим, какие преимущества дает разработчику модуль venv, как с ним правильно работать и чем он отличается от virtualenv.
Согласно официальной документации Python, виртуальная среда — это одноразовое окружение, не регистрируемое в Git и установленное поверх базовой среды Python. При необходимости ее можно изолировать от пакетов: всех или тех, которые определены программистом.
Виртуальная среда нужна для хранения интерпретатора, библиотек и двоичных файлов, необходимых для поддержки проекта. Ее обычно размещают в каталоге проекта под именем venv или .venv, либо в каталоге контейнера, если таких сред в проекте несколько.
Чтобы создать виртуальную (изолированную) среду в Python, запустите терминал и перейдите в директорию, где содержится ваш проекта. После этого выполните команду:
python -m venv ourenv
Наименование ourenv — это название вашей виртуальной среды. По желанию вы можете выбрать любое другое имя.
В Windows команда venv вызывается следующим образом:
c:\>Python33\python -m venv c:\path\to\ourenv
Дальше нам нужно активировать эту среду. Это делается при помощи команды:
myenv\Scripts\activate
Если активация прошла успешно, то в начале строки терминала отобразится название виртуальной среды. В нашем случае это ourenv. Дальше нужно установить пакеты. Для этого применяется команда pip. Как вы уже помните, поскольку мы работаем в условиях виртуальной среды, пакеты будут установлены только в этом окружении:
pip install package_name
Завершив работу в проекте, нужно деактивировать среду. Это делается простой командой deactivate.
Возможности модуля venv не ограничены лишь созданием виртуальной среды. Исходя из требований проекта вы можете добавить в нее разные параметры и настройки. Например, можно выбрать версию интерпретатора Python:
/usr/bin/python3.8 -m venv ourenv
В этом фрагменте кода /usr/bin/python3.8 является путем к выбранной вами версии Python.
Также вы можете использовать в вашем изолированном окружении параметр –system-site-packages. Он открывает доступ к глобально установленным пакетам Python. Это может быть полезно, если есть потребность использовать определенные пакеты без их повторной установки в виртуальной среде.
python -m venv ourenv --system-site-packages
Параметр –symlinks или –copies
Пример с использованием символических ссылок:
python -m venv ourenv --symlinks
Пример с копированием файлов:
python -m venv ourenv --copies
Параметр –clear
С помощью этого параметра можно очистить существующую виртуальную среду перед её повторным созданием.
python -m venv ourenv --clear
Параметр –upgrade
Обновляет существующую виртуальную среду до актуальной версии Python.
python -m venv ourenv --upgrade
Пример создания виртуальной среды с несколькими параметрами
python3.9 -m venv ourenv --system-site-packages --copies
Здесь мы создаём изолированное виртуальное окружение ourenv по версии Python 3.9, глобальные пакеты и файлы Python копируются в среду.
Для управления зависимостями проекта нужен файл requirements.txt. Благодаря ему будет намного проще воспроизвести среду на других компьютерах и системах. Чтобы создать этот файл, после установки выбранных пакетов в вашей изолированной среде выполните команду:
pip freeze > requirements.txt
Теперь установим зависимости из requirements.txt. Дл этого на другом компьютере или в другой виртуальной среде введите:
pip install -r requirements.txt
Вы можете выбрать особые переменные окружения для вашей изолированной среды. Это делается путем добавления их в скрипты активации файла activate.bat в директории Scripts.
set MY_VARIABLE=value
Если же вам нужно добавить дополнительные пути для поиска модулей, то для этого измените переменную окружения PYTHONPATH.
export PYTHONPATH=/path/to/my/modules:$PYTHONPATH
Вы можете заметно ускорить работу с проектом, если научитесь создавать изолированные окружения по шаблону. Это можно делать со всеми необходимыми параметрами с помощью скриптов на Bash или PowerShell. Вот наглядный пример Bash-скрипта:
#!/bin/bash # Создание виртуальной среды с определённой версией Python python3.9 -m venv myenv --system-site-packages --copies # Активация виртуальной среды source myenv/bin/activate # Установка зависимостей pip install -r requirements.txt
Все что вам нужно, это сохранить этот скрипт, под любым понравившимся названием, например, setup_env.sh, и сделать его исполняемым. Дальше просто запустите скрипт:
chmod +x setup_env.sh ./setup_env.sh
Кроме встроенного модуля venv, в экосистеме Python есть альтернативные инструменты для создания и работы с виртуальными средами. Наиболее известный среди них называется virtualenv.
По своей сути virtualenv — это просто устаревшая версия venv. Но он имеет пару плюсов: поддерживает больше опций и может использоваться со старыми версиями Python. Установка virtualenv происходит по команде:
pip install virtualenv
Создание виртуальной среды с virtualenv и дополнительными параметрами:
virtualenv ourenv --python=python3.8 --always-copy
Умение создавать виртуальную (изолированную) среду по заданным параметрам дает возможность Python-разработчику больше гибкости в настройке окружения под требования проекта. Применяя различные опции модуля venv или иные инструменты, можно обеспечить лучшую изоляцию и управляемость проекта. В итоге это станет важным аспектом работы программиста на Python, особенно при одновременной или командной работе над несколькими проектами.
Visual Code от Microsoft, вероятно, один из самых популярных редакторов кода. Разработчики любят его за…
Япония сама по себе — сплошной киберпанк. Это заметил даже культовый писатель жанра Уильям Гибсон,…
Сам по себе телефон Айфон 14 Про Макс – отличный подарок. У него красивая заводская…
На фоне роста спроса на ликвидность в бычьем рынке 2025 года, криптозаймы снова выходят на…
Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…
Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…