macOS pyenv: установка pip не работает [SSL: CERTIFICATE_VERIFY_FAILED]

Я пытаюсь установить пакет numpy с помощью pip при работе с pyenv (глобальная версия 3.8.6).

Команда:

pip install numpy

Выход:

WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1124)'))': /simple/numpy/
WARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1124)'))': /simple/numpy/
WARNING: Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1124)'))': /simple/numpy/
WARNING: Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1124)'))': /simple/numpy/
WARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1124)'))': /simple/numpy/
Could not fetch URL https://pypi.org/simple/numpy/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/numpy/ (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1124)'))) - skipping
ERROR: Could not find a version that satisfies the requirement numpy (from versions: none)
ERROR: No matching distribution found for numpy

Что я пытался исправить эту проблему:

  • Переустановка openssl с помощью brew reinstall openssl
  • Переустановка pyenv с помощью brew reinstall pyenv
  • Переустановка pyenv-virtualenv с помощью brew reinstall pyenv-virtualenv

Когда я пытаюсь отключить pyenv, удалив eval "$(pyenv init -)" и eval "$(pyenv virtualenv-init -)" из ~/.bash_profile, он отлично работает, поскольку использует системную версию Python.

Краткосрочным решением является добавление флага --trusted-host pypi.org, но я не уверен, почему он не работает без флага.

Пожалуйста помоги!


person Himanshu Malhotra    schedule 05.01.2021    source источник
comment
Я использую MacOs BigSur, и pyenv не работает нормально. позже обнаружил, что новая версия Mac больше не обновляет openssl. Итак, я использовал brew для установки [email protected]. настроенный путь, pkgconfig, cnames и все. Теперь я могу запускать приложения, но не могу установить какой-либо пакет через частный репозиторий Nexus. Кроме того, невозможно проверить сертификаты ssl для клиента wss, такого как paho-mqtt. Это похоже на проблему с openssl в моем MacOs. Еще разбираюсь...   -  person bh4r4th    schedule 16.03.2021
comment
Вам следует переустановить инструменты командной строки Xcode, содержащие Python. stackoverflow.com/a/68247505/4067700   -  person Victor Kushnerov    schedule 05.07.2021


Ответы (1)


Как видно здесь, в предыдущих версиях Python Apple предоставляла пакеты OpenSSL, но больше их нет.

В качестве временного исправления добавьте pypi.org в качестве доверенного хоста (на самом деле на pythonhosted.org размещаются файлы, но они загружаются из pypi, поэтому они также добавляются в доверенные хосты) при использовании pip:

pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org pip setuptools

Для более постоянного исправления установите certifi и Scrapy:

pip install certifi
pip install Scrapy

Похожий вопрос 1
Похожий вопрос 2

person DapperDuck    schedule 06.01.2021
comment
Это бесполезно, мой вопрос больше о том, почему я получаю ошибку SSL, когда пытаюсь не помещать --trusted-host. Он отлично работает с флагом --trusted-host, как я упоминал выше. - person Himanshu Malhotra; 07.01.2021
comment
@HimanshuMalhotra Я обновил свой ответ, чтобы объяснить, почему возникает эта проблема и почему вы должны поставить флажок. - person DapperDuck; 07.01.2021