Установка pip завершается с ошибкой «Ошибка подключения: сертификат [SSL: CERTIFICATE_VERIFY_FAILED] не выполнен (_ssl.c: 598)»

256

Я очень новичок в Python и стараюсь > pip install linkchecker в Windows 7. Некоторые примечания:

  • Невозможно установить пакет, неважно, пакет. Например, > pip install scrapy также приводит к ошибке SSL.
  • Ванильная установка Python 3.4.1 включена в комплект поставки 1.5.6. Первое, что я пытался сделать, это установить linkchecker. Python 2.7 уже установлен, он поставляется с ArcGIS. python и pip не были доступны из командной строки, пока я не установил 3.4.1.
  • > pip search linkchecker работает. Возможно, это потому, что поиск пика не проверяет сертификат SSL сайта.
  • Я нахожусь в сети компании, но мы не проходим через прокси-сервер, чтобы добраться до Интернета.
  • Каждый компьютер компании (включая мой) имеет доверенный корневой центр сертификации, который используется по разным причинам, включая включение мониторинга TLS-трафика на https://google.com. Не уверен, что это имеет к этому отношение.

Вот содержимое моего pip.log после запуска pip install linkchecker:

Downloading/unpacking linkchecker
  Getting page https://pypi.python.org/simple/linkchecker/
  Could not fetch URL https://pypi.python.org/simple/linkchecker/: connection error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:598)
  Will skip URL https://pypi.python.org/simple/linkchecker/ when looking for download links for linkchecker
  Getting page https://pypi.python.org/simple/
  Could not fetch URL https://pypi.python.org/simple/: connection error: HTTPSConnectionPool(host='pypi.python.org', port=443): Max retries exceeded with url: /simple/ (Caused by <class 'http.client.CannotSendRequest'>: Request-sent)
  Will skip URL https://pypi.python.org/simple/ when looking for download links for linkchecker
  Cannot fetch index base URL https://pypi.python.org/simple/
  URLs to search for versions for linkchecker:
  * https://pypi.python.org/simple/linkchecker/
  Getting page https://pypi.python.org/simple/linkchecker/
  Could not fetch URL https://pypi.python.org/simple/linkchecker/: connection error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:598)
  Will skip URL https://pypi.python.org/simple/linkchecker/ when looking for download links for linkchecker
  Could not find any downloads that satisfy the requirement linkchecker
Cleaning up...
  Removing temporary dir C:\Users\jcook\AppData\Local\Temp\pip_build_jcook...
No distributions at all found for linkchecker
Exception information:
Traceback (most recent call last):
  File "C:\Python34\lib\site-packages\pip\basecommand.py", line 122, in main
    status = self.run(options, args)
  File "C:\Python34\lib\site-packages\pip\commands\install.py", line 278, in run
    requirement_set.prepare_files(finder, force_root_egg_info=self.bundle, bundle=self.bundle)
  File "C:\Python34\lib\site-packages\pip\req.py", line 1177, in prepare_files
    url = finder.find_requirement(req_to_install, upgrade=self.upgrade)
  File "C:\Python34\lib\site-packages\pip\index.py", line 277, in find_requirement
    raise DistributionNotFound('No distributions at all found for %s' % req)
pip.exceptions.DistributionNotFound: No distributions at all found for linkchecker
  • 0
    Вы используете Python 3.4.2?
  • 0
    3.4.1. Только что вышла новая версия, которая решает эту проблему?
Показать ещё 5 комментариев
Теги:
pip
ssl

30 ответов

406

Вы можете игнорировать ошибки SSL, установив pypi.org и files.pythonhosted.org качестве доверенных хостов.

$ pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org <package_name>

Примечание: Когда-то в апреле 2018 года индекс пакета Python был перенесен с pypi.python.org на pypi.org. Это означает, что команды "trusted-host", использующие старый домен, больше не работают.

Постоянное исправление

Начиная с выпуска pip 10.0, вы сможете исправить это постоянно, просто обновив сам pip:

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

Или просто переустановите его, чтобы получить последнюю версию:

$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py

(... и затем запустить get-pip.py с помощью соответствующего интерпретатора Python).

pip install <otherpackage> должен просто работать после этого. Если нет, то вам нужно будет сделать больше, как описано ниже.


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

pip.ini (Windows) или pip.conf (unix)

[global]
trusted-host = pypi.python.org
               pypi.org
               files.pythonhosted.org

Альтернативные решения (менее безопасные)

Большинство ответов могут представлять проблему безопасности.

Два из обходных решений, которые облегчают установку большинства пакетов python с легкостью, будут:

  • Использование easy_install: если вы действительно ленивы и не хотите тратить много времени, используйте easy_install <package_name>. Обратите внимание, что некоторые пакеты не будут найдены или будут давать небольшие ошибки.
  • Использование колеса: загрузите колесо пакета python и используйте команду pip pip install wheel_package_name.whl для установки пакета.
  • 7
    Ваше обновление заставило меня задуматься. В моем случае корпоративный брандмауэр вставляет себя в качестве доверенного хоста для соединений SSL. Я предполагал, что настройка прокси была неправильной, но добавление подробного показало, что проблема была в SSL. Изменение индекса URL обошло проблему.
  • 11
    Круто, спасибо! Доверенного хоста, кажется, достаточно, т.е. pip install --trusted-host pypi.python.org pypi_package . Использование --verbose показывает, что без --trusted-host , HTTPS-соединение завершается неудачно, тогда как то же HTTPS-соединение выполняется (не HTTP) с --trusted-host но успешно.
Показать ещё 28 комментариев
78

Вы можете указать сертификат с помощью этого параметра:

pip --cert /etc/ssl/certs/FOO_Root_CA.pem install linkchecker

См.: Документы "Справочное руководство" pip

Если указание корневого сертификата вашей компании не работает, возможно, cURL будет работать: http://curl.haxx.se/ca/cacert.pem

Вы должны использовать файл PEM, а не файл CRT. Если у вас есть файл CRT, вам нужно будет преобразовать файл в PEM

Также проверьте: SSL Cert Verification.

  • 0
    Спасибо Стив. Я видел этот документ, и это похоже на вероятное решение моей проблемы. У меня Windows 7, у меня нет файла pem, и я не хочу использовать pem от какой-либо третьей стороны (это может быть безопасно !?). Как я могу создать файл pem, который выполняет свою работу?
  • 1
    Керл один безопасен. Я бы предложил использовать это.
Показать ещё 9 комментариев
59

ответ kenorbs очень полезен (и отлично!).
Среди его решений, возможно, это самый простой: --trusted-host

Например, в этом случае вы можете сделать

pip install --trusted-host pypi.python.org linkchecker

Файл pem (или что-то еще) не нужен.

  • 2
    Я обнаружил, что это отлично работает на моем ПК с Windows
  • 0
    Это также работает для других команд, таких как pip list --trusted-host pypi.python.org --outdated
Показать ещё 1 комментарий
19

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

pip install --trusted-host files.pythonhosted.org --trusted-host pypi.org --trusted-host pypi.python.org oauthlib -vvv

Как видно здесь. Аргумент -vvv может быть пропущен, если не требуется подробный вывод

  • 6
    Только один, чтобы исправить мою проблему, спасибо.
19

Самый простой способ, который я нашел, - загрузить и использовать "DigiCert High Assurance EV Root CA" от DigiCert по адресу https://www.digicert.com/digicert-root-certificates.htm#roots

Вы можете посетить https://pypi.python.org/, чтобы проверить выпуск сертификата, щелкнув по значку блокировки в адресной строке, или увеличьте свой счет geek с помощью openssl:

$ openssl s_client -connect pypi.python.org:443
CONNECTED(00000003)
depth=1 /C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert SHA2 Extended Validation Server CA
verify error:num=20:unable to get local issuer certificate
verify return:0
---
Certificate chain
 0 s:/businessCategory=Private Organization/1.3.6.1.4.1.311.60.2.1.3=US/1.3.6.1.4.1.311.60.2.1.2=Delaware/serialNumber=3359300/street=16 Allen Rd/postalCode=03894-4801/C=US/ST=NH/L=Wolfeboro,/O=Python Software Foundation/CN=www.python.org
   i:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert SHA2 Extended Validation Server CA
 1 s:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert SHA2 Extended Validation Server CA
   i:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert High Assurance EV Root CA

Последнее значение CN в цепочке сертификатов - это имя ЦС, которое необходимо загрузить.

Для одноразового усилия сделайте следующее:

  • Загрузите CRT из DigiCert
  • Конвертировать CRT в формат PEM
  • Экспортировать переменную среды PIP_CERT в путь к файлу PEM

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

curl -sO http://cacerts.digicert.com/DigiCertHighAssuranceEVRootCA.crt 
openssl x509 -inform DES -in DigiCertHighAssuranceEVRootCA.crt -out DigiCertHighAssuranceEVRootCA.pem -text
export PIP_CERT=`pwd`/DigiCertHighAssuranceEVRootCA.pem

Чтобы сделать это повторно используемым, поместите DigiCertHighAssuranceEVRootCA.crt где-то общее и экспортируйте PIP_CERT соответственно в ~/.bashrc.

  • 4
    Используйте ваш ответ, чтобы экспортировать корневой CA нашей компании в переменную PIP_CERT и, наконец, после того, как все остальное, включая «pip --cert cert.pem», поработали ... просто установите пакет pip install. БОЛЬШОЙ +1 - да, у нас есть firewal / proxy / utm.
16

Чтобы решить эту проблему раз и навсегда, вы можете убедиться, что у вас есть файл pip.conf.

Вот где ваш pip.conf должен быть, согласно документации:

В Unix файл конфигурации по умолчанию: $HOME/.config/pip/pip.conf который уважает переменную среды XDG_CONFIG_HOME.

На macOS файл конфигурации - $HOME/Library/Application Support/pip/pip.conf если каталог $HOME/Library/Application Support/pip существует else $HOME/.config/pip/pip.conf

В Windows конфигурационный файл %APPDATA%\pip\pip.ini.

Внутри virtualenv:

В Unix и macOS файл равен $VIRTUAL_ENV/pip.conf

В Windows файл: %VIRTUAL_ENV%\pip.ini

Ваш pip.conf должен выглядеть так:

[global]
trusted-host = pypi.python.org

pip install linkchecker установлен linkchecker без жалоб после создания файла pip.conf.

  • 0
    или /etc/pip.conf для всей системы Unix ...
  • 1
    $ HOME / Библиотека / Поддержка приложений / pip не существует на моем компьютере, есть альтернативное местоположение?
Показать ещё 2 комментария
16

У вас есть следующие возможности для решения проблемы с CERTIFICATE_VERIFY_FAILED:

  • Используйте HTTP вместо HTTPS.
  • Используйте переменную --cert <trusted.pem> или CA_BUNDLE для указания альтернативного пакета CA.

    например. вы можете перейти к неудачному URL из веб-браузера и импортировать корневой сертификат в свою систему.

  • Запустите python -c "import ssl; print(ssl.get_default_verify_paths())", чтобы проверить текущий (проверьте, существует ли).

  • OpenSSL имеет пару сред (SSL_CERT_DIR, SSL_CERT_FILE), которые могут использоваться для указания другой базы сертификатов PEP-476.
  • Используйте --trusted-host <hostname>, чтобы отметить хост как надежный.
  • В Python используйте verify=False для requests.get (см. Проверка сертификата SSL).
  • Используйте --proxy <proxy>, чтобы избежать проверки сертификатов.

Подробнее: Обертка TLS/SSL для объектов сокетов - Проверка сертификатов.

10

Недавно я столкнулся с этой проблемой из-за фильтра веб-контента моей компании, который использует свой собственный центр сертификации, чтобы он мог фильтровать трафик SSL. По-видимому, PIP не использует сертификаты CA системы в моем случае, создавая указанную вами ошибку. С понижением PIP до версии 1.2.1 позже появился собственный набор проблем, поэтому я вернулся к исходной версии, поставляемой с Python 3.4.

Мое обходное решение довольно просто: используйте easy_install. Либо он не проверяет сертификаты (например, старую версию PIP), либо знает, как использовать системные сертификаты, потому что он работает каждый раз для меня, и я все еще могу использовать PIP для удаления пакетов, установленных с помощью easy_install.

Если это не работает, и вы можете получить доступ к сети или компьютеру, у которого нет этой проблемы, вы всегда можете настроить свой собственный PyPI-сервер: как создать локальный собственный индекс хранилища pypi без зеркала?

Я почти сделал это, пока не попытался использовать easy_install как последнее усилие канавы.

  • 0
    Та же проблема здесь. Другим обходным решением является экспорт корневого сертификата компании в виде файла и --cert MyCompanyRootCA.crt pip использовать его с --cert MyCompanyRootCA.crt .
8

Вы можете попытаться обойти ошибку SSL, используя http вместо https. Конечно, это не оптимально с точки зрения безопасности, но если вы спешите, он должен сделать трюк:

pip install --index-url=http://pypi.python.org/simple/ linkchecker
  • 1
    Я ожидал, что ваше предложение сработает. К счастью, я получил те же самые ошибки, включая первую. Could not fetch URL http://pypi.python.org/simple/linkchecker/: connection error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:598)
  • 0
    Похоже, странная проблема сети. Можете ли вы получить доступ к pypi.python.org из вашего браузера?
Показать ещё 7 комментариев
7

Я установил pip 1.2.1 с easy_install и обновил до последней версии pip (6.0.7 в то время), которая может устанавливать пакеты в моем случае.

easy_install pip==1.2.1
pip install --upgrade pip
6

Установите правильное время и дату!

Маби, я немного опоздал, чтобы ответить,

Для меня выяснилось, что моя дата и время были неправильно настроены на Малину Пи. В результате все соединения SSL и HTTPS завершились с ошибкой, используя сервер https://files.pythonhosted.org/.

Обновите его следующим образом:

    sudo date -s "Wed Aug  23 11:12:00 GMT+1 2018"
    dpkg-reconfigure tzdata
  • 0
    Несколько часов сводил меня с ума - спасибо за это. Время PI было отключено на 10 дней для меня, что вызвало (казалось бы) все виды ошибок во время установки pip.
6

Чтобы справиться с проблемой проверки ssl,

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

Это говорит pip доверять хосту pypi.python.org, из которого мы загружаем и доверяем его нашим пакетом.

pip install --trusted-host pypi.python.org ansible

pip install --trusted-host pypi.python.org --upprade pip

5

Для меня проблема была решена путем создания папки pip с файлом: pip.ini в C:\Users\<username>\AppData\Roaming\ например:

C:\Users\<username>\AppData\Roaming\pip\pip.ini

Внутри я написал:

[global]
trusted-host = pypi.python.org
               pypi.org
               files.pythonhosted.org

Я перезапустил python, а затем pip навсегда доверился этим сайтам и использовал их для загрузки пакетов.

  • 0
    Странно, это не помогает на моей машине Win10: /
  • 0
    Спасибо - это работает для меня
5

Прежде всего,

    pip install --trusted-host pypi.python.org <package name>

не работал для меня. Я продолжал получать ошибку CERTIFICATE_VERIFY_FAILED. Однако в сообщениях об ошибках я заметил ссылку на сайт "pypi.org". Таким образом, я использовал это как имя доверенного хоста вместо pypi.python.org. Это почти привело меня туда; нагрузка все еще не срабатывала с CERTIFICATE_VERIFY_FAILED, но в более поздней точке. Поиск ссылки на сайт, который был неудачным, я включил его в качестве доверенного хоста. То, что в конечном итоге сработало для меня, было:

    pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org <package name>
4

Ответы на использование

pip install --trusted-host pypi.python.org <package>

Работа. Но вам нужно будет проверить, есть ли переадресация или кеш- pip. В Windows 7 с pip 9.0.1 мне пришлось запускать

pip install \
  --trusted-host pypi.python.org \
  --trusted-host pypi.org \
  --trusted-host files.pythonhosted.org \
  <package>

Вы можете найти их с помощью подробного флага.

4

У вас есть 4 варианта:

Использование сертификата в качестве параметра

$ pip install --cert /path/to/mycertificate.crt linkchecker

Использование сертификата в pip.conf

Создайте этот файл:

$HOME/.pip/pip.conf (Linux)

%HOME%\pip\pip.ini (Windows)

и добавьте следующие строки:

[global]
cert = /path/to/mycertificate.crt

Игнорирование сертификата и использование протокола HTTP

$ pip install --trusted-host pypi.python.org linkchecker

Игнорирование сертификата и использование HTTP в файле pip.conf

Создайте этот файл:

$HOME/.pip/pip.conf (Linux)

%HOME%\pip\pip.ini (Windows)

и добавьте следующие строки:

[global]
trusted-host = pypi.python.org

Источник

4

Произошла такая же проблема с pip install ftputil с помощью ActivePython 2.7.8, ActivePython 3.4.1 и "запаса" Python 3.4.2 на 64-разрядной Windows 7 Enterprise. Все попытки потерпели неудачу с теми же ошибками, что и OP.

Работала над проблемой для Python 3.4.2, понизив ее до pip 1.2.1: easy_install pip==1.2.1 (см. https://stackoverflow.com/questions/16370583/pip-issue-installing-almost-any-library). То же исправление также работает для ActivePython 2.7.8.

Ошибка, о которой сообщалось в марте 2013 года, по-прежнему открыта: https://github.com/pypa/pip/issues/829.

  • 0
    Это сработало и для меня. Хотя вначале может показаться плохой идеей перейти на более старую версию pip, я имел дело со старыми пакетами django, поэтому старая версия pip фактически совпадала с другими пакетами.
  • 0
    Выпуск 829 сейчас закрыт.
3

Ничто на этой странице не работало для меня, пока я не использовал параметр --verbose, чтобы увидеть, что он хочет получить файлы files.pythonhosted.org, а не pypi.python.org:

pip install --trusted-host files.pythonhosted.org <package_name>

Поэтому проверьте URL-адрес, который он фактически пропустил, с помощью опции --verbose.

2

Вы можете попробовать это, чтобы игнорировать "https":

pip install --index-url=http://pypi.python.org/simple/ --trusted-host pypi.python.org  [your package..]
  • 1
    если у вас даже есть другие проблемы с версией pip, вы можете попробовать эту pip install --trusted-host pypi.python.org --upgrade pip –
2

Я решил эту проблему, удалив мой пип и установив более старую версию pip: https://pypi.python.org/pypi/pip/1.2.1

  • 0
    Хотя эта ссылка может ответить на вопрос, лучше включить сюда основные части ответа и предоставить ссылку для справки. Ответы, содержащие только ссылки, могут стать недействительными в случае изменения связанной страницы. - Из обзора
  • 0
    @apomene Как OP должен include the essential parts of the answer here поскольку это ссылка на двоичный файл ...?
Показать ещё 3 комментария
1

Ответ Ваульштейна помог мне.

Я не нашел файл pip.ini в любом месте на своем компьютере. Так было и следующее.

  1. Пошел в папку AppData. Вы можете получить папку appdata, открыв командную строку и введите echo% AppData%

Изображение 7286

Или просто введите% AppData% в проводнике Windows.

Изображение 7287

  1. Создайте папку под названием pip внутри этой папки appdata.

  2. В той папке pip, которую вы только что создали, создайте простой текстовый файл под названием pip.ini

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

Файл pip.ini:

[list]
format=columns

[global]
trusted-host = pypi.python.org pypi.org

Теперь вам должно быть хорошо.

1

Одним из решений (для Windows) является создание файла с именем pip.ini %AppData%\pip\ (создайте папку, если она не существует) и вставьте следующие данные:

[global]
cert = C:/certs/python_root.pem
proxy = http://my_user@my_company.com:my_password@proxy_ip:proxy_port

... и затем мы можем выполнить инструкцию установки:

pip3 install PyQt5

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

$ pip3 install --proxy http://my_user@my_company.com:my_password@proxy_ip:proxy_port \
   --cert C:/certs/python_root.pem PyQt5

Чтобы преобразовать файлы сертификата *.cer в требуемый формат *.pem, выполните следующую команду:

$ openssl x509 -inform der -in python_root.cer -out python_root.pem

Надеюсь, это поможет кому-то!

  • 1
    Что касается других ОС, взгляните на ответ Алекса-Антуана Фортина
  • 0
    Не нужен прокси, только сертификат. Я побежал; pip3.6 config set global.cert '/<path>/server.crt'
1

Недавно я столкнулся с той же проблемой в python 3.6 с визуальной студией 2015 года. Проведя 2 дня, я получил решение и его работу для меня.

При попытке установить numpy с помощью pip или из visual studio я получил ошибку ниже. Собирание numpy Не удалось получить URL https://pypi.python.org/simple/numpy/: возникла проблема с подтверждением сертификата ssl: [SSL: CERTIFICATE_VERIFY_FAILED] проверить сертификат не удалось (_ssl.c: 748) - пропуск Не удалось найти версию, удовлетворяющую требованию numpy (из версий:) Не найдено подходящего распределения для numpy

Разрешение:

Для ОС Windows

  • open → "% appdata%" Создайте папку "pip", если она не существует.
  • В папке pip создайте файл "pip.ini".
  • Редактировать файл и написать
    [Глобальный]
    trusted-host = pypi.python.org Сохраните и закройте файл. Теперь установите используя pip/visual studio, он отлично работает.
1

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

  • 0
    Fiddler можно обойти, установив «Расшифровать трафик HTTPS» на «... только из браузеров» в меню «Сервис | Параметры». Это исправило проблему для меня.
0

Если вы установили Python вручную, make вам нужно будет следовать этому ответу: https://stackoverflow.com/questions/41489439/pip3-installs-inside-virtual-environment-with-python3-6-failing-due-to-ssl-modul чтобы заставить его работать.

0

На данный момент, когда pip обновил до 10, и теперь они изменили свой путь с pypi.python.org на files.pythonhosted.org. Обновите команду на pip --trusted-host files.pythonhosted.org install python_package

0

У вас может возникнуть эта проблема, если в вашем системном коде отсутствуют какие-либо сертификаты. Opensuse install ca-certificates-mozilla

0

В моем случае я запускал Python в минимальном изображении альпийского докера. В нем отсутствовали корневые сертификаты CA. Fix:

apk update && apk add ca-certificates

0

Для меня ни один из предложенных методов не работал - с использованием cert, HTTP, trusted-host.

В моем случае переключение на другую версию обработанного пакета (paho-mqtt 1.3.1 вместо paho-mqtt 1.3.0 в этом случае).

Похоже, проблема была связана с этой версией пакета.

-2

В моем случае я заметил, что ошибка при попытке установить соответствующий пакет. В моем случае python-heatclient требовал позиционного, что требовало pbr. Установка pbr не удалась. Когда я устанавливал pbr явно перед установкой python-heatclient, он работал, как ожидалось.

Вызов с ошибкой venv/bin/pip install python-heatclient

Вызовы, которые преуспели

venv/bin/pip install pbr

venv/bin/pip install python-heatclient

Ещё вопросы

Сообщество Overcoder
Наверх
Меню