Impossibile installare i pacchetti Python [SSL: TLSV1_ALERT_PROTOCOL_VERSION]


167

Sto cercando di installare una libreria Python utilizzando pip, ottenendo un errore 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

versione pip: pip 9.0.1

Come posso correggere questo errore?



Risposte:


443

Aggiornare pip come segue:

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

Nota: potrebbe essere necessario utilizzare sudo pythonsopra se non in un ambiente virtuale.

(Notare che l'aggiornamento pipusando pipie pip install --upgrade pipnon lo aggiornerà correttamente. È solo un problema di pollo e uova. pipNon funzionerà se non si utilizza TLS> = 1.2.)

Come menzionato in questa risposta dettagliata , ciò è dovuto alla recente deprecazione TLS per pip. I siti Python.org hanno interrotto il supporto per le versioni TLS 1.0 e 1.1.

Dalla pagina di stato di Python:

Completato : i brownout rotanti sono terminati e TLSv1.0 e TLSv1.1 sono stati disabilitati. 11 aprile, 15:37 UTC


Per gli utenti di PyCharm (virtualenv):

  1. Esegui ambiente virtuale con shell. (sostituisci "./venv/bin/activate" con il tuo percorso)

    source ./venv/bin/activate
  2. Esegui l'aggiornamento

    curl https://bootstrap.pypa.io/get-pip.py | python
  3. Riavvia l'istanza di PyCharm e controlla l'interprete Python in Preference .


2
Questo ha funzionato per me! Ho dovuto aggiungere sudonella parte anteriore a causa di errori negati permesso. Grazie!
Simar,

34
Richiede sudo per funzionare: curl https://bootstrap.pypa.io/get-pip.py | sudo python
Wallace,

2
@Simar @Wallace sì, può richiedere sudose non in un ambiente virtuale. Aggiunto quel bit anche nella risposta ora.
Anupam,

1
Se non ti trovi in ​​un ambiente virtuale, potresti dover specificare il percorso del tuo binario python, come menziona Ilya di seguito
Chris

2
Su OSX ha funzionato meglio per mecurl https://bootstrap.pypa.io/get-pip.py | sudo -H python3
nick fox,

26

Ma se il curlcomando stesso non riesce con errore o "versione del protocollo di avviso tlsv1" persiste anche dopo l'aggiornamento pip, significa che la versione della libreria OpenSSL sottostante del sistema operativo < 1.0.1o la versione Python < 2.7.9(o < 3.4in Python 3) non supporta il protocollo TLS 1.2 più recente che pipdeve connettersi a PyPI da circa un anno fa . Puoi facilmente controllarlo nell'interprete Python:

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

Il AttributeError(invece del previsto '5') indica che il sslmodulo stdlib di Python , compilato con la vecchia libreria openssl, non ha il supporto per il protocollo TLSv1.2 (anche se la libreria openssl può o potrebbe essere aggiornata in seguito).

Fortunatamente, può essere risolto senza aggiornare Python (e l'intero sistema), installando manualmente pacchetti Python extra: la guida dettagliata dettagliata è disponibile qui su StackOverflow .

Nota, curle pipe wgettutto dipende dalla stessa libreria OpenSSL per stabilire connessioni SSL (usa il $ openssl versioncomando). libcurl supporta TLS 1.2 dalla versione 7.34 del ricciolo , ma le versioni precedenti del ricciolo dovrebbero essere in grado di connettersi se si avesse OpenSSL versione 1.0.2 (o successive).


PS
Per Python 3 , utilizza python3e pip3ovunque (a meno che tu non sia in un sistema venv / virtualenv), incluso il curlcomando dall'alto :
$ curl https://bootstrap.pypa.io/get-pip.py | python3 --user


4
Ho anche capito che dovevo correre pip3, non solo pip: controlla la versione con il comando -Vper assicurarti di eseguire il pip giusto !!
Jan

9

Seguire la risposta di @ Anupam su OS X mi ha causato il seguente errore, indipendentemente dalle autorizzazioni con cui l'ho eseguito:

Impossibile installare i pacchetti a causa di un EnvironmentError: [Errno 13] Autorizzazione negata: ...

Ciò che alla fine ha funzionato è stato scaricare un nuovo pacchetto pip (9.0.3) da PyPI direttamente dal mio browser - https://pypi.org/simple/pip/ , estrarre il contenuto e quindi installare il pacchetto localmente:

pip install ./pip-9.0.3/

Ciò ha corretto i miei [SSL: TLSV1_ALERT_PROTOCOL_VERSION]errori.


7

La soluzione di @Anupam ha funzionato per me. Tuttavia, ho dovuto utilizzare sudoe specificare la posizione esatta del mio ambiente virtuale Python:

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

6

Per aggiornare la versione locale ho usato una leggera variante:

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

Questo problema si presenta se si mantengono pip e pacchetti nella directory home come descritto in questa sintesi .


5

La seguente soluzione ha funzionato per me:

brew install python2

È stato anche aggiornato pipalla versione 1.10.1


^ questo per quelli di noi che non usano il pitone predefinito su OSX. Immagino che la domanda non fosse specifica per OSX, ma comunque, se non usi Linux, questo funziona --- a meno che tu non sia contento di scrivere sul sistema installato Python.
vaso

Questo ha funzionato per me, io uso il pitone su OSX. La mia situazione è trascorsa una settimana nel tentativo di installare qualsiasi pacchetto pip e non è riuscita. Ho disinstallato pip e da questo momento non posso fare nulla fino a quando non ho ricevuto questo comando che ha installato pip per me. Grazie!
amm

3

Controlla la tua versione TLS:

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

Se la tua versione TLS è inferiore alla 1.2 devi aggiornarla poiché il repository PyPI è in un periodo di brownout di deprecare TLS iniziale.

Sorgente: è ora di aggiornare Python: TLS v1.2 sarà presto obbligatorio

Puoi aggiornare la versione TLS usando il seguente comando:

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

Questo dovrebbe risolvere il tuo problema. In bocca al lupo!

EDIT: è possibile scaricare i pacchetti utilizzando il proprio repository di pacchetti python privato indipendentemente dalla versione TLS. Repository di pacchetti Python privato


2

Questo ha funzionato per me. Aggiungi sudo prima di Python

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

2

Per gli utenti di Python2 WIN10:

1. Disinstallare Python accuratamente, includere tutte le cartelle.

2. Recupera e installa l'ultimo python-2.7.msi (versione 2.7.15)

3.Dopo il passaggio 2, è possibile che sia stato installato anche pip.

4.Ora, se il tuo sistema non è stato modificato, puoi usare pip per installare i pacchetti ora. La "versione del protocollo di avviso tlsv1" non apparirà.



2

Ho riscontrato anche questo problema. Il problema di fondo è che la libreria ssl nelle versioni Python 2.7 <2.7.9 non è più compatibile con il meccanismo pip.

Se stai utilizzando Windows e tu (come noi) non riesci facilmente a eseguire l'aggiornamento da una versione incompatibile di 2.7, FWIW, ho scoperto che se copi i seguenti file da un'altra installazione dell'ultima versione di Python (ad esempio Python 2.7. 15) su un'altra macchina per l'installazione:

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

"aggiornerà" efficacemente il tuo livello SSL a uno che è supportato; siamo stati quindi in grado di utilizzare nuovamente pip, anche per aggiornare pip.


2

Le risposte dell'installazione di pip tramite:

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

non ha funzionato per me come ho continuato a ottenere l'errore:

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

Ho dovuto installare pipmanualmente tramite:

  1. Vai alla pipdistribuzione sito di
  2. Scarica il tar.gz versione
  3. Decomprimi il file localmente e cd nella directory
  4. correre python setup.py install

1

Questo ha funzionato per me, ho installato l'ultima versione di pip e quindi installato la libreria ( ciscoconfparse ).

Aggiornamento pip:

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

1

myenv:

python 2.7.14

pip 9.0.1

mac osx 10.9.4


MySolution:

  1. scaricare get-pip.pymanualmente da https://packaging.python.org/tutorials/installing-packages/

  2. correre python get-pip.py


arbitri:

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

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

Scarica in modo sicuro get-pip.py [1]

Esegui python get-pip.py. [2] Questo installerà o aggiornerà pip. Inoltre, installerà setuptools e wheel se non sono già installati.

Assicurarsi che pip, setuptools e wheel siano aggiornati

Mentre pip da solo è sufficiente per l'installazione da archivi binari precostruiti, copie aggiornate degli strumenti di installazione e dei progetti delle ruote sono utili per garantire che sia possibile installare anche dagli archivi di origine:

python -m pip install --upgrade pip setuptools wheel


1

Ho anche riscontrato questo problema sul mio Windows 10 e ho provato tutte le risposte ma non ho risolto il mio problema.

C: \ python367 \ Scripts> pip install Flask

Flask di raccolta Impossibile trovare una versione che soddisfi il requisito Flask (dalle versioni:) Nessuna distribuzione corrispondente trovata per Flask

Successivamente, trovo che il file di configurazione del pip sia stato modificato. Quindi, ho impostato la pip.iniconfigurazione predefinita originale, rieseguo il comando pip e funziona per me!

In sintesi della mia soluzione:

  1. Controllare che pip.ini (di solito sotto il percorso C:\ProgramData\pip) sia stato modificato;

  2. In caso affermativo al passaggio 1, provare a ripristinare una configurazione predefinita.


1

O semplicemente la libreria richiesta non è nel repository. Sono un principiante di Python e tutti i consigli sull'aggiornamento di pip finalmente mostrati come fuorvianti. Ho dovuto solo esaminare https://pypi.org/ , trovando che la libreria (flusso d'aria nel mio caso) si è fermata su una versione precedente, dopo di che è stata rinominata. Sì, anche quella soluzione sciocca è anche possibile :-).


1

Per tutti gli utenti python3e pip3là fuori:

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

e quindi supponi di voler installare i panda

pip3 install pandas --user
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.