Что есть pip
? pip
есть стандартный менеджер пакетов для Python. Он позволяет устанавливать и управлять дополнительными пакетами, которые не входят в стандартную библиотеку Python. Этот туториал есть введение в pip
для новичков‑питонистов.
В этом туториале вы научитесь:
- Устанавливать дополнительные пакеты, не включенные в стандартный дистрибутив Python.
- Искать пакеты опубликованные в реестре пакетов Python (PyPI)
- Управлять требованиями к сценариям и приложениям
- Удалять пакеты и зависимости
В дальнейшем вы увидите, что сообщество Python активно создаёт аккуратные альтернативы pip
, но об этом позже.
Содержание
Быстрый старт с pip
Итак, что есть pip
? pip
— менеджер пакетов Python. Это инструмент, который позволяет устанавливать и управлять дополнительными библиотеками, не вошедшими в стандартную библиотеку, и зависимостями между ними.
Управление пакетами настолько важно, что pip
был включен в установщик Python начиная с версий 3.4
для Python 3 и 2.7.9
для Python 2. Он используется в большинстве проектов на Python и делает его незаменимым инструментом для каждого питониста.
Концепция управления пакетами может быть вам уже знакома, если вы работаете с другими языками. JavaScript использует npm в качестве менеджера пакетов, Ruby использует gem, а в .NET эту роль выполняет NuGet. В Python стандартным менеджером пакетов стал pip
.
Установщик Python автоматически устанавливает pip
, если это не древняя версия Python. Чтобы убедиться в доступности pip
, выполните в терминале следующую команду:
$ pip --version pip 18.1 from C:\Python37\lib\site-packages\pip (python 3.7)
Вы должны увидеть похожее сообщение, показывающее версию pip, а также место расположения и версию Python. Если вы используете старую версию Python, в которой нет pip, то можете установить его, следуя инструкциям для вашей системы в документации по установке pip
.
Возможно, вы захотите испытать приведенные в этом руководстве примеры в виртуальной среде, во‑избежании установки пакетов глобальной установки Python. Можно узнать о виртуальных средах в Виртуальная среда Python: Учебник для начинающих. В разделе Использование виртуальной среды из этого туториала вы узнаете об основах создание новых виртуальных сред.
Установка пакетов с pip
Python считается полностью упакованным языком. Подразумевается, что стандартная библиотека Python включает в себя обширнейший набор пакетов и модулей для разработчиков с их сценариями и приложениями.
В то же самое время у Python есть очень активное сообщество, которое предлагает на всеобщее рассмотрение просто огромный набор пакетов на «любой вкус и цвет», очень значительно способствующих разработке. Такие пакеты публикуются в Реестре пакетов Python, известном под интригующем именем PyPI (произносится как «ПиПей»). PyPI содержит обширную коллекцию пакетов, в том числе и виртуальные среды разработки, инструменты и библиотеки.
Многие из этих пакетов упрощают разработку на Python, предоставляя дружественные интерфейсы для функций, которые уже существуют в стандартной библиотеке. Например, можно написать скрипт, который извлекает содержимое веб-страницы, используя только стандартные библиотеки, включенные в Python:
# In using-http.py import cgi import http.client server = 'www.google.com' url = '/' conn = http.client.HTTPSConnection(server) conn.request('GET', url) response = conn.getresponse() content_type = response.headers.get('Content-Type') _, params = cgi.parse_header(content_type) encoding = params.get('charset') data = response.read() text = data.decode(encoding) print(f'Response returned: {response.status} ({response.reason})') print('Body:') print(text)
В этом сценарии импортируется cgi
и http.client
, включенные в стандартную библиотеку Python. Создаётся объект HTTPSConnection
специфицирующий сервер и делается .request()
после чего вызывается .getresponse()
для получения ответа.
В ответе можно прочитать Content-Type
заголовка и распарсив его, используя модуль cgi
извлечь имя набора символов кодировки страницы.
cgi.parse_header() возвращает кортеж с основным значением и словарь параметров. Например, заголовок Content-Type
может содержать значение text/html; charset=ISO-8859-1
.
Первым элементом кортежа является строка text/html
, а слеующим элементом будет словарь {'charset': 'ISO-8859-1'}
. Поскольку нас интересует только значение параметра charset
, то можно игнорировать начало кортежа, и использовать подчёркивание: _, params = cgi.parse_header(content_type)
.
Примечание: в The Meaning of Underscores in Python описано, как с помощью подчёркивания разделить значения в кортеже.
Зная кодировку страницы, можно прочитать ответ и расшифровать его в текст. Можно запустить этот пример в консоли и посмотреть, как он работает:
$ python using-http.py Response returned: 200 (OK) Body: ;;;;;... Additional Output Omitted
Извлечение содержимого веб-страницы это очень даже приличная работа для такого маленького скрипта. К счастью, есть пакет Python, который за счет хорошего интерфейса ещё более упрощает HTTP‑запросы и позволяет делать именно то, что хотите.
Базовая установка пакета
В PyPI находится очень популярная библиотека для выполнения HTTP‑запросов, которая называется requests. Можно узнать все об этом в документации на официальном сайте.
Первый шаг — установить пакет requests
в вашу среду. Можно узнать о поддерживаемых командах pip
, запустив их с помощью help
:
$ pip help Usage: pip <command> [options] Commands: install Install packages. download Download packages. uninstall Uninstall packages. freeze Output installed packages in requirements format. list List installed packages. show Show information about installed packages. check Verify installed packages have compatible dependencies. config Manage local and global configuration. search Search PyPI for packages. wheel Build wheels from your requirements. hash Compute hashes of package archives. completion A helper command used for command completion. help Show help for commands. General Options: -h, --help Show help. --isolated Run pip in an isolated mode, ignoring environment variables and user configuration. -v, --verbose Give more output. Option is additive, and can be used up to 3 times. -V, --version Show version and exit. -q, --quiet Give less output. Option is additive, and can be used up to 3 times (corresponding to WARNING, ERROR, and CRITICAL logging levels). --log <path> Path to a verbose appending log. --proxy <proxy> Specify a proxy in the form [user:passwd@]proxy.server:port. --retries <retries> Maximum number of retries each connection should attempt (default 5 times). --timeout <sec> Set the socket timeout (default 15 seconds). --exists-action <action> Default action when a path already exists: (s)witch, (i)gnore, (w)ipe, (b)ackup, (a)bort). --trusted-host <hostname> Mark this host as trusted, even though it does not have valid or any HTTPS. --cert <path> Path to alternate CA bundle. --client-cert <path> Path to SSL client certificate, a single file containing the private key and the certificate in PEM format. --cache-dir <dir> Store the cache data in <dir>. --no-cache-dir Disable the cache. --disable-pip-version-check Don't periodically check PyPI to determine whether a new version of pip is available for download. Implied with --no-index.
В pip
есть команда install
для установки пакетов. Можно запустить его для установки пакета requests
:
$ pip install requests Looking in indexes: https://pypi.org/simple Collecting requests Using cached https://files.pythonhosted.org/packages/7d/e3/ 20f3d364d6c8e5d2353c72a67778eb189176f08e873c9900e10c0287b84b/ requests-2.21.0-py2.py3-none-any.whl Collecting chardet<3.1.0,>;=3.0.2 (from requests) Using cached https://files.pythonhosted.org/packages/bc/a9/ 01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/ chardet-3.0.4-py2.py3-none-any.whl Collecting idna<2.9,>;=2.5 (from requests) Using cached https://files.pythonhosted.org/packages/14/2c/ cd551d81dbe15200be1cf41cd03869a46fe7226e7450af7a6545bfc474c9/ idna-2.8-py2.py3-none-any.whl Collecting urllib3<1.25,>;=1.21.1 (from requests) Using cached https://files.pythonhosted.org/packages/62/00/ ee1d7de624db8ba7090d1226aebefab96a2c71cd5cfa7629d6ad3f61b79e/ urllib3-1.24.1-py2.py3-none-any.whl Collecting certifi>;=2017.4.17 (from requests) Using cached https://files.pythonhosted.org/packages/9f/e0/ accfc1b56b57e9750eba272e24c4dddeac86852c2bebd1236674d7887e8a/ certifi-2018.11.29-py2.py3-none-any.whl Installing collected packages: chardet, idna, urllib3, certifi, requests Successfully installed certifi-2018.11.29 chardet-3.0.4 idna-2.8 requests-2.21.0 urllib3-1.24.1 You are using pip version 18.1, however version 19.0.1 is available. You should consider upgrading via the 'python -m pip install --upgrade pip' command.
После выполнения команды вы должны увидеть что-то похожее, на приведенное выше. Здесь pip
с командой install
, за которой следует имя пакета для установки. pip
ищет пакет в PyPI, определяет его зависимости и устанавливает их для нормальной работы requests
.
Кроме того, Можно заметить, что в текущей среде используется pip
версии 18.1
, но сейчас доступна версия 19.0.1
и поэтому внизу есть подсказка команды для обновления. Давайте сделаем это:
$ python -m pip install --upgrade pip Looking in indexes: https://pypi.org/simple Collecting pip Downloading https://files.pythonhosted.org/packages/46/dc/ 7fd5df840efb3e56c8b4f768793a237ec4ee59891959d6a215d63f727023/ pip-19.0.1-py2.py3-none-any.whl (1.4MB) 100% |████████████████████████████████| 1.4MB 2.0MB/s Installing collected packages: pip Found existing installation: pip 18.1 Uninstalling pip-18.1: Successfully uninstalled pip-18.1 Successfully installed pip-19.0.1
Для обновления pip
вы используете команду python -m
, ключ -m
указывает Python запускать модуль как исполняемый файл. Это необходимо при обновлении потому, как старую версию pip
необходимо удалить перед установкой новой, а удаление ее во время работы интерпретатора может вызвать ошибки.
При запуске pip
как модуля, Python загружает его в память и позволяет удалить пакет при его работе. Пакеты можно запускать в качестве сценариев, если они содержат сценарий верхнего уровня __ main__ .py
.
Теперь, когда вы установили requests
и обновили pip
, можно использовать команду list
для просмотра пакетов, установленных в вашей среде:
$ pip list Package Version ---------- ---------- certifi 2018.11.29 chardet 3.0.4 idna 2.8 pip 19.0.1 requests 2.21.0 setuptools 40.6.2 urllib3 1.24.1
Как видите, pip
обновлен до версии 19.0.1
(последняя версия на данный момент) и установлен requests
версии 2.21.0
.
Команда pip install <package>;
всегда ищет последнюю версию пакета и устанавливает его. Он также выполняет поиск зависимостей, перечисленных в метаданных пакета и устанавливает эти зависимости, чтобы пакет соответствовал всем необходимым требованиям.
Как видите, одной командой установки requests
на самом деле было установлено несколько пакетов. Можно посмотреть метаданные пакета, используя команду show
в pip
:
$ pip show requests Name: requests Version: 2.21.0 Summary: Python HTTP for Humans. Home-page: http://python-requests.org Author: Kenneth Reitz Author-email: me&at;kennethreitz.org License: Apache 2.0 Location: py37\lib\site-packages Requires: certifi, chardet, idna, urllib3 Required-by:
В метаданных в качестве зависимостей перечислены certifi
, chardet
, idna
и urllib3
и можно видеть, что именно они и были установлены.
Используя установленный пакет requests
, можно переписать ранее приведенный и посмотреть насколько легче стало получить содержимое веб-страницы:
# In using-requests.py import requests url = 'https://www.google.com' response = requests.get(url) print(f'Response returned: {response.status_code}, {response.reason}') print(response.text)
Можно импортировать пакет requests
как любой другой стандартный пакет, поскольку он теперь установлен в вашей среде.
Как можно видеть, requests.get()
обрабатывает HTTP‑соединение и возвращает объект с ответом, аналогичный исходному примеру, но с некоторыми улучшениями интерфейса.
Не нужно иметь дело с кодировкой страницы, потому что в большинстве случаев requests
справятся с этим. Тем не менее requests
имеет гибкий интерфейс для обработки особых случаев с помощью requests.get().
Использование файлов требований
Команда pip install
всегда устанавливает последнюю опубликованную версию пакета, но иногда вам может потребоваться установить конкретную версию, которая, как вы знаете, работает с вашим кодом.
Вы хотите создать спецификацию зависимостей и версий, которые вы использовали для разработки и тестирования своего приложения, чтобы не было сюрпризов при использовании приложения в production.
Файлы требований позволяют вам точно указать, какие версии пакетов должны быть установлены. Запуск pip help
показывает, что есть команда freeze
, которая выводит установленные пакеты в формате требований. Можно использовать эту команду, перенаправляя вывод в файл для генерации файла требований:
$ pip freeze >; requirements.txt $ cat requirements.txt certifi==2018.11.29 chardet==3.0.4 idna==2.8 requests==2.21.0 urllib3==1.24.1
Команда freeze
выводит все пакеты и их версии в стандартный вывод, поэтому можно перенаправить вывод в файл, который можно использовать для установки точных требований в другой системе. Соглашение заключается в том, чтобы назвать этот файл requirements.txt
, но можно дать ему любое другое имя.
Если вы хотите выполнить репликацию среды в другой системе, можно запустить pip install
, указав файл требований с помощью ключа -r
:
$ pip install -r requirements.txt Looking in indexes: https://pypi.org/simple Collecting certifi==2018.11.29 (from -r .\requirements.txt (line 1)) Using cached https://files.pythonhosted.org/packages/9f/e0/ accfc1b56b57e9750eba272e24c4dddeac86852c2bebd1236674d7887e8a/ certifi-2018.11.29-py2.py3-none-any.whl Collecting chardet==3.0.4 (from -r .\requirements.txt (line 2)) Using cached https://files.pythonhosted.org/packages/bc/a9/ 01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/ chardet-3.0.4-py2.py3-none-any.whl Collecting idna==2.8 (from -r .\requirements.txt (line 3)) Using cached https://files.pythonhosted.org/packages/14/2c/ cd551d81dbe15200be1cf41cd03869a46fe7226e7450af7a6545bfc474c9/ idna-2.8-py2.py3-none-any.whl Collecting requests==2.21.0 (from -r .\requirements.txt (line 4)) Using cached https://files.pythonhosted.org/packages/7d/e3/ 20f3d364d6c8e5d2353c72a67778eb189176f08e873c9900e10c0287b84b/ requests-2.21.0-py2.py3-none-any.whl Collecting urllib3==1.24.1 (from -r .\requirements.txt (line 5)) Using cached https://files.pythonhosted.org/packages/62/00/ ee1d7de624db8ba7090d1226aebefab96a2c71cd5cfa7629d6ad3f61b79e/ urllib3-1.24.1-py2.py3-none-any.whl Installing collected packages: certifi, chardet, idna, urllib3, requests Successfully installed certifi-2018.11.29 chardet-3.0.4 idna-2.8 requests-2.21.0 urllib3-1.24.1
Версии пакетов будут соответствовать тем, которые перечислены в requirements.txt
:
$ pip list Package Version ---------- ---------- certifi 2018.11.29 chardet 3.0.4 idna 2.8 pip 19.0.1 requests 2.21.0 setuptools 40.6.2 urllib3 1.24.1
Можно отправить файл requirements.txt
в систему контроля версий и использовать его для создания точной среды на других компьютерах.
Требования к тонкой настройке
Проблема с hardcoding версий ваших пакетов и их зависимостей заключается в том, что пакеты часто обновляются с исправлениями ошибок и безопасности, и вы, вероятно, захотите использовать их, как только они будут опубликованы.
Формат файла требований позволяет вам указывать версии зависимостей, используя логические операторы, которые дают вам некоторую гибкость, чтобы гарантировать обновление пакетов, но при этом определять базовые версии пакета.
Откройте файл requirements.txt
в своем любимом редакторе и сделайте следующее изменения:
certifi>;=2018.11.29 chardet>;=3.0.4 idna>;=2.8 requests>;=2.21.0 urllib3>;=1.24.1
Можно изменить логический оператор на >; =
, чтобы pip
указывал точную или более позднюю версию, которая была опубликована. Когда вы устанавливаете новую среду, используя файл Requirments.txt
, pip
ищет и устанавливает последнюю версию, удовлетворяющую указанным требованиям. Можно сделать обновление пакетов, записанных в файле требований, выполнив команду install
с ключом - upgrade
:
$ pip install --upgrade -r requirements.txt Looking in indexes: https://pypi.org/simple Requirement already up-to-date: certifi==2018.11.29 in \py37\lib\site-packages (from -r .\requirements.txt (line 1)) (2018.11.29) Requirement already up-to-date: chardet==3.0.4 in \py37\lib\site-packages (from -r .\requirements.txt (line 2)) (3.0.4) Requirement already up-to-date: idna==2.8 in \py37\lib\site-packages (from -r .\requirements.txt (line 3)) (2.8) Requirement already up-to-date: requests==2.21.0 in \py37\lib\site-packages (from -r .\requirements.txt (line 4)) (2.21.0) Requirement already up-to-date: urllib3==1.24.1 in \py37\lib\site-packages (from -r .\requirements.txt (line 5)) (1.24.1)
В этом примере обновлений не случилось потому, как здесь установлены последние версии, но если появится новая версия для одного из указанных пакетов, он будет обновлен.
В идеальном мире новые версии пакетов будут обратно совместимы и никогда не будут содержать новых ошибок. К сожалению, в реальном мире в новые версии могут быть внесены изменения, которые повредят ваше приложение. Синтаксис файла требований поддерживает дополнительные спецификаторы версий для точной настройки ваших требований.
Допустим, допустим опубликована новая версия 3.0
requests
, но она вносит несовместимые изменения, которые нарушают работу вашего приложения. Вы можете изменить файл требований, чтобы предотвратить установку версии 3.0
или выше:
certifi>;=2018.11.29 chardet>;=3.0.4 idna>;=2.8 requests>;=2.21.0, <3.0 urllib3>;=1.24.1
Изменение спецификатора версии для пакета requests
гарантирует, что любая версия, большая или равная 3.0
, не будет установлена. Документация pip
содержит всю информацию о формате файла требований, где можно узнать об этои больше.
Зависимости разработки vs. production
Не все пакеты, которые вы устанавливаете во время разработки, будут необходимы при эксплуатации приложений. В PyPI опубликовано много пакетов, которые являются исключительно нструментами или библиотеками, которые использовались в процессе разработки.
Например, вы, вероятно, захотите провести модульное тестирование своего приложения, для которого нужна среда модульного тестирования. Популярной платформой для модульного тестирования является pytest. Вы хотите установить его в своей среде разработки, но не хотите в своей production‑среде, потому что она там не нужна.
Вы создаете второй файл требований (requests_dev.txt
), чтобы перечислить дополнительные инструменты для настройки среды разработки:
# In requirements_dev.txt pytest>;=4.2.0
Для этого вам нужно использовать pip
для установки обоих файлов требований: (requests.txt
) и requests_dev.txt
). К счастью, pip позволяет вам указать дополнительные параметры в файле требований. Вы можете изменить requests_dev.txt
) для подключения требования из рабочего файла requests.txt
):
# In requirements_dev.txt -r requirements.txt pytest>;=4.2.0
Обратите внимание, что используется точно такой же ключ -r
для установки production‑файл requirements.txt
. Формат файла требований позволяет указывать дополнительные аргументы прямо в нём.
Фиксация требования для Production
Вы создали файлы требований для Production и разработки, добавили их в систему контроля версий. В файлах используются гибкие спецификаторы версий, чтобы вы могли использовать исправления ошибок, опубликованные вашими зависимостями. Вы также тестируете свое приложение и готовы развернуть его в рабочей среде.
Возможно, вы захотите убедиться, что версии зависимостей, которые вы развертываете в рабочей среде — это те же версии, которые вы использовали в своем конвейере интеграции или процессе сборки, потому что вы знаете, что все тесты пройдены и приложение работает.
Спецификаторы текущей версии не гарантируют, что те же версии будут развернуты в рабочей среде, поэтому вы хотите зафиксировать production‑требования, как вы видели ранее.
Вы создаете чистую виртуальную production‑среду и устанавливаете production‑требования, используя файл requirements.txt
. После того как требования установлены, вы можете зафиксировать определенные версии, выгрузив выходные данные в файл requirements_lock.txt
, который вы используете в production‑среде. Файл requirements_lock.txt
должен содержать точные спецификации версий и может использоваться для репликации среды.
Поиск пакетов для использования
Когда вы станете более опытным Pythonist‑ом, появится набор пакетов, которые вы будете знать наизусть и которые вы будете использовать в большинстве своих приложений. Пакеты requirements.txt
и pytest
являются хорошими кандидатами на то, чтобы стать полезными инструментами в вашем наборе инструментов Python.
Однако, наступят времена, когда вам нужно будет решить другую проблему и захочется найти другие инструменты или библиотеки. Что может вам помочь?. Как вы видели раньше, pip help
показывает, что есть команда search
, которая ищет пакеты, опубликованные в PyPI.
Давайте посмотрим, как эта команда нам поможет:
$ pip help search Usage: pip search [options] <query>; Description: Search for PyPI packages whose name or summary contains <query>;. Search Options: -i, --index <url>; Base URL of Python Package Index (default https://pypi.org/pypi) General Options: -h, --help Show help. --isolated Run pip in an isolated mode, ignoring environment variables and user configuration. -v, --verbose Give more output. Option is additive, and can be used up to 3 times. -V, --version Show version and exit. -q, --quiet Give less output. Option is additive, and can be used up to 3 times (corresponding to WARNING, ERROR, and CRITICAL logging levels). --log <path>; Path to a verbose appending log. --proxy <proxy>; Specify a proxy in the form [user:passwd@]proxy.server:port. --retries <retries>; Maximum number of retries each connection should attempt (default 5 times). --timeout <sec>; Set the socket timeout (default 15 seconds). --exists-action <action>; Default action when a path already exists: (s)witch, (i)gnore, (w)ipe, (b)ackup, (a)bort). --trusted-host <hostname>; Mark this host as trusted, even though it does not have valid or any HTTPS. --cert <path>; Path to alternate CA bundle. --client-cert <path>; Path to SSL client certificate, a single file containing the private key and the certificate in PEM format. --cache-dir <dir>; Store the cache data in <dir>;. --no-cache-dir Disable the cache. --disable-pip-version-check Don't periodically check PyPI to determine whether a new version of pip is available for download. Implied with --no-index. --no-color Suppress colored output
pip search
принимает набор параметров, перечисленных выше и <query>;
, запрос, который представляет собой просто строку для поиска и будет соответствовать пакетам и их описаниям.
Допустим, вашему приложению необходим доступ к службе, которая использует для авторизации OAuth2. В идеале, есть библиотека, которая работает с requests
или с похожим интерфейсом, который может нам помочь. Давайте поищем его в PyPI, используя pip
:
$ pip search requests oauth requests-oauth (0.4.1) — Hook for adding Open Authentication support to Python-requests HTTP library. oauth (1.0.1) — Library for OAuth version 1.0a. pmr2.oauth (0.6.1) — OAuth PAS Plugin, OAuth 1.0 provider for Plone. oauth-proxy (1.0.5) — OAuth HTTP proxy django-oauth (1.1) — Support of OAuth in Django. intuit-oauth (1.2.0) — Intuit OAuth Client brubeck-oauth (0.1.11) — Brubeck OAuth module guillotina-oauth (2.0.0) — guillotina oauth support httpie-oauth (1.0.2) — OAuth plugin for HTTPie. paytm-oauth (0.2) — Consumer for paytm oauth plurk-oauth (0.9.2) — Plurk OAuth API oauth-flow (1.0.3) — Authenticate and make calls to OAuth 1.0, OAuth 2.0 services ... Additional Output Omitted
В результате поиска показана довольно обширная коллекция пакетов. Некоторые из них кажутся специфичными для какой-то службы или технологии, например, django-oauth
. Другие выглядят многообещающе, например, requests-oauth
. К сожалению, кроме краткого описания, информации не так много.
В большинстве случаев вы хотите искать пакеты прямо на веб-сайте PyPI. Здесь, на PyPI, есть поиск по собственному реестру, который позволяет фильтровать результаты по метаданным пакетов, таким как инфраструктура, тема, состояние разработки и т.д.
Поиск с таким же запросом на PyPI в результате дает гораздо больше, но здесь его можно отфильтровать по разным категориям. Например, вы можете понять Intended Audience (Целевая аудитория) и выбрать Developers (Разработчики), поскольку вам нужна библиотека, которая поможет вам в разработке своего приложения. Кроме того, вы, вероятно, хотите, чтобы пакет был стабильным и готовым к production. Вы можете развернуть категорию Development Status (Состояние разработки) и выбрать Production/Stable (Производство/Стабильный):
Результаты поска в PyPi по запросу «Requests OAuth»[/caption]
Можно применять дополнительные фильтры и изменять условия поиска до тех пор, пока не найдете нужный вам пакет.
Результаты предоставляют ссылку на страницу пакета, которая содержит больше информации и, возможно, некоторую документацию. Давайте посмотрим на информацию для requests-oauth2
:
Страница проекта на GitHub содержит гораздо больше информации, и, кажется, имеет ссылке перейти в репозитарий project repository. Здесь вы получите дополнительную информацию о проекте и примеры использования.
Поиск хранилища исходного кода может быть бесценным ресурсом. Там вы можете найти некоторые подсказки о статусе проекта, посмотрев дату последних коммитов, количество запросов на извлечение, открытых вопросов и т.д.
Другой вариант найти пакет — Google. Популярные библиотеки Python будут отображаться в верхней части поисков Google, где вы сможете найти ссылку на нужный пакет в PyPI или его хранилище исходного кода.
Поиск подходящего пакета может потребовать некоторых исследований и времени, но значительно ускорит процесс разработки, как только вы его найдете.
Время от времени вам придется удалять пакеты. Вы либо нашли лучшую библиотеку для замены, либо это то, что вам действительно уже не нужно. Удаление пакетов может оказаться немного сложнее, чем вы думаете.
Удаление пакетов
Обратите внимание, что когда вы устанавливали requests
, pip
одновременно установил и другие зависимые пакеты. Чем больше пакетов вы устанавливаете, тем больше вероятность того, что несколько пакетов зависят от одного и того же пакета. Здесь вам пригодится команда show
в pip
.
Перед удалением пакета убедитесь, что вы выполнили команду show
для удаляемого пакета:
$ pip show requests Name: requests Version: 2.21.0 Summary: Python HTTP for Humans. Home-page: http://python-requests.org Author: Kenneth Reitz Author-email: License: Apache 2.0 Location: c:\users\isaac\projects\virtualenv\py37\lib\site-packages Requires: urllib3, certifi, chardet, idna Required-by:
Обратите внимание на два последних поля: Requires
и Required-by
. Команда show
сообщает нам, что для Requires
требуются urllib3
, certifi
, chardet
и IDNA
. Вы, вероятно, хотите удалить и их. Вы также можете видеть, что Required-by
пуст, т.е. они не требуются никаким другим пакетам и удалить их безопасно.
Вы должны выполнить команду show
для всех зависимостей requests
, чтобы убедиться, что никакие другие библиотеки также не зависят от них. Как только вы поймете архитектуру зависимости удаляемых пакетов, вы можете приступить к удалению с помощью команды uninstall
:
$ pip uninstall certifi Uninstalling certifi-2018.11.29: Would remove: \py37\lib\site-packages\certifi-2018.11.29.dist-info\* \py37\lib\site-packages\certifi\* Proceed (y/n)? y Successfully uninstalled certifi-2018.11.29
Деинсталлятор покажет вам файлы, которые будут удалены, и запросит подтверждение. Если вы проверили его зависимости, знаете, что больше ничего не использует его, т.е. уверены, что хотите удалить пакет, то смело передавайть ключ y
. Чтобы отключить печать списка файлов и запрос подтверждения:
$ pip uninstall urllib3 -y Uninstalling urllib3-1.24.1: Successfully uninstalled urllib3-1.24.1 $ pip uninstall chardet -y Uninstalling chardet-3.0.4: Successfully uninstalled chardet-3.0.4 $ pip uninstall idna -y Uninstalling idna-2.8: Successfully uninstalled idna-2.8 $ pip uninstall requests -y Uninstalling requests-2.21.0: Successfully uninstalled requests-2.21.0
За один вызов можно указать все пакеты для удаления: pip uninstall -y urllib3 chardet idna requests
.
Вы также можете удалить все пакеты, перечисленные в файле требований, указав параметр -r <файл_приложения>;
. Команда запросит подтверждение на удаление каждого отдельного пакета, но это можно отменить, если знаете, что делаете, с помощью ключа -y
:
$ pip uninstall -r requirements.txt -y Uninstalling certifi-2018.11.29: Successfully uninstalled certifi-2018.11.29 Uninstalling chardet-3.0.4: Successfully uninstalled chardet-3.0.4 Uninstalling idna-2.8: Successfully uninstalled idna-2.8 Uninstalling requests-2.21.0: Successfully uninstalled requests-2.21.0 Uninstalling urllib3-1.24.1: Successfully uninstalled urllib3-1.24.1
Не забывайте всегда проверять зависимости пакетов при удалении. Вы, вероятно, захотите удалить все его зависимости, но удаление пакета, который используется другими пакетами, нарушит работу вашего приложения.
Альтернатива pip
pip
является важным инструментом для всех Pythonist-ов и используется многими приложениями и проектами для управления пакетами. Этот туториал помог вам с основами, но сообщество Python очень активно предоставляет другие инструменты и библиотеки. У pip
есть альтернативы, которые пытаются упростить и улучшить управление пакетами.
В этом разделе вы узнаете о других инструментах управления пакетами, доступных для Python.
Conda делает всё
Conda — менеджер пакетов, зависимостей и сред для многих языков, в том числе и Python. Фактически, его происхождение происходит от Anaconda, которая начиналась как пакет данных для Python.
Conda широко используется в приложениях для обработки данных и машинного обучения и использует собственный реестр для размещения совместимых пакетов.
Conda не только позволяет вам управлять зависимостями пакетов, но также управляет виртуальными средами для ваших приложений, устанавливает совместимые дистрибутивы Python и упаковывает ваше приложение для развертывания в рабочей среде.
Настройка Python для машинного обучения в Windows — это отличное введение в Conda, в котором рассматривается управление пакетами и средой. Единственная информация, относящаяся к Windows, касается установки, поэтому она по-прежнему актуальна, если вы используете другую платформу ОС.
Pipenv
Pipenv — это еще один инструмент управления пакетами, который «стремится принести лучшее из всех упаковочных миров» в Python. Он завоевывает большую популярность среди сообщества Python, поскольку объединяет виртуальную среду и управление пакетами в одном инструменте.
Он также устраняет некоторые наиболее распространенные ошибки, с которыми вы столкнетесь при ручном управлении зависимостями через pip
, например версии пакетов, разделение зависимостей разработки и производства, фиксация версий для производства.
Pipenv: руководство по новому инструменту упаковки Python — отличное начало для знакомства с Pipenv и его подходом к управлению пакетами. Несмотря на то, что статья помечена как intermediate
(промежуточная), автор проделал большую работу, чтобы убедить читателя в доступности и необходимости статья для всех, кто начинает работать с Python.
Poetry
Poetry — это еще одна альтернатива pip
, которая набирает обороты. Как и Pipenv, он упрощает управление версиями пакетов и отделяет разработку от производственных зависимостей и работает путем изоляции этих зависимостей в виртуальной среде.
Если вы пришли из JavaScript и npm, то Poetry будет выглядеть очень знакомо. Poetry выходит за рамки управления пакетами, помогая создавать дистрибутивы для приложений и библиотек, развертывать их в PyPI. В
Для помощи вам в How to Publish an Open-Source Python Package to PyPI есть хорошее введение в Poetry, которое будет полезно для начала работы.
Вывод: что такое pip
?
Этот урок ответил на вопрос, что такое pip
? Вы узнали, что pip
— менеджер пакетов для Python, используемый многими проектами для управления зависимостями. Он включен в установщик Python, что делает его необходимым инструментом и знание его необходимо всем Pythonist-ам.
Python предоставляет обширную стандартную библиотеку, подходящую для разработки всевозможных приложений, но активное сообщество Python предоставляет еще больший набор инструментов и библиотек, которые ускоряют разработку приложений Python.
Эти инструменты и библиотеки публикуются в реестр пакетов Python (PyPI), а pip
позволяет разработчикам устанавливать их в свои прикладные среды.
В этом уроке вы узнали о том как:
- установить новые пакеты с использованием
pip
в командной строке и с файлами требований; - управлять зависимостями, разделять требований при разработке и производстве, создавать файла фиксированных требований;
- искать пакеты через
pip
и PyPI; - узнавать зависимости пакета перед удалением и удалять пакеты с
pip
.
Кроме того, вы узнали о важности своевременного обновления зависимостей и альтернатив pip
, которые могут помочь вам управлять этими зависимостями.
Не стесняйтесь обращаться в разделе комментариев ниже с любыми вопросами, которые у вас могут возникнуть, и вы всегда можете получить дополнительную информацию на pip
странице документации.
По мотивам: What Is Pip? A Guide for New Pythonistas