Spec-Zone.ru › Python 3.12

Виртуальные среды и пакеты

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

Spec-Zone.ru

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