Ошибка подключения pip при получении индекса пакета Python

Как разработчик Python, рано или поздно вы, вероятно, столкнетесь с неприятными ошибками при попытке использовать pip для установки пакетов из индекса пакетов Python (PyPI). Типичная ошибка выглядит примерно так:

Downloading/unpacking {package_name}
Cannot fetch index base URL https://pypi.python.org/simple/
Could not find any downloads that satisfy the requirement {package_name}

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

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

Распространенные причины проблем с подключением pip и способы их устранения

Есть несколько основных причин сбоев при получении индекса пипса:

  • Устаревшая версия pip. В старых версиях pip были проблемы с проверкой сертификата SSL и изменениями в PyPI. Обновление pip часто решает проблемы с выборкой индекса.
  • Проблемы с сетью/прокси. Корпоративные прокси, правила брандмауэра, VPN-соединения и т. д. могут помешать pip получить доступ к PyPI.
  • Старые версии Python/OS. Старые версии Python могут содержать устаревшие библиотеки SSL, которые не могут подключаться к современным сайтам HTTPS.

Давайте рассмотрим эти распространенные причины и решения более подробно.

Обновление pip

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

Итак, самый первый шаг по устранению неполадок — проверить версию вашего протокола и при необходимости обновить его:

pip --version
# Upgrade pippip install --upgrade pip

Я рекомендую обновиться до последней версии pip, соответствующей вашей основной версии Python. На момент написания статьи это будет:

  • Python 3.12 – обновление до pip 22.3.1 или новее
  • Python 3.11 – обновление до pip 22.3.1 или новее
  • Python 3.10 – обновление до pip 22.0.4 или новее
  • Python 3.9 – обновление до pip 21.2.4 или новее
  • Python 3.8 – обновление до pip 20.3.4 или новее
  • Python 3.7 – обновление до pip 20.3.4 или новее

Поэтому сначала попробуйте обновить свой pip, а затем попробуйте установить пакеты еще раз, чтобы посмотреть, решит ли это ваши проблемы с подключением к индексу.

Проверка сетевого подключения

Если обновление pip не решит проблему, следующей областью устранения неполадок будет сетевое окружение и подключение. Корпоративные прокси, VPN-соединения, политики брандмауэра и другие сетевые компоненты могут помешать pip получить доступ к сайту индекса пакетов Python.

Вот несколько вещей, которые вы можете попробовать, чтобы исключить проблемы с сетью:

  • Временно отключите прокси/VPN. Если вы получаете доступ к Интернету через прокси-сервер или VPN-туннель, попробуйте временно отключить его и посмотреть, работает ли pip.
  • Переключение сетей. Попробуйте использовать другую сеть, например привязать телефон, Wi-Fi в кафе и т. д.
  • Проверьте подключение. Проверьте, можете ли вы получить доступ к PyPI непосредственно в веб-браузере и выполнить проверку связи.

Например:

# Ping PyPIping pypi.org
# View in web browser
curl https://pypi.org

Если вы не можете напрямую получить доступ к PyPI, сосредоточьте усилия по устранению неполадок в локальной сетевой среде.

Области общих проблем включают в себя:

  • Прокси-серверы блокируют доступ или требуют аутентификации
  • Политики корпоративного брандмауэра, блокирующие трафик
  • Антивирусное/защитное программное обеспечение, фильтрующее трафик
  • Маршрутизация VPN-клиента вызывает проблемы

Вам нужно будет определить и устранить конкретную политику или компонент, блокирующий доступ к PyPI.

Обновление версии Python

Другой потенциальный виновник — использование очень устаревшей версии Python со старыми библиотеками и поддержкой SSL. Python 2.7 и даже ранние версии Python 3 могут с трудом устанавливать HTTPS-соединения с современными сайтами с включенными новейшими протоколами TLS.

Проверьте свою версию Python:

python --version
# For example
Python 2.7.18

Любая версия Python 2.7 и Python 3.5 или более ранняя версия могут иметь проблемы с подключением.

Лучшее решение — обновиться до поддерживаемой версии Python 3, например Python 3.10, 3.11 или 3.12.

В системах Linux вам также может потребоваться обновить зависимости OpenSSL до более поздних версий.

Если обновление самого интерпретатора Python затруднено (например, из-за зависимостей приложений), альтернативой является настройка pip на использование старых протоколов TLS для подключения к PyPI. Однако это всего лишь временное решение проблемы обратной совместимости, поэтому рекомендуется полностью обновить Python.

Проблемы с SSL-сертификатом

Реже вы можете столкнуться с ошибками проверки сертификата SSL, которые не позволяют pip подключиться к PyPI.

Ищите подсказки в подробных файлах журнала отладки pip. Например:

$ cat ~/.pip/pip.log
Cannot fetch index base URL https://pypi.org/simple/
SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed

Обычно такие проблемы с SSL означают, что у вас устаревшее хранилище сертификатов CA, которое не содержит сертификатов, используемых PyPI.

В Linux/MacOS выполните следующую команду, чтобы обновить сертификаты:

# Update certifi package
pip install --upgrade certifi

В Windows загрузите обновленный файл сертификата SSL с https://curl.se/docs/caextract.html и настройте pip для его использования, добавив его в файл pip.ini:

# pip.ini
[global]
cert = </path/to/ca-bundle.crt>

Проблемы с проверкой SSL обычно решаются с помощью обновленных сертификатов.

Краткое изложение шагов по устранению сбоев выборки индекса pip

Вот краткий контрольный список действий по устранению неполадок, связанных с подключением pip:

  1. Обновление пунктаpip install --upgrade pip
  2. Проверьте доступ к сети – отключите VPN/прокси, проверьте подключение к pypi.org.
  3. Обновление Python — обновление до последней версии Python 3.
  4. Обновление сертификатов SSL – обновление пакетов корневого центра сертификации.
  5. Используйте более низкую версию TLS. Временно принудительно используйте TLSv1 в качестве обходного пути.

Следование этой последовательности должно помочь сузить круг задач и решить большинство проблем с выборкой индекса пунктов, с которыми вы сталкиваетесь.

Краткое содержание

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

  • Сначала обновите pip
  • Исключите проблемы с сетью/прокси
  • Рассмотрите возможность обновления версии интерпретатора Python, если она старше 3.6.
  • Обновление хранилищ SSL-сертификатов

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