Виртуальные окружения и пакеты
12.1. Введение
Приложения Python часто используют пакеты и модули, которые не входят в стандартную библиотеку. Иногда приложению требуется определённая версия библиотеки, например, потому что в ней исправлена необходимая ошибка или приложение написано с использованием устаревшей версии интерфейса библиотеки.
Это означает, что одна установка Python может не удовлетворять требованиям всех приложений. Если приложению A нужна версия 1.0 определённого модуля, а приложению B — версия 2.0, то требования конфликтуют, и установка любой из версий — 1.0 или 2.0 — приведёт к тому, что одно из приложений не сможет работать.
Решение этой проблемы — создать виртуальное окружение, автономное дерево каталогов, содержащее установку Python определённой версии, а также ряд дополнительных пакетов.
В этом случае разные приложения могут использовать разные виртуальные окружения. Чтобы разрешить описанный выше конфликт требований, для приложения A можно создать собственное виртуальное окружение с установленной версией 1.0, а для приложения B — другое виртуальное окружение с версией 2.0. Если для приложения B потребуется обновить библиотеку до версии 3.0, это не повлияет на окружение приложения A.
12.2. Создание виртуальных окружений
Модуль для создания виртуальных окружений и управления ими называется venv. venv установит версию Python, из которой была запущена команда (согласно параметру --version). Например, выполнение команды с python3.12 установит версию 3.12.
Чтобы создать виртуальное окружение, выберите каталог, в котором хотите его разместить, и запустите модуль venv как скрипт, указав путь к каталогу:
python -m venv tutorial-env
При этом будет создан каталог tutorial-env, если он ещё не существует, а в нём — каталоги с копией интерпретатора Python и различными вспомогательными файлами.
Для виртуального окружения часто используют каталог .venv. В этом случае каталог обычно скрыт в командной оболочке и не мешает, а его название объясняет, для чего он предназначен. Кроме того, это предотвращает конфликт с файлами определения переменных окружения .env, которые поддерживаются некоторыми инструментами.
Создав виртуальное окружение, вы можете его активировать.
В Windows выполните:
tutorial-env\Scripts\activate
В Unix или macOS выполните:
source tutorial-env/bin/activate
(Этот скрипт предназначен для командной оболочки bash. Если вы используете оболочки csh или fish, вместо него используйте альтернативные скрипты activate.csh и activate.fish.)
При активации виртуального окружения приглашение командной оболочки изменится и будет показывать, какое виртуальное окружение вы используете. Также изменится окружение: при запуске python будет использоваться соответствующая версия и установка Python. Например:
$ source ~/envs/tutorial-env/bin/activate (tutorial-env) $ python Python 3.5.1 (default, May 6 2016, 10:59:36) ... >>> import sys >>> sys.path ['', '/usr/local/lib/python35.zip', ..., '~/envs/tutorial-env/lib/python3.5/site-packages'] >>>
Чтобы деактивировать виртуальное окружение, введите:
deactivate
в терминале.
12.3. Управление пакетами с помощью pip
Устанавливать, обновлять и удалять пакеты можно с помощью программы pip. По умолчанию pip устанавливает пакеты из индекса пакетов Python. Просматривать индекс пакетов Python можно в браузере.
У pip есть несколько подкоманд: «install», «uninstall», «freeze» и другие. (Полную документацию по pip см. в руководстве Установка модулей Python.)
Чтобы установить последнюю версию пакета, укажите его название:
(tutorial-env) $ python -m pip install novas Collecting novas Downloading novas-3.1.1.3.tar.gz (136kB) Installing collected packages: novas Running setup.py install for novas Successfully installed novas-3.1.1.3
Можно также установить конкретную версию пакета: укажите его название, затем == и номер версии:
(tutorial-env) $ python -m pip install requests==2.6.0 Collecting requests==2.6.0 Using cached requests-2.6.0-py2.py3-none-any.whl Installing collected packages: requests Successfully installed requests-2.6.0
При повторном запуске этой команды pip обнаружит, что запрошенная версия уже установлена, и ничего не сделает. Чтобы установить другую версию, укажите её номер. Также можно выполнить python
-m pip install --upgrade, чтобы обновить пакет до последней версии:
(tutorial-env) $ python -m pip install --upgrade requests
Collecting requests
Installing collected packages: requests
Found existing installation: requests 2.6.0
Uninstalling requests-2.6.0:
Successfully uninstalled requests-2.6.0
Successfully installed requests-2.7.0
Команда python -m pip uninstall с одним или несколькими названиями пакетов удалит их из виртуального окружения.
Команда python -m pip show выведет сведения об определённом пакете:
(tutorial-env) $ python -m pip show requests --- Metadata-Version: 2.0 Name: requests Version: 2.7.0 Summary: Python HTTP for Humans. Home-page: http://python-requests.org Author: Kenneth Reitz Author-email: me@kennethreitz.com License: Apache 2.0 Location: /Users/akuchling/envs/tutorial-env/lib/python3.4/site-packages Requires:
Команда python -m pip list выведет список всех пакетов, установленных в виртуальном окружении:
(tutorial-env) $ python -m pip list novas (3.1.1.3) numpy (1.9.2) pip (7.0.3) requests (2.7.0) setuptools (16.0)
Команда python -m pip freeze выведет похожий список установленных пакетов, но в формате, который ожидает python -m pip install. Часто этот список сохраняют в файл requirements.txt:
(tutorial-env) $ python -m pip freeze > requirements.txt (tutorial-env) $ cat requirements.txt novas==3.1.1.3 numpy==1.9.2 requests==2.7.0
Файл requirements.txt можно добавить в систему контроля версий и включить в состав приложения. Тогда пользователи смогут установить все необходимые пакеты с помощью install -r:
(tutorial-env) $ python -m pip install -r requirements.txt Collecting novas==3.1.1.3 (from -r requirements.txt (line 1)) ... Collecting numpy==1.9.2 (from -r requirements.txt (line 2)) ... Collecting requests==2.7.0 (from -r requirements.txt (line 3)) ... Installing collected packages: novas, numpy, requests Running setup.py install for novas Successfully installed novas-3.1.1.3 numpy-1.9.2 requests-2.7.0
У pip есть множество других параметров. Полную документацию по pip см. в руководстве Установка модулей Python. Если вы написали пакет и хотите опубликовать его в индексе пакетов Python, обратитесь к руководству пользователя по упаковке Python.
© 2001–2025 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.13/tutorial/venv.html