Ich versuche, eine Python Bibliothek mit pip
zu installieren und erhalte einen SSL-Fehler:
~/projects/base pre-master± pip install xdict
Collecting xdict
Could not fetch URL https://pypi.python.org/simple/xdict/: There was a problem confirming the ssl certificate: [SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version (_ssl.c:590) - skipping
Could not find a version that satisfies the requirement xdict (from versions: )
No matching distribution found for xdict
pip version: pip 9.0.1
Wie behebe ich diesen Fehler?
Aktualisieren Sie pip wie folgt:
curl https://bootstrap.pypa.io/get-pip.py | python
Hinweis: Möglicherweise müssen Sie Sudo python
oben verwenden, wenn Sie sich nicht in einer virtuellen Umgebung befinden.
(Beachten Sie, dass die Aktualisierung von pip
mit pip
, dh pip install --upgrade pip
, ebenfalls nicht korrekt ist. Es handelt sich lediglich um ein Problem mit Hühnchen und Eiern. pip
funktioniert nur mit TLS > = 1,2.)
Wie in diese ausführliche Antwort erwähnt, liegt dies an der jüngsten TLS-Abschaffung für pip. Python.org-Sites haben gestoppte Unterstützung für TLS-Versionen 1.0 und 1.1.
Auf der Statusseite Python:
Abgeschlossen - Die rollierenden Brownouts sind beendet und TLSv1.0 und TLSv1.1 wurden deaktiviert. 11. April, 15:37 UTC
Für PyCharm (virtualenv) Benutzer:
Führen Sie die virtuelle Umgebung mit Shell aus. (Ersetzen Sie "./venv/bin/activate" durch Ihren eigenen Pfad)
source ./venv/bin/activate
Führen Sie das Upgrade aus
curl https://bootstrap.pypa.io/get-pip.py | python
Starten Sie Ihre PyCharm-Instanz neu und überprüfen Sie Ihren Python -Interpreter in Preference .
Aber wenn der Befehl curl
selbst mit einem Fehler fehlschlägt oder "tlsv1 alert protocol version" auch nach dem Upgrade von pip
bestehen bleibt bedeutet, dass die zugrunde liegende OpenSSL-Bibliotheksversion <1.0.1
oder Python Version <2.7.9
(oder <3.4
in Python 3) nicht unterstützt das neuere TLS 1.2-Protokoll, das pip
seit vor ungefähr einem Jahr mit PyPI verbinden muss. Sie können es einfach in Python Interpreter überprüfen:
>>> import ssl
>>> ssl.OPENSSL_VERSION
'OpenSSL 0.9.8o 01 Jun 2010'
>>> ssl.PROTOCOL_TLSv1_2
AttributeError: 'module' object has no attribute 'PROTOCOL_TLSv1_2'
Das AttributeError
(anstelle von '5' erwartet) bedeutet, dass Ihr Python stdlib ssl
- Modul, das mit der alten openssl lib kompiliert wurde, das TLSv1.2-Protokoll nicht unterstützt (auch wenn das nicht unterstützt wird) Die openssl-Bibliothek kann oder könnte später aktualisiert werden.
Glücklicherweise kann es gelöst werden , ohne Python (und das gesamte System) zu aktualisieren, indem zusätzliche Python -Pakete manuell installiert werden - die detaillierte schrittweise Anleitung ist hier auf Stackoverflow verfügbar .
Beachten Sie, dass
curl
undpip
undwget
alle von derselben OpenSSL-Bibliothek zum Herstellen von SSL-Verbindungen abhängen (verwenden Sie den Befehl$ openssl version
). libcurl unterstützt TLS 1.2 seit der Curl-Version 7.34 , aber ältere Curl-Versionen sollten können verbinden, wenn Sie OpenSSL-Version 1.0 hatten .2 (oder später).P.S
Verwenden Sie für Python 3 überallpython3
undpip3
(außer Sie befinden sich in einem Venv/Virtualenv), einschließlich dercurl
Befehl von oben :$ curl https://bootstrap.pypa.io/get-pip.py | python3 --user
Die Beantwortung von @ Anupam unter OS X führte unabhängig von den Berechtigungen, mit denen ich es ausgeführt habe, zu folgendem Fehler:
Pakete konnten aufgrund eines EnvironmentError nicht installiert werden: [Errno 13] Berechtigung verweigert: ...
Schließlich funktionierte es, ein neueres Pip-Paket (9.0.3) von PyPI direkt von meinem Browser herunterzuladen - https://pypi.org/simple/pip/ , den Inhalt zu extrahieren und dann pip zu installieren das Paket vor Ort:
pip install ./pip-9.0.3/
Dies hat meine [SSL: TLSV1_ALERT_PROTOCOL_VERSION]
Fehler behoben.
Um die lokale Version zu aktualisieren, habe ich eine leichte Variante verwendet:
curl https://bootstrap.pypa.io/get-pip.py | python - --user
Dieses Problem tritt auf, wenn Sie Pip und Pakete in Ihrem Ausgangsverzeichnis speichern, wie in this Gist beschrieben.
Die folgende Lösung hat bei mir funktioniert:
brew install python2
Außerdem wurde pip
auf Version 1.10.1 aktualisiert
@ Anupam s Lösung hat bei mir funktioniert. Ich musste jedoch Sudo
verwenden und den genauen Speicherort meiner virtuellen Python -Umgebung angeben:
curl https://bootstrap.pypa.io/get-pip.py | Sudo /Users/{your user name}/{path to python}/bin/python
Überprüfen Sie Ihre TLS-Version:
python2 -c "import urllib2,json; print(json.loads(urllib2.urlopen('https://www.howsmyssl.com/a/check').read())['tls_version'])"
Wenn Ihre TLS-Version kleiner als 1.2 ist, müssen Sie ein Upgrade durchführen, da im PyPI-Repository ein Brownout-Zeitraum verstrichen ist, in dem frühes TLS veraltet ist.
Source - Zeit für ein Upgrade Ihres Pythons: TLS v1.2 wird bald obligatorisch sein
Sie können die TLS-Version mit dem folgenden Befehl aktualisieren:
Sudo apt-get update && Sudo apt-get install openssl libssl-dev
Dies sollte Ihr Problem beheben. Viel Glück!
BEARBEITEN: Sie können Pakete mit Ihrem eigenen privaten python Paket-Repository herunterladen, unabhängig von der TLS-Version. Privates Python Paket-Repository
Ich habe alle vorhandenen Korrekturen ausprobiert und nicht für mich gearbeitet
Ich installiere python 2.7 neu (installiere auch pip), indem ich .pkg unter https://www.python.org/downloads/mac-osx/ herunterlade
funktioniert bei mir nach der installation pkg runtergeladen
Für Python2 WIN10-Benutzer:
1. Deinstallieren Sie python gründlich und schließen Sie alle Ordner ein.
2. Holen und installieren Sie die neueste python-2.7.msi (Version 2.7.15)
3.Nach Schritt 2 wurde möglicherweise auch pip installiert.
4.Wenn Ihr System noch nicht geändert wurde, können Sie jetzt Pakete mit pip installieren. Die "tlsv1 alert protocol version" wird nicht angezeigt.
Ich bin auch auf dieses Problem gestoßen. Das zugrunde liegende Problem ist, dass die SSL-Bibliothek in Python 2.7-Versionen <2.7.9 nicht mehr mit dem Pip-Mechanismus kompatibel ist.
Wenn Sie unter Windows arbeiten und Sie (wie wir) nicht einfach von einer inkompatiblen Version von 2.7, FWIW, aktualisieren können, stellte ich fest, dass Sie die folgenden Dateien von einer anderen Installation der neuesten Version von Pythonkopieren. _ (zB Python 2.7.15) auf einem anderen Rechner zu Ihrer Installation:
Lib\ssl.py
libs\_ssl.lib
DLLs\_ssl.dll
dadurch wird Ihre SSL-Schicht effektiv auf eine unterstützte "upgegradet". wir konnten dann pip wieder benutzen, sogar pip upgraden.
Das hat bei mir funktioniert. Fügen Sie Sudo vor Python hinzu
curl https://bootstrap.pypa.io/get-pip.py |Sudo python
Ich habe dieses Problem auch unter Windows 10 festgestellt und alle Antworten ausprobiert, aber mein Problem nicht gelöst.
C:\python367\Scripts> pip install Flask
Sammeln von Flask Konnte keine Version finden, die die Anforderung erfüllt Flask (aus Versionen:) Keine passende Verteilung für Flask gefunden
Danach stelle ich fest, dass die Pip-Konfigurationsdatei geändert wurde. Also setze ich den pip.ini
als die ursprüngliche Standardkonfiguration, führe den pip-Befehl erneut aus und es funktioniert für mich!
Zusammenfassend meine Lösung:
Überprüfen Sie, ob die pip.ini (normalerweise unter dem Pfad C:\ProgramData\pip
) geändert wurde.
Wenn dies in Schritt 1 der Fall ist, versuchen Sie, die Standardkonfiguration wiederherzustellen.
Das hat bei mir funktioniert, ich habe die neueste Version von pip installiert und dann die Bibliothek installiert (ciscoconfparse).
Pip aktualisieren:
curl https://bootstrap.pypa.io/get-pip.py | Sudo /Users/{your user name}/{path to python}/bin/python
Oder die benötigte Bibliothek ist einfach nicht im Repo. Ich bin Python Neuling und alle Ratschläge zur Aktualisierung von pip werden schließlich als irreführend angezeigt. Ich musste nur in https://pypi.org/ nachsehen und fand heraus, dass die Bibliothek (in meinem Fall der Luftstrom) bei einer alten Version stehen blieb, nach der sie umbenannt wurde. Ja, auch diese dumme Lösung ist möglich :-).
myenv:
python 2.7.14
pip 9.0.1
mac osx 10.9.4
meine Lösung:
laden Sie get-pip.py
manuell von https://packaging.python.org/tutorials/installing-packages/ herunter
führe python get-pip.py
aus
refs:
https://github.com/pypa/warehouse/issues/3293#issuecomment-378468534
https://packaging.python.org/tutorials/installing-packages/
Sicher herunterladen get-pip.py [1]
Führen Sie python get-pip.py aus. [2] Dadurch wird pip installiert oder aktualisiert. Außerdem werden Setuptools und Wheel installiert, sofern diese noch nicht installiert sind.
Stellen Sie sicher, dass Pip, Setuptools und Rad auf dem neuesten Stand sind
Während pip für die Installation von vorgefertigten Binärarchiven ausreicht, sind aktuelle Kopien der setuptools- und wheel-Projekte hilfreich, um sicherzustellen, dass Sie auch von Quellarchiven installieren können:
python -m pip install --upgrade pip setuptools wheel
Für alle python3
und pip3
Benutzer da draußen:
curl https://bootstrap.pypa.io/get-pip.py | Sudo python3
und dann nehmen Sie an, dass Sie Pandas installieren möchten
pip3 install pandas --user