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,
которая доступна. Если у вас есть несколько версий 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 пакетного индекса
<https://pypi.org>. Вы можете просмотреть Python Package Index, перейдя на него
в веббраузере, или вы можете использовать ограниченную поисковую возможность pip
:
(tutorial-env) $ pip search astronomy
skyfield - Элегантная астрономия для Python
gary - Галактическая астрономия и гравитационная динамика.
novas - Библиотека астрономии NOVAS военно-морской обсерватории США
astroobs - Предоставляет астрономические эфемериды для планирования наблюдений с помощью телескопа
PyAstronomy - Коллекция инструментов для Python, связанных с астрономией.
...
pip
имеет ряд подкоманд: «search», «install», «uninstall»,
«freeze», и т.д. (См. руководство по Установка модулей Python для получения
полной документации для pip
.)
Вы можете установить самую последнюю версию пакета, указав имя пакета:
(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
обладает множеством других опций. Смотрите полную документацию
Установка модулей Python по pip
. Когда вы написали пакет и хотите сделать его доступным
в Python Package Index, см. в руководстве Распространение модулей Python.