Posso andare in giro usando "pip install --cert"?


21

Sto cercando di capire se c'è un modo in cui posso evitare di usare il flag --cert per pip quando installo pacchetti al lavoro. C'è qualche problema con il proxy che mi permette di scaricare solo i pacchetti di cui ho bisogno quando fornisco quel flag, nonostante l'aggiunta e l'esecuzione del mycert.crtfile ./usr/local/share/ca-certificatessudo update-ca-certificates

Un esempio dei messaggi che vedo è:

$ pip install "virtualenv>=1.10.1"
Downloading/unpacking virtualenv>=1.10.1
  Could not fetch URL https://pypi.python.org/simple/virtualenv/: There was a problem confirming the ssl certificate: <urlopen error [Errno 1] _ssl.c:504: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed>
  Will skip URL https://pypi.python.org/simple/virtualenv/ when looking for download links for virtualenv>=1.10.1
  Could not fetch URL https://pypi.python.org/simple/: There was a problem confirming the ssl certificate: <urlopen error [Errno 1] _ssl.c:504: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed>
  Will skip URL https://pypi.python.org/simple/ when looking for download links for virtualenv>=1.10.1
  Cannot fetch index base URL https://pypi.python.org/simple/
  Could not fetch URL https://pypi.python.org/simple/virtualenv/: There was a problem confirming the ssl certificate: <urlopen error [Errno 1] _ssl.c:504: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed>
  Will skip URL https://pypi.python.org/simple/virtualenv/ when looking for download links for virtualenv>=1.10.1
  Could not find any downloads that satisfy the requirement virtualenv>=1.10.1
Cleaning up...
No distributions at all found for virtualenv>=1.10.1
Storing complete log in /tmp/tmpwW5qXD

Questo può essere risolto utilizzando invece:

pip install --cert=/usr/local/share/ca-certificates/mycert.crt

Tuttavia, preferirei non doverlo fare (poiché sono sicuro che altre applicazioni si imbatteranno in questo problema).

Sto usando Linux Mint 15 (anche se in precedenza avevo problemi molto simili su Ubuntu 12.04), pip versione 1.4.1.


Questo potrebbe essere un potenziale duplicato di questo stackoverflow.com/questions/19377045/… .. Non sono sicuro di quale sia la politica per l'aggregazione ecc.
Ryan

Risposte:


9

Puoi impostarlo tramite il file di configurazione pip, che si trova in $HOME/.pip/pip.confo %APPDATA%\pip\pip.inisu Windows:

[global]
cert = /usr/local/share/ca-certificate/mycert.crt

Questo file consente di impostare sostanzialmente tutti i flag utilizzati da pip. La documentazione completa è disponibile su https://pip.pypa.io/en/latest/user_guide/#configuration


2
Penso che il tuo commento sul mio post originale porti alla vera risposta, ovvero che pip non usa i certificati di sistema. Questa è una buona soluzione, sebbene si verifichino problemi quando cambio da ambiente di lavoro a casa (tramite VPN). Più un problema con il certificato che la soluzione però.
Ian Lee,

1
Link aggiornato alla configurazione: pip.pypa.io/en/latest/user_guide.html#configuration
sequoia

5

Per me, non ha funzionato le soluzioni alternative al file di configurazione. Sto usando pip 1.5.4 su Ubuntu 14.04

Ciò che alla fine ha funzionato per me è installare prima il certificato sul sistema (per me su Ubuntu questo sarebbe)

sudo cp ~/my_cert.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates

Il precedente aggiorna automaticamente il file bundle (controllando nella parte inferiore di /etc/ssl/certs/ca-certificates.crtte ora dovrebbe vedere lo stesso certificato di in my_cert.crt)

Ora usa quel percorso in PIP_CERT. E aggiungilo al mio .bashrc:

echo export PIP_CERT=/etc/ssl/certs/ca-certificates.crt >> ~/.bashrc

DISCLAIMER : ho già pubblicato questa risposta in SO (stessa risposta del "link eventualmente duplicato sopra", ma all'inizio non ho trovato l'altro (eventualmente risposta duplicata) ... quindi se qualcuno come me arriva prima qui, allora questo potrebbe aiutare.

Forse sto infrangendo una sorta di regole per pubblicare la stessa risposta due volte, una in SO e l'altra in superutente. Se è così, mi dispiace per quello.


2

Questo ha funzionato per me senza la necessità di sapere dove risiede il file di configurazione:

python -m pip config set global.cert C:\\Path\\cert.crt

Credo che tu abbia bisogno della versione pip 10+, che puoi trovare con:

 python -m pip --version

L'output del comando config set genera quindi il nome del file di configurazione per comodità dell'utente

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.