Kann ich mich mit "pip install --cert" fortbewegen?

21

Ich versuche herauszufinden, ob es eine Möglichkeit gibt, die Verwendung des Flags --cert zum Pipen zu vermeiden, wenn ich Pakete bei der Arbeit installiere. Es gibt ein Problem mit dem Proxy, bei dem ich nur die Pakete herunterladen kann, die ich benötige, wenn ich dieses Flag gebe, obwohl die mycert.crtDatei hinzugefügt wurde /usr/local/share/ca-certificatesund ausgeführt wird sudo update-ca-certificates.

Ein Beispiel für die Nachrichten, die ich sehe, ist:

$ 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

Dies kann gelöst werden mit:

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

Ich würde es jedoch vorziehen, dies nicht zu tun (da ich sicher bin, dass andere Anwendungen auf dieses Problem stoßen).

Ich verwende Linux Mint 15 (obwohl ich zuvor unter Ubuntu 12.04 sehr ähnliche Probleme hatte), pip Version 1.4.1.

Ian Lee
quelle
Dies könnte ein potenzielles Duplikat dieser stackoverflow.com/questions/19377045/… sein . Ich bin nicht sicher, welche Richtlinien für die Aggregation usw. gelten.
Ryan

Antworten:

9

Sie können dies über die Pip-Konfigurationsdatei in $HOME/.pip/pip.confoder %APPDATA%\pip\pip.iniunter Windows einstellen :

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

Mit dieser Datei können Sie im Grunde alle Flags setzen, die von pip verwendet werden. Die vollständige Dokumentation finden Sie unter https://pip.pypa.io/en/latest/user_guide/#configuration

Ryan
quelle
2
Ich denke, Ihr Kommentar zu meinem ursprünglichen Beitrag führt zu der wirklichen Antwort, dass pip die Systemzertifikate nicht verwendet. Dies ist eine gute Lösung, obwohl beim Wechsel zwischen der Arbeits- und der Heimumgebung (über VPN) Probleme auftreten. Eher ein Problem mit dem Zertifikat als die Lösung.
Ian Lee
1
Aktualisierte Link zu Konfiguration: pip.pypa.io/en/latest/user_guide.html#configuration
Mammutbaum
5

Für mich hat keine der Problemumgehungen in der Konfigurationsdatei funktioniert. Ich benutze Pip 1.5.4 auf Ubuntu 14.04

Was letztendlich für mich funktioniert hat, ist, zuerst das Zertifikat auf dem System zu installieren (für mich auf Ubuntu wäre das).

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

Das vorherige Update aktualisiert die Bundle-Datei automatisch ( /etc/ssl/certs/ca-certificates.crtwenn Sie unten prüfen , sollte jetzt dasselbe Zertifikat wie in angezeigt werden my_cert.crt).

Verwenden Sie jetzt diesen Pfad in PIP_CERT. Und füge es zu meinem hinzu .bashrc:

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

HAFTUNGSAUSSCHLUSS : Ich habe diese Antwort bereits in SO gepostet (die gleiche Antwort wie im obigen "eventuell duplizierten Link"), aber am Anfang habe ich die andere (eventuell duplizierte Antwort) nicht gefunden ... also, wenn jemand wie ich zuerst hier ankommt, dann könnte das helfen.

Vielleicht verstoße ich gegen eine Regel, um dieselbe Antwort zweimal zu posten, eine in SO und die andere in Superuser. Wenn ja, tut mir das leid.

andzep
quelle
2

Dies funktionierte für mich, ohne dass ich wissen musste, wo sich die Konfigurationsdatei befindet:

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

Ich glaube, Sie brauchen pip Version 10+, die Sie mit finden können:

 python -m pip --version

Die Ausgabe des Befehls config set gibt dann den Namen der Konfigurationsdatei aus

avatarofhope2
quelle