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>.

1183voto

Vaulstein Punkte 17935

UPDATE: 2024-04: Diese Lösung ist unsicher und kann zu anderen Problemen wie MITM führen. Diese Lösung wurde als Lösung angegeben, wenn das Problem darin besteht, auf das Paket-Repository hinter Unternehmens-Firewalls zuzugreifen. Bitte bewerten Sie dies, bevor Sie es als Lösung in Betracht ziehen.

Verwenden Sie trusted-host entweder in der pip.conf oder als Befehlszeilenargument

Sie können SSL-Fehler ignorieren, indem Sie pypi.org und files.pythonhosted.org sowie das ältere pypi.python.org als vertrauenswürdige Hosts festlegen.

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

Anmerkung: Irgendwann im April 2018 wurde der Python Package Index von pypi.python.org zu pypi.org migriert. Das bedeutet, dass "trusted-host"-Befehle mit der alten Domain nicht mehr funktionieren, aber Sie können beide hinzufügen.

Permanente Lösung

Seit der Veröffentlichung von pip 10.0 sollten Sie dieses Problem dauerhaft beheben können, indem Sie einfach pip selbst aktualisieren:

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

Oder einfach durch Neuinstallation, um die neueste Version zu erhalten:

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

(... und dann get-pip.py mit dem entsprechenden Python-Interpreter ausführen).

pip install sollte danach einfach funktionieren. Wenn nicht, müssen Sie mehr tun, wie unten erläutert.


Sie möchten möglicherweise die vertrauenswürdigen Hosts und Proxy in Ihre Konfigurationsdatei hinzufügen.

pip.ini (Windows) oder pip.conf (Unix)

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

Alternative Lösungen (Weniger sicher)

All diese Antworten, die auf diese Frage geteilt wurden, haben ein Sicherheitsrisiko, sei es das Deaktivieren der SSL-Verifikation, das Hinzufügen einer vertrauenswürdigen Domain, Verwendung von selbstsignierten Zertifikaten, etc. Verwenden Sie diese Lösung nur, wenn Sie sich hinter einer Unternehmens-Firewall befinden und verstehen, dass die Risiken behandelt werden.

Zwei der Workarounds, die helfen, die meisten Python-Pakete mit Leichtigkeit zu installieren, wären:

  • Verwendung von easy_install: wenn Sie wirklich faul sind und nicht viel Zeit verschwenden möchten, verwenden Sie easy_install . Beachten Sie, dass einige Pakete nicht gefunden werden oder kleine Fehler verursachen können.
  • Verwendung von Wheel: laden Sie das Wheel des Python-Pakets herunter und verwenden Sie den pip-Befehl pip install wheel_package_name.whl, um das Paket zu installieren.

227voto

Steve Tauber Punkte 8593

Verwenden Sie das --cert Argument:

Sie können ein Zertifikat angeben mit:

pip --cert .pem install 

z.B.:

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

Siehe: Dokumentation » Referenzhandbuch » pip

Wenn das angeben des Root-Zertifikats Ihres Unternehmens nicht funktioniert, könnte vielleicht das cURL-Zertifikat funktionieren: http://curl.haxx.se/ca/cacert.pem

Sie müssen eine PEM-Datei verwenden und keine CRT-Datei. Wenn Sie eine CRT-Datei haben, müssen Sie die Datei in eine PEM-Datei konvertieren Es gibt Berichte in den Kommentaren, dass dies jetzt auch mit einer CRT-Datei funktioniert, aber ich habe es nicht überprüft.

Siehe auch: SSL Zertifikat-Verifizierung.

192voto

nirojshrestha019 Punkte 1024

Dauerhafte Lösung - pip-Konfiguration

Ich hatte SSL-Probleme aufgrund der Unternehmensnetzwerksicherheit in Bezug auf netscope. Mein Computer läuft mit Windows 10 und Python 3.9 und der folgende Befehl hat bei mir funktioniert.

pip config set global.trusted-host \
    "pypi.org files.pythonhosted.org pypi.python.org" \
    --trusted-host=pypi.python.org \
    --trusted-host=pypi.org \
    --trusted-host=files.pythonhosted.org

Hier hat pip diese Websites dauerhaft vertraut, und jetzt können wir sie verwenden, um beliebige Pakete herunterzuladen.

140voto

Timo Kvamme Punkte 2596

Für mich wurde das Problem behoben, indem ich einen Ordner pip mit einer Datei: pip.ini in C:\Users\\AppData\Roaming\ erstellt habe, z.B.:

C:\Users\\AppData\Roaming\pip\pip.ini

Darin habe ich Folgendes geschrieben:

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

Ich habe Python neu gestartet und dann hat pip diese Websites dauerhaft vertraut und sie zum Herunterladen von Paketen verwendet.

Wenn Sie den AppData-Ordner unter Windows nicht finden können, geben Sie %appdata% in den Datei-Explorer ein und er sollte erscheinen.

73voto

plhn Punkte 4557

kenorb’s Antwort ist sehr nützlich (und großartig!).
Unter seinen Lösungen ist vielleicht dies die einfachste:--trusted-host

Zum Beispiel, in diesem Fall können Sie folgendes tun

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

Die pem-Datei (oder etwas anderes) ist unnötig.

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