it-swarm.com.ru

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

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

  • установка pip не выполняется независимо от пакета. Например, > pip install scrapy также приводит к ошибке SSL.
  • Ванильная установка Python 3.4.1 включала в себя пип 1.5.6. Первое, что я попытался сделать, это установить linkchecker. Python 2.7 уже был установлен, он поставляется с ArcGIS. python и pip были недоступны из командной строки, пока я не установил 3.4.1.
  • > pip search linkchecker работает. Возможно, это связано с тем, что pip-поиск не проверяет 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
263
Jeremy Cook

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

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

Начиная с выпуска 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>. Обратите внимание, что некоторые пакеты не будут найдены или приведут к небольшим ошибкам.
  • Using Wheel: загрузите колесо пакета python и используйте команду pip pip install wheel_package_name.whl для установки пакета.
423
Vaulstein

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

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

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

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

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

Также проверьте: Проверка SSL сертификата .

82
Steve Tauber

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

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

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

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

58
plhn

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

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

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

22
Akoji EI

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

Вы можете посетить https://pypi.python.org/ , чтобы проверить эмитента сертификата, нажав на значок замка в адресной строке, или увеличить кредит для гиков, используя 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 в цепочке сертификатов - это имя CA, которое вам нужно загрузить.

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

  1. Загрузите CRT от DigiCert
  2. Конвертировать CRT в формат PEM
  3. Экспортируйте переменную среды 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.

20
chnrxn

У вас есть следующие возможности для решения проблемы с 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 для объектов сокетов - Проверка сертификатов .

16
kenorb

Чтобы решить эту проблему раз и навсегда, вы можете убедиться, что у вас есть файл 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 существует, иначе $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.

16
Alex-Antoine Fortin

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

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

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

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

10
Ross Peoples

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

pip install --index-url=http://pypi.python.org/simple/ linkchecker
8
baxeico

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

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

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

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

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

8
user2673238

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

easy_install pip==1.2.1
pip install --upgrade pip
7
theofanis

Чтобы решить проблему с проверкой SSL,

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

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

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

pip install --trusted-Host pypi.python.org - обновить версию pip 

6
Arathy Jan

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

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>

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

6
pmbotter

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

Мэйби, я немного опаздываю,

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

Обновите это так:

    Sudo date -s "Wed Aug  23 11:12:00 GMT+1 2018"
    dpkg-reconfigure tzdata
6
Thomas Devoogdt

У вас есть 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

Источник

5
thiagofalcao

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

    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>
5
Pat B.

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

Обошли проблему для Python 3.4.2, опустив версию до пипа 1.2.1: easy_install pip==1.2.1 (см. https://stackoverflow.com/a/16370731/234235 ). То же исправление также работало для ActivePython 2.7.8.

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

4
psteiner

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

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

Так что проверьте URL, на котором он на самом деле не работает, с помощью опции --verbose.

3
Dan Austin

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

pip install --upgrade pip --trusted-Host pypi.org --trusted-Host files.pythonhosted.org

Например:

pip install <package name> --trusted-Host pypi.org --trusted-Host files.pythonhosted.org
3
Devesh Sharma

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

pip install --index-url=http://pypi.python.org/simple/ --trusted-Host pypi.python.org  [your package..]
2
Smaillns

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

2
user3080641

Vaulstein ответ помог мне. 

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

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

 AppData location using command Prompt

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

 AppData location in windows Explorer

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

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

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

pip.ini file:

[list]
format=columns

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

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

1
VivekDev

Недавно я столкнулся с той же проблемой в Python 3.6 с Visual Studio 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 

  1. open -> "% appdata%" Создать папку "pip", если она не существует. 
  2. В папке pip создайте файл «pip.ini». 
  3. Отредактируйте файл и напишите
    [Глобальный]
    trust-Host = pypi.python.org Сохраните и закройте файл. Теперь установите Используя pip/visual studio, все работает нормально.
1
Ankit Raval

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

1
uingtea

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

[global]
cert = C:/certs/python_root.pem
proxy = http://[email protected]_company.com:[email protected]_ip:proxy_port

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

pip3 install PyQt5

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

$ pip3 install --proxy http://[email protected]_company.com:[email protected]_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
Marco

Вы можете столкнуться с этой проблемой, если в вашем system.eg отсутствуют некоторые сертификаты на opensuse install ca-Certificates-mozilla 

0
sancelot

Я не уверен, если это связано, но у меня была похожая проблема, которая была исправлена ​​путем копирования этих файлов из Anaconda3/Library/bin в Anaconda3/DLLs:

libcrypto-1_1-x64.dll

libssl-1_1-x64.dll

0
ColdCold

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

apk update && apk add ca-certificates

0
Martin Melka

В моем случае это было связано с тем, что SSL-сертификат был подписан внутренним центром сертификации моей компании. Использование обходных путей, таких как pip --cert, не помогло, но следующий пакет помог:

pip install pip_system_certs

Смотрите: https://pypi.org/project/pip-system-certs/

Этот пакет исправляет pip и запрашивает во время выполнения использование сертификатов из системного хранилища по умолчанию (а не связанных сертификатов ca).

Это позволит pip проверять соединения tls/ssl с серверами, чей сертификат является доверенным при установке вашей системы.

0
Anton Bronnikov

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

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

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

0
MiN

Если вы установили Python вручную с помощью make, вам нужно будет выполнить следующий ответ: https://stackoverflow.com/a/42798679/6403406 , чтобы он заработал.

0
waqasgard

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

0
Shivam Kotwalia

Я столкнулся с подобной проблемой. Решение, которое работало для меня 1) удалить Python 2.7 2) удалить папку Python27 3) переустановить последний Python

0
Satyam Raikar