Документация Python неофициальный перевод
Содержание страницы

12. Виртуальные окружения и пакетыVirtual Environments and Packages

12.1. ВведениеIntroduction

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

Это означает, что одна установка Python может не удовлетворять требованиям всех приложений. Если приложению A нужна версия 1.0 определённого модуля, а приложению B – версия 2.0, то требования противоречат друг другу, и установка либо версии 1.0, либо 2.0 оставит одно из приложений неработоспособным.

Решение этой проблемы – создать виртуальное окружение (часто сокращённо «virtualenv»), отдельное дерево каталогов, которое содержит установку Python для конкретной версии Python, а также ряд дополнительных пакетов.

Разные приложения могут использовать разные виртуальные окружения. Чтобы решить описанный ранее пример конфликтующих требований, приложение A может иметь собственное виртуальное окружение с установленной версией 1.0, в то время как приложение B – другое виртуальное окружение с версией 2.0. Если приложению B потребуется обновить библиотеку до версии 3.0, это не повлияет на окружение приложения A.

12.2. Создание виртуальных окруженийCreating Virtual Environments

Скрипт для создания и управления виртуальными окружениями называется pyvenv. pyvenv обычно устанавливает самую новую версию Python из доступных; скрипт также устанавливается с номером версии, поэтому если в системе есть несколько версий Python, можно выбрать конкретную версию, запустив pyvenv-3.4 или любую другую нужную версию.

Чтобы создать виртуальное окружение, следует выбрать каталог, в который его поместить, и запустить pyvenv, указав путь к этому каталогу:

pyvenv tutorial-env

Будет создан каталог tutorial-env, если его нет, а также вложенные каталоги, содержащие копию интерпретатора Python, стандартную библиотеку и различные вспомогательные файлы.

После создания виртуального окружения его необходимо активировать.

В 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.4.3+ (3.4:c7b9645a6f35+, May 22 2015, 09:31:25)
  ...
>>> import sys
>>> sys.path
['', '/usr/local/lib/python34.zip', ...,
'~/envs/tutorial-env/lib/python3.4/site-packages']
>>>

12.3. Управление пакетами с помощью pipManaging Packages with pip

После активации виртуального окружения можно устанавливать, обновлять и удалять пакеты с помощью программы pip. По умолчанию pip устанавливает пакеты из Python Package Index, <https://pypi.python.org/pypi>. Можно просматривать Python Package Index в веб-браузере или использовать ограниченную функцию поиска pip:

(tutorial-env) -> pip search astronomy
skyfield               - Elegant astronomy for Python
gary                   - Galactic astronomy and gravitational dynamics.
novas                  - The United States Naval Observatory NOVAS astronomy library
astroobs               - Provides astronomy ephemeris to plan telescope observations
PyAstronomy            - A collection of astronomy related tools for Python.
...

pip имеет ряд подкоманд: «search», «install», «uninstall», «freeze» и т.д. (Обратитесь к руководству Installing Python Modules за полной документацией по pip.)

Вы можете установить последнюю версию пакета, указав его имя:

-> 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

Вы также можете установить конкретную версию пакета, указав имя пакета, затем == и номер версии:

-> 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 для обновления пакета до последней версии:

-> 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:

-> 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 имеет множество других возможностей. Обратитесь к руководству Installing Python Modules за полной документацией по pip. После написания пакета, чтобы опубликовать его в Python Package Index, обратитесь к руководству Distributing Python Modules.