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

167

Ich versuche, eine Python-Bibliothek mithilfe pipeines SSL-Fehlers zu installieren :

~/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?

Nishant Nawarkhede
quelle
1
Folgen Sie dieser Antwort stackoverflow.com/a/46808948/2419644
Mitul Shah

Antworten:

443

Aktualisieren Sie pip wie folgt:

curl https://bootstrap.pypa.io/get-pip.py | python

Hinweis: Möglicherweise müssen Sie sudo pythonoben verwenden, wenn Sie sich nicht in einer virtuellen Umgebung befinden.

(Beachten Sie, dass ein Upgrade pipmit pipdh pip install --upgrade pipauch nicht korrekt aktualisiert wird. Es handelt sich nur um ein Henne-Ei-Problem. Es pipfunktioniert nur, wenn TLS> = 1.2 verwendet wird.)

Wie in dieser detaillierten Antwort erwähnt , ist dies auf die jüngste TLS-Ablehnung für pip zurückzuführen. Python.org-Sites haben die Unterstützung für TLS-Versionen 1.0 und 1.1 eingestellt.

Auf der Python-Statusseite:

Abgeschlossen - Die fortlaufenden 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 eine 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 den Einstellungen .

Anupam
quelle
2
Das hat bei mir funktioniert! Ich musste sudovorne hinzufügen, weil mir die Erlaubnis verweigert wurde. Vielen Dank!
Simar
34
Benötigt Sudo, um zu arbeiten: curl https://bootstrap.pypa.io/get-pip.py | sudo python
Wallace
2
@ Simar @ Wallace Ja, möglicherweise erforderlich, sudowenn nicht in einer virtuellen Umgebung. Dieses Bit wurde jetzt auch in der Antwort hinzugefügt.
Anupam
1
Wenn Sie sich nicht in einer virtuellen Umgebung befinden, müssen Sie möglicherweise den Pfad zu Ihrer Python-Binärdatei angeben, wie Ilya unten erwähnt
Chris
2
Unter OSX funktionierte das besser für michcurl https://bootstrap.pypa.io/get-pip.py | sudo -H python3
Nick Fox
26

Wenn der curlBefehl selbst jedoch mit einem Fehler fehlschlägt oder die "tlsv1-Alarmprotokollversion" auch nach dem Upgrade bestehen bleibt pip, bedeutet dies, dass die zugrunde liegende OpenSSL-Bibliotheksversion < 1.0.1oder Python-Version < 2.7.9(oder < 3.4in Python 3) Ihres Betriebssystems das neuere TLS 1.2-Protokoll nicht unterstützt Das pipmuss sich seit ungefähr einem Jahr mit PyPI verbinden . Sie können es einfach im 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'

Die AttributeError(anstelle der erwarteten '5') bedeutet, dass Ihr Python stdlib- sslModul, das gegen die alte openssl-Bibliothek kompiliert wurde, das TLSv1.2-Protokoll nicht unterstützt (auch wenn die openssl-Bibliothek später aktualisiert werden kann oder könnte).

Glücklicherweise kann es gelöst werden, ohne Python (und das gesamte System) zu aktualisieren , indem zusätzliche Python-Pakete manuell installiert werden. Die ausführliche Schritt-für-Schritt-Anleitung finden Sie hier auf Stackoverflow .

Beachten Sie, curlund pipund wgetalle hängen von derselben OpenSSL-Bibliothek ab, um SSL-Verbindungen herzustellen ( $ openssl versionBefehl use ). libcurl unterstützt TLS 1.2 seit Curl Version 7.34 , ältere Curl-Versionen sollten jedoch eine Verbindung herstellen können, wenn Sie OpenSSL Version 1.0.2 (oder höher) hatten.


PS
Für Python 3 verwenden Sie bitte python3und pip3überall (es sei denn, Sie befinden sich in einem venv / virtualenv), einschließlich des curlBefehls von oben :
$ curl https://bootstrap.pypa.io/get-pip.py | python3 --user

Alex C.
quelle
4
Mir wurde auch klar, dass ich laufen musste pip3, nicht nur pip- überprüfen Sie die Version mit dem Befehl -V, um sicherzustellen, dass Sie den richtigen Pip ausführen !!
Jan
9

Das Befolgen der Antwort von @ Anupam unter OS X führte zu dem folgenden Fehler für mich, unabhängig von den Berechtigungen, mit denen ich es ausgeführt habe:

Pakete konnten aufgrund eines Umgebungsfehlers nicht installiert werden: [Errno 13] Berechtigung verweigert: ...

Was schließlich funktionierte, war, ein neueres Pip-Paket (9.0.3) von PyPI direkt von meinem Browser herunterzuladen - https://pypi.org/simple/pip/ , den Inhalt zu extrahieren und das Paket dann lokal zu installieren:

pip install ./pip-9.0.3/

Dies hat meine [SSL: TLSV1_ALERT_PROTOCOL_VERSION]Fehler behoben .

T Dub
quelle
7

Die Lösung von @Anupam hat bei mir funktioniert. Ich musste jedoch sudoden genauen Speicherort meiner virtuellen Python-Umgebung verwenden und angeben:

curl https://bootstrap.pypa.io/get-pip.py | sudo /Users/{your user name}/{path to python}/bin/python
Ilya Gazman
quelle
6

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 Ihre Pip und Pakete wie in dieser Übersicht beschrieben in Ihrem Home-Verzeichnis aufbewahren .

Hbar
quelle
5

Die folgende Lösung hat bei mir funktioniert:

brew install python2

Es wurde auch auf pipVersion 1.10.1 aktualisiert

Monish Lalchandani
quelle
^ Dies ist für diejenigen von uns, die unter OSX nicht die Standard-Python verwenden. Ich denke, die Frage war nicht OSX-spezifisch, aber wenn Sie nicht Linux verwenden, funktioniert dies - es sei denn, Sie schreiben Inhalte über das auf dem System installierte Python.
Glas
Dieser hat bei mir funktioniert, ich benutze die Python unter OSX. In meiner Situation habe ich eine Woche lang versucht, ein Pip-Paket zu installieren, und es ist fehlgeschlagen. Ich habe pip deinstalliert und von diesem Zeitpunkt an kann ich nichts mehr tun, bis ich diesen Befehl erhalten habe, der pip für mich installiert hat. Danke dir!
Amm
3

Ü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 sie aktualisieren, da sich das PyPI-Repository in einer Sperrphase befindet, in der frühes TLS nicht mehr unterstützt wird.

Quelle - Zeit für ein Upgrade Ihres Python: 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 unabhängig von der TLS-Version mit Ihrem eigenen privaten Python-Paket-Repository herunterladen. Privates Python-Paket-Repository

Vithulan
quelle
2

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

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

Für Python2 WIN10-Benutzer:

1.Deinstallieren Sie Python gründlich und schließen Sie alle Ordner ein.

2. Holen Sie sich den neuesten Python-2.7.msi (Version 2.7.15) und installieren Sie ihn.

3.Nach Schritt 2 wurde möglicherweise auch pip installiert.

4. Wenn Ihr System nicht geändert wurde, können Sie jetzt mit pip Pakete installieren. Die "tlsv1-Alarmprotokollversion" wird nicht angezeigt.

Optimus Prime
quelle
2

Ich habe alle vorhandenen Korrekturen ausprobiert und nicht für mich gearbeitet

Ich installiere Python 2.7 neu (wird auch pip installieren), indem ich .pkg unter https://www.python.org/downloads/mac-osx/ herunterlade.

funktioniert für mich nach der Installation heruntergeladen pkg

Kernpunkt
quelle
2

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 ausgeführt werden und (wie wir) kein einfaches Upgrade von einer inkompatiblen Version von 2.7, FWIW, durchführen können, habe ich festgestellt, dass Sie die folgenden Dateien aus einer anderen Installation der neuesten Version von Python (z. B. Python 2.7) kopieren. 15) auf einem anderen Computer zu Ihrer Installation:

    Lib\ssl.py
    libs\_ssl.lib
    DLLs\_ssl.dll

Dadurch wird Ihre SSL-Schicht effektiv auf eine unterstützte Schicht "aktualisiert". Wir konnten dann wieder pip verwenden, sogar um pip zu aktualisieren.

W. Sadkin
quelle
1

Das hat bei mir funktioniert, ich habe die neueste Version von pip installiert und dann die Bibliothek ( ciscoconfparse ) installiert .

Pip aktualisieren:

curl https://bootstrap.pypa.io/get-pip.py | sudo /Users/{your user name}/{path to python}/bin/python
user9825640
quelle
1

myenv:

Python 2.7.14

pip 9.0.1

mac osx 10.9.4


meine Lösung:

  1. get-pip.pymanuell von https://packaging.python.org/tutorials/installing-packages/ herunterladen

  2. Lauf python get-pip.py


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 Rohrleitung, Sollwerkzeuge und Rad auf dem neuesten Stand sind

Während pip allein ausreicht, um aus vorgefertigten Binärarchiven zu installieren, sind aktuelle Kopien der Setuptools und Wheel-Projekte hilfreich, um sicherzustellen, dass Sie auch aus Quellarchiven installieren können:

python -m pip install --upgrade pip setuptools wheel

Nick Dong
quelle
1

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

Sammelflasche Es konnte keine Version gefunden werden, die die Anforderung Flask erfüllt (aus Versionen :) Keine passende Verteilung für Flask gefunden

Danach finde ich, dass die Pip-Konfigurationsdatei geändert wurde. Also habe ich pip.inidie ursprüngliche Standardkonfiguration festgelegt, den Befehl pip erneut ausgeführt und es funktioniert für mich!

Zusammenfassend die Lösung von mir:

  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.

lyn
quelle
1

Oder einfach ist die benötigte Bibliothek einfach nicht im Repo. Ich bin Python-Neuling und alle Ratschläge zum Aktualisieren von Pip werden schließlich als irreführend angezeigt. Ich musste nur in https://pypi.org/ nachsehen und feststellen, dass die Bibliothek (in meinem Fall der Luftstrom) bei einer alten Version gestoppt war, wonach sie umbenannt wurde. Ja, auch diese dumme Lösung ist möglich :-).

Tomáš Záluský
quelle
1

Für alle python3und pip3Benutzer da draußen:

curl https://bootstrap.pypa.io/get-pip.py | sudo python3

und dann nehmen Sie an, Sie möchten Pandas installieren

pip3 install pandas --user
HoKy22
quelle
1

Die Antworten zur Installation von pip via:

  1. curl https://bootstrap.pypa.io/get-pip.py |sudo python oder
  2. curl https://bootstrap.pypa.io/get-pip.py | python

hat bei mir nicht funktioniert, da ich immer wieder den Fehler bekam:

Could not fetch URL https://pypi.org/simple/pip/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/pip/ (Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not available.",)) - skipping
ERROR: Could not find a version that satisfies the requirement pip (from versions: none)
ERROR: No matching distribution found for pip

Ich musste pipmanuell installieren über:

  1. Gehen Sie die pipVerteilung Website
  2. Laden Sie die tar.gzVersion herunter
  3. Entpacken Sie die Datei lokal und cdin das Verzeichnis
  4. Lauf python setup.py install
Pokkie
quelle