Nie można zainstalować pakietów Pythona [SSL: TLSV1_ALERT_PROTOCOL_VERSION]

167

Próbuję zainstalować bibliotekę Pythona przy użyciu pip, pojawia się błąd SSL:

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

wersja pip: pip 9.0.1

Jak naprawić ten błąd?

Nishant Nawarkhede
źródło
1
Postępuj zgodnie z tą odpowiedzią stackoverflow.com/a/46808948/2419644
Mitul Shah

Odpowiedzi:

443

Uaktualnij pip w następujący sposób:

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

Uwaga: może być konieczne użycie sudo pythonpowyższego, jeśli nie w środowisku wirtualnym.

(Pamiętaj, że aktualizacja pipprzy użyciu pipie pip install --upgrade piprównież nie spowoduje jej poprawnej aktualizacji. Jest to tylko problem z kury i jaja. pipNie będzie działać, chyba że używasz TLS> = 1.2).

Jak wspomniano w tej szczegółowej odpowiedzi , jest to spowodowane niedawnym wycofaniem protokołu TLS dla pip. Witryny Python.org przestały obsługiwać TLS w wersjach 1.0 i 1.1.

Ze strony statusu Pythona:

Ukończono - kolejne przerwy w pracy zostały zakończone, a protokoły TLSv1.0 i TLSv1.1 zostały wyłączone. 11 kwietnia, 15:37 UTC


Dla użytkowników PyCharm (virtualenv):

  1. Uruchom środowisko wirtualne z powłoką. (zamień „./venv/bin/activate” na swoją własną ścieżkę)

    source ./venv/bin/activate
  2. Uruchom aktualizację

    curl https://bootstrap.pypa.io/get-pip.py | python
  3. Zrestartuj swoją instancję PyCharm i sprawdź swój interpreter Pythona w Preference .

Anupam
źródło
2
To zadziałało dla mnie! Musiałem dodać sudona początku z powodu błędów odmowy pozwolenia. Dzięki!
Simar
34
Wymaga sudo do działania: curl https://bootstrap.pypa.io/get-pip.py | sudo python
Wallace
2
@Simar @Wallace yeah, może wymagać, sudojeśli nie w środowisku wirtualnym. Dodałem to również w odpowiedzi teraz.
Anupam
1
Jeśli nie jesteś w środowisku wirtualnym, może być konieczne określenie ścieżki do pliku binarnego Pythona, jak wspomina Ilya poniżej
Chris
2
Na OSX to działało lepiej dla mniecurl https://bootstrap.pypa.io/get-pip.py | sudo -H python3
nick fox
26

Ale jeśli curlsamo polecenie zakończy się błędem lub „wersja protokołu alertu tlsv1” będzie się powtarzać nawet po aktualizacji pip, oznacza to, że wersja biblioteki OpenSSL Twojego systemu operacyjnego < 1.0.1lub wersja Pythona < 2.7.9(lub < 3.4w Pythonie 3) nie obsługuje nowszego protokołu TLS 1.2 który pipmusi łączyć się z PyPI od około roku temu . Możesz to łatwo sprawdzić w interpreterze Pythona:

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

Znak AttributeError(zamiast oczekiwanego „5”) oznacza, że sslmoduł Pythona stdlib , skompilowany ze starą biblioteką openssl, nie obsługuje protokołu TLSv1.2 (nawet jeśli biblioteka openssl może lub może zostać zaktualizowana później).

Na szczęście można to rozwiązać bez aktualizacji Pythona (i całego systemu), ręcznie instalując dodatkowe pakiety Pythona - szczegółowy przewodnik krok po kroku jest dostępny tutaj na Stackoverflow .

Uwaga, curla pipi wgetwszystko zależy od tego samego OpenSSL lib do ustanowienia połączenia SSL (użyj $ openssl versionpolecenia). libcurl obsługuje TLS 1.2 od wersji curl 7.34 , ale starsze wersje curl powinny mieć możliwość połączenia, jeśli masz OpenSSL w wersji 1.0.2 (lub nowszej).


PS
W przypadku Pythona 3 używaj python3i pip3wszędzie (chyba że jesteś w venv / virtualenv), łącznie z curlpoleceniem z góry :
$ curl https://bootstrap.pypa.io/get-pip.py | python3 --user

Alex C.
źródło
4
Zdałem sobie również sprawę, że muszę uruchomić pip3, nie tylko pip- sprawdzić wersję za pomocą polecenia, -Vaby upewnić się, że używasz właściwego pip !!
stycznia
9

Podążanie za odpowiedzią @ Anupam na OS X spowodowało następujący błąd, niezależnie od uprawnień, z którymi go uruchomiłem:

Nie można zainstalować pakietów z powodu błędu środowiskowego: [Errno 13] Odmowa uprawnień: ...

Ostatecznie udało się pobrać nowszy pakiet pip (9.0.3) z PyPI bezpośrednio z mojej przeglądarki - https://pypi.org/simple/pip/ , rozpakować zawartość, a następnie zainstalować pakiet lokalnie za pomocą pip:

pip install ./pip-9.0.3/

To naprawiło moje [SSL: TLSV1_ALERT_PROTOCOL_VERSION]błędy.

T Dub
źródło
7

Rozwiązanie @Anupam zadziałało dla mnie. Musiałem jednak użyć sudoi określić dokładną lokalizację mojego wirtualnego środowiska Pythona:

curl https://bootstrap.pypa.io/get-pip.py | sudo /Users/{your user name}/{path to python}/bin/python
Ilya Gazman
źródło
6

Aby zaktualizować lokalną wersję, użyłem niewielkiego wariantu:

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

Ten problem pojawia się, jeśli przechowujesz pip i pakiety w swoim katalogu domowym, jak opisano w tym skrócie .

Hbar
źródło
5

U mnie zadziałało następujące rozwiązanie:

brew install python2

Uaktualniono również pipdo wersji 1.10.1

Monish Lalchandani
źródło
^ ten dla tych z nas, którzy nie używają domyślnego Pythona na OSX. Wydaje mi się, że pytanie nie było specyficzne dla OSX, ale tak czy inaczej, jeśli nie używasz Linuksa, to działa - chyba że piszesz na zainstalowanym systemie Python.
słoik
Ten działał dla mnie, używam Pythona na OSX. Moja sytuacja Spędziłem tydzień próbując zainstalować dowolny pakiet pip i nie udało się. Odinstalowałem pip i od tego czasu nie mogę nic zrobić, dopóki nie otrzymałem tego polecenia, które zainstalowało pip dla mnie. Dziękuję Ci!
AMM
3

Sprawdź swoją wersję TLS:

python2 -c "import urllib2,json; print(json.loads(urllib2.urlopen('https://www.howsmyssl.com/a/check').read())['tls_version'])"

Jeśli Twoja wersja TLS jest niższa niż 1.2, musisz ją zaktualizować, ponieważ repozytorium PyPI znajduje się w okresie wycofywania wczesnej wersji TLS.

Źródło - czas na aktualizację Pythona: protokół TLS v1.2 wkrótce będzie obowiązkowy

Możesz zaktualizować wersję TLS za pomocą następującego polecenia:

sudo apt-get update && sudo apt-get install openssl libssl-dev

To powinno rozwiązać twój problem. Powodzenia!

EDYCJA: Możesz pobierać pakiety przy użyciu własnego prywatnego repozytorium pakietów Pythona niezależnie od wersji TLS. Prywatne repozytorium pakietów Pythona

Vithulan
źródło
2

To zadziałało dla mnie. Dodaj sudo przed pythonem

curl https://bootstrap.pypa.io/get-pip.py |sudo python
Sugoi Reed
źródło
2

Użytkownicy Python2 WIN10:

1.Dokładnie odinstaluj Pythona, dołącz wszystkie foldery.

2. Pobierz i zainstaluj najnowszą wersję python-2.7.msi (wersja 2.7.15)

3. Po kroku 2 może się okazać, że pip został również zainstalowany.

4. Teraz, jeśli twój system'env nie został zmieniony, możesz teraz zainstalować pakiety za pomocą pip. „Wersja protokołu alertu tlsv1” nie pojawi się.

Optimus Prime
źródło
2

Wypróbowałem wszystkie istniejące poprawki i nie działały dla mnie

Ponownie instaluję Pythona 2.7 (zainstaluję również pip), pobierając plik .pkg ze strony https://www.python.org/downloads/mac-osx/

działa u mnie po instalacji pobranego pkg

kluczowy punkt
źródło
2

Ja też napotkałem ten problem. Podstawowy problem polega na tym, że biblioteka ssl w Pythonie 2.7 w wersjach <2.7.9 nie jest już zgodna z mechanizmem pip.

Jeśli pracujesz w systemie Windows i (tak jak my) nie możesz łatwo zaktualizować niekompatybilnej wersji 2.7, FWIW, stwierdziłem, że jeśli skopiujesz następujące pliki z innej instalacji najnowszej wersji Pythona (np.Python 2.7. 15) na innym komputerze do swojej instalacji:

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

skutecznie "zaktualizuje" twoją warstwę SSL do takiej, która jest obsługiwana; mogliśmy wtedy ponownie użyć pip, nawet do aktualizacji pip.

W. Sadkin
źródło
1

To zadziałało dla mnie, zainstalowałem najnowszą wersję pip, a następnie zainstalowałem bibliotekę ( ciscoconfparse ).

Aktualizacja pip:

curl https://bootstrap.pypa.io/get-pip.py | sudo /Users/{your user name}/{path to python}/bin/python
user9825640
źródło
1

myenv:

python 2.7.14

pip 9.0.1

mac osx 10.9.4


rozwiązanie:

  1. pobierz get-pip.pyręcznie z https://packaging.python.org/tutorials/installing-packages/

  2. biegać python get-pip.py


referencje:

https://github.com/pypa/warehouse/issues/3293#issuecomment-378468534

https://packaging.python.org/tutorials/installing-packages/

Bezpiecznie pobierz get-pip.py [1]

Uruchom python get-pip.py. [2] Spowoduje to zainstalowanie lub aktualizację pip. Dodatkowo zainstaluje setuptools i wheel, jeśli nie są jeszcze zainstalowane.

Upewnij się, że pip, setuptools i wheel są aktualne

Chociaż sam pip wystarczy do zainstalowania z gotowych archiwów binarnych, aktualne kopie narzędzi konfiguracyjnych i projektów kół są przydatne, aby zapewnić, że można również zainstalować z archiwów źródłowych:

python -m pip install --upgrade pip setuptools wheel

Nick Dong
źródło
1

Trafiłem również na ten problem na moim windows10 i wypróbowałem wszystkie odpowiedzi, ale nie rozwiązałem mojego problemu.

C: \ python367 \ Scripts> pip install Flask

Zbieranie Flask Nie można znaleźć wersji spełniającej wymagania Flask (z wersji :) Nie znaleziono pasującej dystrybucji dla Flask

Po tym stwierdziłem, że plik konfiguracyjny pip został zmodyfikowany. Więc ustawiłem pip.inijako oryginalną domyślną konfigurację, ponownie uruchom polecenie pip i działa dla mnie!

Podsumowując moje rozwiązanie:

  1. Sprawdź, czy pip.ini (zwykle pod ścieżką C:\ProgramData\pip) został zmodyfikowany;

  2. Jeśli tak w kroku 1, spróbuj zresetować go do konfiguracji domyślnej.

Lyn
źródło
1

Lub po prostu wymaganej biblioteki po prostu nie ma w repozytorium. Jestem nowicjuszem w Pythonie i wszystkie porady dotyczące aktualizacji pip zostały ostatecznie pokazane jako mylące. Musiałem tylko zajrzeć do https://pypi.org/ , stwierdzając, że biblioteka (przepływ powietrza w moim przypadku) zatrzymała się na jakiejś starej wersji, po czym została zmieniona. Tak, możliwe jest też to głupie rozwiązanie :-).

Tomáš Záluský
źródło
1

Dla wszystkich użytkowników python3i pip3:

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

a następnie załóżmy, że chcesz zainstalować pandy

pip3 install pandas --user
HoKy22
źródło
1

Odpowiedzi dotyczące instalacji pip przez:

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

nie zadziałało, ponieważ ciągle otrzymywałem błąd:

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

Musiałem zainstalować pipręcznie przez:

  1. Przejdź do witrynypip dystrybucji
  2. Pobierz tar.gzwersję
  3. Rozpakuj plik lokalnie i cddo katalogu
  4. biegać python setup.py install
pokkie
źródło