Приложения 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 и различные вспомогательные файлы.
Распространенным расположением каталога для виртуальной среды является .venv. Это имя удерживает каталог, обычно скрытый в вашей оболочке и, таким образом, в стороне, при этом давая ему имя, которое объясняет, почему каталог существует. Это также предотвращает конфликты с файлами определения переменных среды .env, которые поддерживаются некоторыми инструментами.
После того, как вы создали виртуальную среду, вы можете активировать ее.
В Windows запустите:
tutorial-env\Scripts\activate.bat
В Unix или MacOS запустите:
source tutorial-env/bin/activate
(Этот сценарий написан для оболочки bash. Если вы используете оболочки csh или fish, вместо них следует использовать альтернативные сценарии активации.csh и активировать.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 будет устанавливать пакеты из индекса пакетов Python, https://pypi.org. Вы можете просмотреть индекс пакетов Python, перейдя к нему в веб-браузере.
pip имеет ряд подкоманд: “install”, “uninstall”, “freeze” и т. д. (Обратитесь к руководству по установке модулей Python для получения полной документации по pip.)
Вы можете установить последнюю версию пакета, указав имя пакета:
$ 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
Вы также можете установить конкретную версию пакета, указав имя пакета, за которым следует == и номер версии:
$ 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 заметит, что запрошенная версия уже установлена, и ничего не сделает. Вы можете указать другой номер версии, чтобы получить эту версию, или запустить pip install –upgrade, чтобы обновить пакет до последней версии:
$ 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
pip uninstall, за которым следует одно или несколько имен пакетов, удалит пакеты из виртуальной среды.
pip show отобразит информацию о конкретном пакете:
$ 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 отобразит все пакеты, установленные в виртуальной среде:
$ 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:
$ pip freeze > requirements.txt $ cat requirements.txt novas==3.1.1.3 numpy==1.9.2 requests==2.7.0
Затем файл requirements.txt можно зафиксировать в системе управления версиями и отправить как часть приложения. Затем пользователи могут установить все необходимые пакеты с помощью install -r:
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