Что такое Пип? Руководство для новых Pythonistas

Что такое Пип? Руководство для новых Pythonistas

Что такоеpip? pip - стандартный менеджер пакетов дляPython. Он позволяет вам устанавливать и управлять дополнительными пакетами, не входящими вPython standard library. Это руководство представляет собой введение вpip для начинающих Pythonistas.

В этом руководстве вы узнаете о:

  • Установка дополнительных пакетов, не входящих в стандартный дистрибутив Python

  • Поиск пакетов, опубликованных вPython Package Index (PyPI)

  • Управление требованиями для ваших скриптов и приложений

  • Деинсталляция пакетов и их зависимостей

Как вы увидите, сообщество Python очень активно и создало отличные альтернативыpip, о которых вы узнаете позже в этом руководстве.

Free Bonus:5 Thoughts On Python Mastery, бесплатный курс для разработчиков Python, который показывает вам план действий и образ мышления, который вам понадобится, чтобы вывести свои навыки Python на новый уровень.

Начало работы сpip

Итак, что такое пипс? pip - менеджер пакетов для Python. Это означает, что это инструмент, который позволяет вам устанавливать и управлять дополнительными библиотеками и зависимостями, которые не распространяются как часть стандартной библиотеки.

Управление пакетами настолько важно, чтоpip был включен в установщик Python, начиная с версий3.4 для Python 3 и2.7.9 для Python 2, и он используется во многих проектах Python, что делает его необходимый инструмент для каждого Pythonista.

Концепция менеджера пакетов может быть вам знакома, если вы работаете на других языках. JavaScript используетnpm для управления пакетами,Ruby используетgem, а.NET используетNuGet. В Pythonpip стал стандартным менеджером пакетов.

Установщик Python устанавливаетpip, поэтому он должен быть готов к использованию, если вы не установили старую версию Python. Вы можете убедиться, чтоpip доступен, выполнив в консоли следующую команду:

$ pip --version

pip 18.1 from C:\Python37\lib\site-packages\pip (python 3.7)

Вы должны увидеть аналогичный вывод, отображающий версиюpip, а также расположение и версию Python. Если вы используете старую версию Python, которая не включаетpip, вы можете установить ее, следуя инструкциям для вашей системы вpip installation documentation.

Возможно, вы захотите следовать примерам этого руководства в виртуальной среде, чтобы избежать установки пакетов в глобальную установку Python. Вы можете узнать о виртуальных средах вPython Virtual Environments: A Primer. В разделеUsing Virtual Environments этой статьи объясняются основы создания новых виртуальных сред.

Установка пакетов сpip

Python считается языкомbatteries included. Это означает, чтоPython standard library включает обширный набор пакетов и модулей, помогающих разработчикам в работе со своими скриптами и приложениями.

В то же время у Python есть очень активное сообщество, которое предлагает еще больший набор пакетов, которые могут помочь вам с вашими потребностями в разработке. Эти пакеты публикуются вPython Package Index, также известном какPyPI (произносится какPie Pea Eye). 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).

Note:The Meaning of Underscores in Python объясняет, как использовать символы подчеркивания для распаковки значений из кортежа.

Когда у вас есть кодировка страницы, вы можете прочитать ответ и расшифровать его в текст. Вы можете запустить пример в консоли, чтобы увидеть, как он работает:

$ python using-http.py

Response returned: 200 (OK)
Body:
... Additional Output Omitted

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

Базовая установка пакета

PyPI содержит очень популярную библиотеку для выполнения HTTP-запросов под названиемrequests. Вы можете узнать все об этом в официальномdocumentation site.

Первый шаг - установить пакетrequests в вашу среду. Вы можете узнать о поддерживаемых командахpip, запустив их сhelp:

$ pip help

Usage:
  pip  [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 to a verbose appending log.
  --proxy              Specify a proxy in the form
                              [user:passwd@]proxy.server:port.
  --retries          Maximum number of retries each connection should
                              attempt (default 5 times).
  --timeout              Set the socket timeout (default 15 seconds).
  --exists-action     Default action when a path already exists:
                              (s)witch, (i)gnore, (w)ipe, (b)ackup, (a)bort).
  --trusted-host    Mark this host as trusted, even though it does
                              not have valid or any HTTPS.
  --cert                Path to alternate CA bundle.
  --client-cert         Path to SSL client certificate, a single file
                              containing the private key and the certificate in
                              PEM format.
  --cache-dir            Store the cache data in .
  --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. Он также показывает команду, которую вы должны использовать для обновленияpip, так что давайте сделаем это:

$ 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

Обратите внимание, что вы используетеpython -m для обновленияpip. Переключатель-m указывает Python запускать модуль как исполняемый файл. Это необходимо, потому что для обновленияpip старую версию необходимо удалить перед установкой новой версии, а удаление ее во время работы инструмента может вызвать ошибки.

Когда вы запускаетеpip как модуль, Python загружает модуль в память и позволяет удалить пакет во время его использования. Вы можете запускать пакеты, как если бы они были сценариями, если пакет предоставляетhttps://docs.python.org/3/library/main.html [сценарий верхнего уровня]__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> всегда ищет последнюю версию пакета и устанавливает ее. Он также выполняет поиск зависимостей, перечисленных в метаданных пакета, и устанавливает эти зависимости, чтобы убедиться, что пакет соответствует всем необходимым требованиям.

Как видите, было установлено несколько пакетов. Вы можете посмотреть метаданные пакета, используя команду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: [email protected]
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.Response.

Использование файлов требований

Командаpip install всегда устанавливает последнюю опубликованную версию пакета, но иногда вы можете захотеть установить определенную версию, которая, как вы знаете, работает с вашим кодом.

Вы хотите создать спецификацию зависимостей и версий, которые вы использовали для разработки и тестирования своего приложения, чтобы не было сюрпризов при использовании приложения в производстве.

Файлы требований позволяют вам точно указать, какие пакеты и версии должны быть установлены. Запуск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 в избранномeditor и внесите следующие изменения:

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)

Ничто не было обновлено, потому что у вас есть последние версии, но если бы новая версия была опубликована для указанного пакета, пакет был бы обновлен.

В идеальном мире новые версии пакетов будут обратно совместимы и никогда не будут содержать новых ошибок. К сожалению, новые версии могут вносить изменения, которые повредят ваше приложение. Синтаксис файла требований поддерживает дополнительныеversion specifiers для точной настройки ваших требований.

Допустим, опубликована новая версия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 предоставляет всю информацию оrequirements file format, и вы можете ознакомиться с ней, чтобы узнать о ней больше.

Зависимости производства от развития

Не все пакеты, которые вы устанавливаете во время разработки ваших приложений, будут зависеть от приложений. В PyPI опубликовано много пакетов, которые являются инструментами разработки или библиотеками, которые вы хотите использовать в процессе разработки.

Например, вы, вероятно, захотите провести модульное тестирование своего приложения, поэтому вам нужна среда модульного тестирования. Популярный фреймворк для модульного тестирования -pytest. Вы хотите установить его в своей среде разработки, но не хотите в своей производственной среде, потому что это не зависимость от приложения.

Вы создаете второй файл требований (requirements_dev.txt), чтобы перечислить дополнительные инструменты для настройки среды разработки:

# In requirements_dev.txt
pytest>=4.2.0

Это требует, чтобы вы использовалиpip для установки обоих файлов требований:requirements.txt иrequirements_dev.txt. К счастью, pip позволяет вам указать дополнительные параметры в файле требований. Вы можете изменитьrequirements_dev.txt, чтобы также установить требования из производственного файлаrequirements.txt:

# In requirements_dev.txt
-r requirements.txt
pytest>=4.2.0

Обратите внимание, что вы используете тот же переключатель-r для установки рабочего файлаrequirements.txt. requirements file format позволяет указывать дополнительные аргументы прямо в файле требований.

Требования к заморозке для производства

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

Вы, вероятно, хотите убедиться, что версии зависимостей, которые вы развертываете в рабочей среде, являются точно такими же версиями, которые вы использовали в своем конвейере интеграции или процессе сборки, потому что вы знаете, что все тесты пройдены и приложение работает.

Спецификаторы текущей версии не гарантируют, что те же версии будут развернуты в рабочей среде, поэтому вы хотите заморозить производственные требования, как вы видели ранее.

Вы создаете чистую производственную виртуальную среду и устанавливаете производственные требования с помощью файлаrequirements.txt. После того, как требования установлены, вы можете заморозить определенные версии, выгрузив вывод в файлrequirements_lock.txt, который вы используете в производстве. Файлrequirements_lock.txt будет содержать точные спецификаторы версий и может использоваться для репликации среды.

Поиск пакетов для использования

Когда вы станете более опытным Pythonista, появится набор пакетов, которые вы будете знать наизусть и которые вы будете использовать в большинстве своих приложений. Пакетыrequests иpytest - хорошие кандидаты на роль полезных инструментов в вашем наборе инструментов Python.

Однако будут времена, когда вам нужно будет решить другую проблему, и вам захочется найти другой инструмент или библиотеку, которая может помочь вам в этом. Как вы можете видеть выше,pip help показывает, что существует командаsearch, которая ищет пакеты, опубликованные в PyPI.

Давайте посмотрим, как эта команда может помочь нам:

$ pip help search

Usage:
  pip search [options] 

Description:
  Search for PyPI packages whose name or summary contains .

Search Options:
  -i, --index            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 to a verbose appending log.
  --proxy              Specify a proxy in the form
                              [user:passwd@]proxy.server:port.
  --retries          Maximum number of retries each connection should
                              attempt (default 5 times).
  --timeout              Set the socket timeout (default 15 seconds).
  --exists-action     Default action when a path already exists:
                              (s)witch, (i)gnore, (w)ipe, (b)ackup, (a)bort).
  --trusted-host    Mark this host as trusted, even though it does
                              not have valid or any HTTPS.
  --cert                Path to alternate CA bundle.
  --client-cert         Path to SSL client certificate, a single file
                              containing the private key and the certificate in
                              PEM format.
  --cache-dir            Store the cache data in .
  --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

Команда принимает набор параметров, перечисленных выше, и<query>. Запрос представляет собой просто строку для поиска и будет соответствовать пакетам и их описаниям.

Note: Вы можете использоватьpip help <command> для получения дополнительной информации о поддерживаемой команде.

Допустим, вашему приложению требуется доступ к службе, использующей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, поскольку вам нужна библиотека, которая поможет вам в разработке вашего приложения. Кроме того, вы, вероятно, хотите, чтобы пакет был стабильным и готовым к производству. Вы можете развернуть категориюDevelopment Status и выбратьProduction/Stable:

PyPi Search Results for Requests OAuth

Вы можете применять дополнительные фильтры и изменять условия поиска, пока не найдете нужный вам пакет.

Результаты предоставляют ссылку на страницу пакета, которая содержит больше информации и, возможно, некоторую документацию. Давайте посмотрим на информацию дляrequests-oauth2:

PyPi Package Page for Requests OAuth 2

Страница проекта предоставляет больше информации, и, кажется, имеет ссылку на домашнюю страницу проекта. Ссылка приведет вас кproject repository на GitHub. Там вы можете увидеть дополнительную информацию о проекте и примеры использования.

Поиск исходного хранилища исходного кода может быть бесценным ресурсом. Там вы можете найти некоторые подсказки о статусе проекта, посмотрев дату последних коммитов, количество запросов на извлечение и открытых вопросов и т. Д.

Другой вариант найти пакет - это 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: [email protected]
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 сообщает нам, чтоrequests требуетurllib3,certifi,chardet иidna. Вы, вероятно, хотите удалить эти два. Вы также можете видеть, чтоrequests не требуется ни для одного другого пакета, поэтому его можно безопасно удалить.

Вы должны запустить команду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 <requirments file>. Команда запросит подтверждение для каждого отдельного пакета, но вы можете подавить его, если знаете, что делаете, с помощью переключателя-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 - важный инструмент для всех Pythonistas, и он используется многими приложениями и проектами для управления пакетами. Этот учебник помог вам с основами, но сообщество Python очень активно предоставляет отличные инструменты и библиотеки для использования другими разработчиками. К ним относятся другие альтернативыpip, которые пытаются упростить и улучшить управление пакетами.

В этом разделе вы узнаете о других инструментах управления пакетами, доступных для Python.

Конда делает все

Conda - это менеджер пакетов, зависимостей и среды для многих языков, включая Python. Фактически, он произошел отAnaconda, который начинался как пакет анализа данных для Python.

Conda широко используется в приложениях для обработки данных и машинного обучения и использует собственныеindex для размещения совместимых пакетов.

Conda не только позволяет вам управлять зависимостями пакетов, но также управляет виртуальными средами для ваших приложений, устанавливает совместимые дистрибутивы Python и упаковывает ваше приложение для развертывания в рабочей среде.

Setting Up Python for Machine Learning on Windows - отличное введение в Conda, в котором рассматривается управление пакетами и средой. Единственная информация, относящаяся к Windows, касается установки, поэтому она по-прежнему актуальна, если вы используете другую платформу ОС.

Pipenv

Pipenv - еще один инструмент управления пакетами, который «стремится принести в Python все самое лучшее из мира упаковки». Он завоевывает большую популярность среди сообщества Python, поскольку объединяет виртуальную среду и управление пакетами в одном инструменте.

Он также решает некоторые из наиболее распространенных проблем, с которыми вы можете столкнуться при ручном управлении зависимостями черезpip, такими как версии пакетов, разделение зависимостей разработки и производства и блокировка версий для производства.

Pipenv: A Guide to the New Python Packaging Tool - отличное начало для знакомства с Pipenv и его подходом к управлению пакетами. Несмотря на то, что статья помечена какintermediate, автор проделывает большую работу, направляя читателя на то, что статья доступна любому, кто начинает с Python.

поэзия

Poetry - еще одна альтернативаpip, которая набирает обороты. Как и Pipenv, он упрощает управление версиями пакетов и отделяет разработку от производственных зависимостей и работает путем изоляции этих зависимостей в виртуальной среде.

Если вы пришли изJavaScript иnpm, то Poetry будет выглядеть очень знакомо. Это выходит за рамки управления пакетами, помогая создавать дистрибутивы для ваших приложений и библиотек и развертывать их в PyPI. How to Publish an Open-Source Python Package to PyPI имеет хорошийintroduction to Poetry и может помочь вам начать работу.

Вывод: что такоеpip?

Этот урок ответил на вопрос, что такое пипс? Вы видели, чтоpip - это менеджер пакетов для Python, используемый многими проектами для управления зависимостями. Он включен в установщик Python, что делает его необходимым инструментом для всех Pythonistas, чтобы знать, как его использовать.

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

Эти инструменты и библиотеки публикуются вPython Package Index (PyPI), аpip позволяет разработчикам устанавливать их в своих средах приложений.

В этом уроке вы узнали о:

  • Установка новых пакетов с использованиемpip в командной строке и с файлами требований

  • Управление зависимостями, разделение требований разработки и производства и создание файла заблокированных требований

  • Поиск пакетов черезpip и PyPI

  • Оценка зависимостей пакетов перед удалением пакета и того, какpip удаляет пакеты

Кроме того, вы узнали о важности своевременного обновления зависимостей и об альтернативахpip, которые могут помочь вам управлять этими зависимостями.

Не стесняйтесь обращаться в раздел комментариев ниже с любыми вопросами, которые могут у вас возникнуть, и вы всегда можете получить дополнительную информацию наpip documentation page.