Виртуальные среды и пакеты
12.1. Введение
Приложения Python часто используют пакеты и модули, которые не входят в стандартную библиотеку. Приложениям иногда требуется определённая версия библиотеки, потому что приложение может требовать исправления конкретной ошибки, или оно может быть написано с использованием устаревшей версии интерфейса библиотеки.
Это означает, что одна установка Python может не удовлетворить требованиям всех приложений. Если приложению A нужна версия 1.0 определённого модуля, а приложению B нужна версия 2.0, то требования противоречат друг другу, и установка либо версии 1.0, либо 2.0 оставит одно приложение неработающим.
Решение этой проблемы заключается в создании виртуальной среды, самодостаточного дерева каталогов, содержащего установку Python для определённой версии 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 Package Index. Вы можете просмотреть Python Package Index, перейдя к нему в вашем веб-браузере.
pip имеет ряд подкоманд: «install», «uninstall», «freeze» и т. д. (Обратитесь к руководству Установка модулей Python для получения полной документации для pip.)
Вы можете установить последнюю версию пакета, указав имя пакета:
(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 имеет множество других опций. Обратитесь к руководству Установка модулей Python для получения полной документации по pip. Если вы написали пакет и хотите разместить его в Python Package Index, обратитесь к руководству по упаковке Python.
© 2001–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.12/tutorial/venv.html