it-swarm.com.de

Python Pakete können nicht installiert werden [SSL: TLSV1_ALERT_PROTOCOL_VERSION]

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?

161

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:

  1. Führen Sie die virtuelle Umgebung mit Shell aus. (Ersetzen Sie "./venv/bin/activate" durch Ihren eigenen Pfad)

    source ./venv/bin/activate
    
  2. Führen Sie das Upgrade aus

    curl https://bootstrap.pypa.io/get-pip.py | python
    
  3. Starten Sie Ihre PyCharm-Instanz neu und überprüfen Sie Ihren Python -Interpreter in Preference .

423
Anupam

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 und pip und wget 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 überall python3 und pip3 (außer Sie befinden sich in einem Venv/Virtualenv), einschließlich der curl Befehl von oben :
$ curl https://bootstrap.pypa.io/get-pip.py | python3 --user

25
Alexey C.

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.

9
T Dub

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.

6
Hbar

Die folgende Lösung hat bei mir funktioniert:

brew install python2

Außerdem wurde pip auf Version 1.10.1 aktualisiert

5

@ 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
5
Ilya Gazman

Ü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

3
Vithulan

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

2
keypoint

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.

2
Optimus Prime

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.

2
W. Sadkin

Das hat bei mir funktioniert. Fügen Sie Sudo vor Python hinzu

curl https://bootstrap.pypa.io/get-pip.py |Sudo python
2
Sugoi Reed

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:

  1. Überprüfen Sie, ob die pip.ini (normalerweise unter dem Pfad C:\ProgramData\pip) geändert wurde.

  2. Wenn dies in Schritt 1 der Fall ist, versuchen Sie, die Standardkonfiguration wiederherzustellen.

1
lyn

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
1
user9825640

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

1

myenv:

python 2.7.14

pip 9.0.1

mac osx 10.9.4


meine Lösung:

  1. laden Sie get-pip.py manuell von https://packaging.python.org/tutorials/installing-packages/ herunter

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

1
Nick Dong

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
0
HoKy22