Spec-Zone.ru › Python 3.14

Виртуальные окружения и пакеты

12.1. Введение

Приложения Python часто используют пакеты и модули, которые не входят в стандартную библиотеку. Иногда приложениям требуется определённая версия библиотеки, поскольку приложению может понадобиться исправление конкретной ошибки или оно может быть написано с использованием устаревшей версии интерфейса библиотеки.

Это означает, что одна установка Python может не удовлетворять требованиям всех приложений. Если приложению A нужна версия 1.0 определённого модуля, а приложению B — версия 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']
>>>

Обратите внимание, что активированное виртуальное окружение никак не изменяет переменную PYTHONPATH. Это может привести к неожиданным результатам, если путь содержит ссылки на код, несовместимый с версией Python, используемой виртуальным окружением. Рекомендуется выполнить unset PYTHONPATH в bash или использовать эквивалентную команду для вашей оболочки.

Чтобы деактивировать виртуальное окружение, введите:

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 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.14/tutorial/venv.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API