browse - Impossibile installare i pacchetti Python




python pip database (10)

Sto cercando di installare una libreria Python usando 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?


Aggiornare pip come segue:

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

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

(Notare che l'aggiornamento di pip usando pip cioè pip install --upgrade pip anche l'aggiornamento di pip install --upgrade pip non lo aggiornerà correttamente. È solo un problema di pollo e uova. pip non funzionerà se non si usa 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 .


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


Ho provato tutte le correzioni esistenti e non funzionava per me

Reinstallo python 2.7 (installerò anche pip) scaricando .pkg su https://www.python.org/downloads/mac-osx/

funziona per me dopo l'installazione scaricato pkg


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.


La soluzione di @Anupam funzionato per me. Tuttavia, ho dovuto usare sudo e specificare la posizione esatta del mio ambiente virtuale Python:

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

Ma se il comando curl stesso fallisce con errore, o "versione del protocollo di avviso tlsv1" persiste anche dopo l'aggiornamento di pip , significa che la versione della libreria OpenSSL sottostante del sistema operativo < 1.0.1 o versione Python < 2.7.9 (o < 3.4 in Python 3 ) non supportano il protocollo TLS 1.2 più recente di cui pip deve 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'

AttributeError (invece del previsto '5') indica che il modulo ssl Python stdlib, 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 .

Nota, curl , pip e wget dipendono tutti dalla stessa libreria OpenSSL per stabilire connessioni SSL (usare il comando $ openssl version ). libcurl supporta TLS 1.2 dalla versione 7.34 ricciolo, ma le versioni precedenti del ricciolo should essere in grado di connettersi se si avesse OpenSSL versione 1.0.2 (o successive).

PS
Per Python 3 , utilizzare python3 e pip3 ovunque (a meno che non ci si trovi in ​​un file venv / virtualenv), incluso il comando curl above :
$ curl https://bootstrap.pypa.io/get-pip.py | python3 --user


Per aggiornare la versione locale ho usato una leggera variante:

brew install python2

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


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


Questo ha funzionato per me. Aggiungi sudo prima di Python

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

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 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 errori [SSL: TLSV1_ALERT_PROTOCOL_VERSION] .





ssl-certificate