Виртуальные окружения и пакеты
Введение
Python-приложения часто используют пакеты и модули, не входящие в стандартную библиотеку. Приложениям иногда нужна специфичная версия библиотеки, потому что приложение может требовать, чтобы конкретная ошибка была исправлена или приложение может быть написано, используя устаревший версию интерфейса библиотеки.
Это означает, что иногда невозможно для одной установки Python сооветствовать каждому приложению. Если приложение A требует версию 1.0 некого модуля, а приложение B требует версию 2.0, то требования конфликтуют и установка либо версии 1.0, либо 2.0 оставит одно из приложений нерабочим.
Решение этой проблемы — создать виртуальное окружение, отдельное дерево каталогов, которое содержит инсталляцию Python для конкретной версии Python, плюс ряд дополнительных пакетов.
Различные приложения могут тогда использовать различные виртуальные окружения. Для разрешения предыдущей проблемы конфликтующих требований приложение A может иметь свое собственное окружение с установленной версией 1.0, в то время как приложение B имеет другое виртуальное окружение с версией 2.0. Если приложение B требует обновить библиотеку до версии 3.0, то это не повлияет на окружение приложения A.
Создание виртуальных окружений
Модуль для создания и управления виртуальными окружениями называется venv. venv обычно устанавливает самую последнюю версию Python, которая доступна. Если у вас есть несколько версий Python на вашей системе, то вы можете выбрать конкретную версию Python, выполнив python3
или какую версию вы хотите.
Для создания виртуального окружения, решите насчет директории, где вы хотите поместить его, и запустите модуль venv как скрипт с этой директорией:
python3 -m venv tutorial-env
Это создаст директорию tutorial-env
, если та еще не существует, и также создаст директории внутри ее, содержащие копию интерпретатора Python, стандартную библиотеку, и различные поддерживающие файлы.
После создания виртуального окружения, вы можете активировать его.
На 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'] >>>
Управляя пакетами с помощью 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” и т.д.. (см. руководство Устанавливая модули 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.