Виртуальные окружения и пакеты
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. Если на вашей системе установлено несколько версий Python, вы можете выбрать определенную версию Python, выполнив python3 или любую другую желаемую версию.
Чтобы создать виртуальную среду, определите каталог, в котором вы хотите ее разместить, и выполните модуль venv как скрипт с путем к каталогу:
python -m venv tutorial-env
Это создаст каталог tutorial-env, если он не существует, а также создаст каталоги внутри него, содержащие копию интерпретатора Python и различные вспомогательные файлы.
Обычным местоположением каталога виртуальной среды является .venv. Это имя обычно скрывает каталог в вашей оболочке, делая его незаметным, но в то же время даёт понять, для чего он предназначен. Это также предотвращает конфликты с .env файлами определения переменной среды, которые поддерживает некоторые инструменты.
После создания виртуальной среды вы можете её активировать.
В Windows выполните:
tutorial-env\Scripts\activate.bat
В 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'] >>>
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 заметит, что запрошенная версия уже установлена и ничего не сделает. Вы можете указать другой номер версии, чтобы получить эту версию, или вы можете выполнить 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
pip uninstall за которым следует одно или несколько имён пакетов, удалит пакеты из виртуальной среды.
pip show отобразит информацию об определённом пакете:
(tutorial-env) $ 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:
pip list отобразит все установленные пакеты в виртуальной среде:
(tutorial-env) $ pip list novas (3.1.1.3) numpy (1.9.2) pip (7.0.3) requests (2.7.0) setuptools (16.0)
pip freeze создаст аналогичный список установленных пакетов, но вывод использует формат, который ожидает pip install. Обычная конвенция заключается в размещении этого списка в файле requirements.txt:
(tutorial-env) $ 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–2023 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.10/tutorial/venv.html