Можно ли обойтись с помощью «pip install --cert»?


21

Попытка выяснить, есть ли способ, которым я могу избежать использования флага --cert для pip, когда я устанавливаю пакеты на работе. Существует некоторая проблема с прокси, которая позволяет мне загружать пакеты, которые мне нужны, только когда я предоставляю этот флаг, несмотря на добавление и запуск mycert.crtфайла ./usr/local/share/ca-certificatessudo update-ca-certificates

Пример сообщений, которые я вижу:

$ 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

Это можно решить, используя вместо этого:

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

Однако я бы предпочел не делать этого (так как я уверен, что другие приложения сталкиваются с этой проблемой).

Я использую Linux Mint 15 (хотя ранее у меня были очень похожие проблемы с Ubuntu 12.04), версия 1.4.1.


Это может быть потенциальной копией этого stackoverflow.com/questions/19377045/… .. Я не уверен, какова политика агрегирования и т. Д.
Райан

Ответы:


9

Вы можете установить это через файл конфигурации pip, который находится в Windows $HOME/.pip/pip.confили %APPDATA%\pip\pip.iniв Windows:

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

Этот файл позволяет вам установить в основном все флаги, которые использует pip. Полная документация находится по адресу https://pip.pypa.io/en/latest/user_guide/#configuration.


2
Я думаю, что ваш комментарий к моему оригинальному сообщению приводит к реальному ответу, который заключается в том, что pip не использует системные сертификаты. Это хорошее решение, хотя оно сталкивается с проблемами при переключении между рабочей и домашней средой (через VPN). Больше проблема с сертификатом, чем решение, хотя.
Ян Ли

1
Обновлена ​​ссылка на конфигурацию: pip.pypa.io/en/latest/user_guide.html#configuration
секвойя

5

Для меня ни один из обходных путей файла конфигурации не работал. Я использую пип 1.5.4 на Ubuntu 14.04

То, что в конечном итоге у меня сработало, это сначала установить сертификат в системе (для меня это будет на Ubuntu)

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

Предыдущий автоматически обновляет файл пакета (при проверке внизу /etc/ssl/certs/ca-certificates.crtвы должны увидеть тот же сертификат, что и вmy_cert.crt )

Теперь используйте этот путь в PIP_CERT. И добавить его в мой .bashrc:

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

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ : Я уже опубликовал этот ответ в SO (тот же ответ, что и в «в конечном итоге дублированная ссылка выше», но в начале я не нашел другой (в конечном итоге дублированный ответ) ... так что если кто-то, как я, попадет сюда первым, тогда это может помочь.

Может быть, я нарушаю какие-то правила, чтобы публиковать один и тот же ответ дважды, один в SO, а другой в суперпользователе. Если так, извините за это.


2

Это работало для меня без необходимости знать, где находится файл конфигурации:

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

Я считаю, что вам нужна версия 10+, которую вы можете найти с помощью:

 python -m pip --version

Вывод команды config set затем выводит имя файла конфигурации для вашего удобства

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.