750 Stimmen

`pip install` schlägt fehl mit "Verbindungsfehler: [SSL: ZERTIFIKAT_VERIFY_FAILED] Zertifikat-Überprüfung fehlgeschlagen (_ssl.c:598)"

Ich bin ganz neu in Python und versuche, > pip install linkchecker auf Windows 7 zu installieren. Einige Hinweise:

  • pip install schlägt unabhängig vom Paket fehl. Zum Beispiel führt auch > pip install scrapy zu dem SSL-Fehler.
  • Die Standardinstallation von Python 3.4.1 enthielt pip 1.5.6. Das Erste, was ich versuchte zu tun, war linkchecker zu installieren. Python 2.7 war bereits installiert, es kam mit ArcGIS. python und pip waren nicht verfügbar von der Befehlszeile, bis ich 3.4.1 installierte.
  • > pip search linkchecker funktioniert. Vielleicht liegt das daran, dass pip search das SSL-Zertifikat der Site nicht überprüft.
  • Ich befinde mich in einem Firmennetzwerk, gehen aber nicht über einen Proxy ins Internet.
  • Jeder Firmencomputer (einschließlich meines) verfügt über eine vertrauenswürdige Stammzertifizierungsstelle, die aus verschiedenen Gründen verwendet wird, einschließlich der Überwachung von TLS-Verkehr zu https://google.com. Bin mir nicht sicher, ob das etwas damit zu tun hat.

Hier sind die Inhalte meiner pip.log nach Ausführung von pip install linkchecker:

Downloading/unpacking linkchecker
  Getting page https://pypi.python.org/simple/linkchecker/
  Konnte URL https://pypi.python.org/simple/linkchecker/ nicht abrufen: Verbindungsfehler: [SSL: CERTIFICATE_VERIFY_FAILED] Zertifikatüberprüfung fehlgeschlagen (_ssl.c:598)
  Wird URL https://pypi.python.org/simple/linkchecker/ überspringen, wenn nach Download-Links für linkchecker gesucht wird
  Getting page https://pypi.python.org/simple/
  Konnte URL https://pypi.python.org/simple/ nicht abrufen: Verbindungsfehler: HTTPSConnectionPool(host='pypi.python.org', port=443): Maximalanzahl der Wiederholungen mit URL: /simple/ überschritten (Verursacht durch : Request-sent)
  Wird URL https://pypi.python.org/simple/ überspringen, wenn nach Download-Links für linkchecker gesucht wird
  Kann Index-Basis-URL https://pypi.python.org/simple/ nicht abrufen
  URLs zum Suchen nach Versionen für linkchecker:
  * https://pypi.python.org/simple/linkchecker/
  Getting page https://pypi.python.org/simple/linkchecker/
  Konnte URL https://pypi.python.org/simple/linkchecker/ nicht abrufen: Verbindungsfehler: [SSL: CERTIFICATE_VERIFY_FAILED] Zertifikatüberprüfung fehlgeschlagen (_ssl.c:598)
  Wird URL https://pypi.python.org/simple/linkchecker/ überspringen, wenn nach Download-Links für linkchecker gesucht wird
  Konnte keine Downloads finden, die die Anforderung für linkchecker erfüllen
Aufräumen...
  Entferne temporäres Verzeichnis C:\Users\jcook\AppData\Local\Temp\pip_build_jcook...
Keine Verteilungen für linkchecker gefunden
Ausnahmefehlerinformationen:
Traceback (most recent call last):
  File "C:\Python34\lib\site-packages\pip\basecommand.py", Zeile 122, in main
    status = self.run(options, args)
  File "C:\Python34\lib\site-packages\pip\commands\install.py", Zeile 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", Zeile 1177, in prepare_files
    url = finder.find_requirement(req_to_install, upgrade=self.upgrade)
  File "C:\Python34\lib\site-packages\pip\index.py", Zeile 277, in find_requirement
    raise DistributionNotFound('No distributions at all found for %s' % req)
pip.exceptions.DistributionNotFound: Keine Verteilungen für linkchecker gefunden

Für diese Fehlermeldung <strong>in Ihrem eigenen Code</strong> (Verwendung von <code>urllib</code>, <code>urllib2</code>, <code>requests</code> usw. zum Versuch einer Verbindung unter Verwendung von SSL), siehe <a href="https://stackoverflow.com/q/27835619">urllib und "SSL: CERTIFICATE_VERIFY_FAILED" Fehler</a>.

27voto

kenorb Punkte 134883

Sie haben folgende Möglichkeiten, das Problem mit CERTIFICATE_VERIFY_FAILED zu lösen:

  • Verwenden Sie HTTP anstelle von HTTPS (z.B. --index-url=http://pypi.python.org/simple/).

  • Verwenden Sie --cert oder die CA_BUNDLE-Variable, um ein alternatives CA-Bundle anzugeben.

    Zum Beispiel können Sie die fehlerhafte URL im Webbrowser aufrufen und das Stammzertifikat in Ihr System importieren.

  • Führen Sie python -c "import ssl; print(ssl.get_default_verify_paths())" aus, um das aktuelle Zertifikat zu überprüfen (überprüfen Sie, ob es existiert).

  • OpenSSL bietet ein Paar Umgebungen (SSL_CERT_DIR, SSL_CERT_FILE), die verwendet werden können, um eine andere Zertifikatsdatenbank anzugebenPEP-476.

  • Verwenden Sie --trusted-host , um den Host als vertrauenswürdig zu kennzeichnen.

  • In Python verwenden Sie verify=False für requests.get (siehe: SSL-Zertifikatüberprüfung).

  • Verwenden Sie --proxy , um Zertifikatsprüfungen zu vermeiden.

Weitere Informationen finden Sie unter: TLS/SSL-Wrapper für Socket-Objekte - Zertifikate überprüfen.

22voto

Thomas Devoogdt Punkte 796

Stellen Sie Zeit und Datum richtig ein!

Bei mir stellte sich heraus, dass mein Datum und meine Uhrzeit auf dem Raspberry Pi falsch konfiguriert waren. Das Ergebnis war, dass alle SSL- und HTTPS-Verbindungen fehlschlugen, wenn der https://files.pythonhosted.org/ Server verwendet wurde.

Aktualisieren Sie es wie folgt:

sudo date -s "Wed Thu  23 11:12:00 GMT+1 2018"
sudo dpkg-reconfigure tzdata

Oder direkt mit z.B. Googles Zeit:

Ref.: https://superuser.com/a/635024/935136

sudo date -s "$(curl -s --head http://google.com | grep ^Date: | sed 's/Date: //g')"
sudo dpkg-reconfigure tzdata

15voto

Nitesh chauhan Punkte 316

TLDR:

pip install --trusted-host pypi.org --trusted-host pypi.python.org --trusted-host files.pythonhosted.org -r requirements.txt -vvv

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

Also, mit 30+ Antworten auf die Frage schon da, aber nichts hat für mich im Juni 2020 (während des Lockdowns ) funktioniert.
alle wurden zu verschiedenen Zeitpunkten in der Vergangenheit gegeben. Ich werde versuchen, diese Antwort in Zukunft für alle Zeiten funktionieren zu lassen. Das Problem besteht darin, dass pip beim Installieren eines Pakets versucht, eine Verbindung zu der Host-URL herzustellen, auf der das Paket gespeichert ist, und keine Verbindung herstellt.

Es gibt zwei Möglichkeiten, wie wir dieses Problem lösen können: Einfach und unsicher: 1. Überprüfen Sie, welche URL von pip getroffen wird, um das Paket herunterzuladen.

pip install  -vvv

Wenn Sie das Ergebnis genau überprüfen, werden Sie feststellen, dass es möglicherweise zu einer URL wie pypi.org oder möglicherweise zu pypi.python.org geht.

Wenn ja, fügen Sie einfach die Option trusted host zum Befehl hinzu wie unten:

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

oder wenn Sie eine Anforderungsdatei verwenden:

pip install --trusted-host pypi.org --trusted-host pypi.python.org --trusted-host files.pythonhosted.org -r requirements.txt -vvv

Sicherer Weg:

Gehen Sie zu jeder dieser URLs und laden Sie ihr öffentliches Zertifikat herunter (googeln Sie einfach, wie man herunterlädt), erstellen Sie eine Kette, speichern Sie es als .pem-Datei und führen Sie den folgenden Befehl aus:

pip --cert YourPemFile.pem install

14voto

Ross Peoples Punkte 873

Ich bin kürzlich auf dieses Problem gestoßen, weil der Web-Inhaltfilter meines Unternehmens einen eigenen Zertifizierungsstelle verwendet, um SSL-Verkehr zu filtern. In meinem Fall scheint PIP die CA-Zertifikate des Systems nicht zu verwenden, was den von dir erwähnten Fehler verursacht. Das Downgraden von PIP auf Version 1.2.1 brachte später seine eigenen Probleme mit sich, also bin ich zur Originalversion zurückgekehrt, die mit Python 3.4 geliefert wurde.

Mein Workaround ist ziemlich einfach: easy_install verwenden. Entweder überprüft es die Zertifikate nicht (wie die alte PIP-Version) oder es weiß, wie man die Systemzertifikate verwendet, weil es bei mir jedes Mal funktioniert und ich trotzdem PIP verwenden kann, um Pakete zu deinstallieren, die mit easy_install installiert wurden.

Wenn das nicht funktioniert und du Zugriff auf ein Netzwerk oder einen Computer bekommst, bei dem das Problem nicht auftritt, könntest du immer deinen eigenen persönlichen PyPI-Server einrichten: Wie erstelle ich einen lokalen eigenen PyPI-Repository-Index ohne Spiegelung?

Ich habe das fast gemacht, bis ich easy_install als letztes Mittel ausprobiert habe.

13voto

Augusto Destrero Punkte 3645

Sie können versuchen, den SSL-Fehler zu umgehen, indem Sie http anstelle von https verwenden. Natürlich ist dies nicht optimal in Bezug auf Sicherheit, aber wenn es schnell gehen muss, sollte es funktionieren:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X