Czy mogę się poruszać za pomocą „pip install --cert”?

21

Próbuję dowiedzieć się, czy istnieje sposób, aby uniknąć używania flagi --cert do pipowania podczas instalowania pakietów w pracy. Istnieje pewien problem z serwerem proxy, który pozwala mi tylko pobierać pakiety, których potrzebuję, gdy dostarczę tę flagę, pomimo dodania mycert.crtpliku /usr/local/share/ca-certificatesi uruchomienia sudo update-ca-certificates.

Przykładem komunikatów, które widzę, jest:

$ 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

Można to rozwiązać za pomocą:

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

Jednak wolałbym tego nie robić (ponieważ jestem pewien, że inne aplikacje napotykają ten problem).

Używam Linux Mint 15 (chociaż wcześniej miałem bardzo podobne problemy z Ubuntu 12.04), wersja pip 1.4.1.

Ian Lee
źródło
Może to być potencjalna kopia tego stackoverflow.com/questions/19377045/ ... .. Nie jestem pewien, jaka jest polityka agregacji itp.
Ryan,

Odpowiedzi:

9

Można to ustawić za pomocą pliku konfiguracyjnego pip, który znajduje się w systemie Windows $HOME/.pip/pip.conflub %APPDATA%\pip\pip.iniw systemie Windows:

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

Ten plik pozwala ustawić w zasadzie wszystkie flagi używane przez pip. Pełna dokumentacja znajduje się na https://pip.pypa.io/en/latest/user_guide/#configuration

Ryan
źródło
2
Myślę, że twój komentarz do mojego oryginalnego postu prowadzi do prawdziwej odpowiedzi, a mianowicie, że pip nie używa certyfikatów systemowych. To dobre rozwiązanie, choć napotyka problemy podczas przełączania między środowiskiem pracy a domowym (przez VPN). Jednak bardziej problem z certyfikatem niż rozwiązaniem.
Ian Lee
1
Zaktualizowany link do konfiguracji: pip.pypa.io/en/latest/user_guide.html#configuration
sequoia
5

Dla mnie nie zadziałało obejście pliku konfiguracyjnego. Używam pip 1.5.4 na Ubuntu 14.04

To, co ostatecznie zadziałało, to najpierw zainstalowanie certyfikatu w systemie (dla mnie na Ubuntu byłoby to)

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

Poprzedni automatycznie aktualizuje plik pakietu (sprawdzanie na dole /etc/ssl/certs/ca-certificates.crtpowinno teraz zobaczyć ten sam certyfikat, co w my_cert.crt)

Teraz użyj tej ścieżki w PIP_CERT. I dodaj to do mojego .bashrc:

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

ZASTRZEŻENIE : Już opublikowałem tę odpowiedź w SO (ta sama odpowiedź, co w „w końcu zduplikowanym linku powyżej”, ale na początku nie znalazłem drugiej (w końcu zduplikowanej odpowiedzi)), więc jeśli ktoś taki jak ja dotrze tu pierwszy, to może pomóc.

Może łamię jakieś zasady, aby dwa razy zamieścić tę samą odpowiedź, jedną w SO, a drugą w superużytkowniku. Jeśli tak, przepraszam za to.

andzep
źródło
2

Działa to dla mnie bez potrzeby wiedzieć, gdzie znajduje się plik konfiguracyjny:

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

Uważam, że potrzebujesz pip w wersji 10+, którą możesz znaleźć w:

 python -m pip --version

Dane wyjściowe polecenia config set następnie wyświetlają nazwę pliku konfiguracyjnego dla Twojej wygody

avatarofhope2
źródło