Виртуальные окружения и пакеты
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 как скрипт с путём к каталогу:
python3 -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, <https://pypi.org>. Вы можете просмотреть Python Package Index, перейдя к нему в веб-браузере.
pip имеет ряд подкоманд: «установить», «удалить», «заморозить» и т. д. (Для получения полной документации по pip, обратитесь к руководству Установка модулей Python.)
Вы можете установить последнюю версию пакета, указав имя пакета:
(tutorial-env) $ 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) $ 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) $ 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) $ 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 Package Index, обратитесь к руководству Распространение модулей Python.
© 2001–2022 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.8/tutorial/venv.html