¿Puedo moverme usando "pip install --cert"?

21

Tratando de averiguar si hay una manera de evitar el uso del indicador --cert para pip cuando estoy instalando paquetes en el trabajo. Hay un problema con el proxy que solo me permite descargar los paquetes que necesito cuando proporciono ese indicador, a pesar de agregar el mycert.crtarchivo /usr/local/share/ca-certificatesy ejecutarlo sudo update-ca-certificates.

Un ejemplo de los mensajes que estoy viendo es:

$ 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

Esto se puede resolver usando en su lugar:

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

Sin embargo, preferiría no tener que hacerlo (ya que estoy seguro de que otras aplicaciones se topan con este problema).

Estoy ejecutando Linux Mint 15 (aunque anteriormente tuve problemas muy similares en Ubuntu 12.04), pip versión 1.4.1.

Ian Lee
fuente
Esto podría ser un duplicado potencial de este stackoverflow.com/questions/19377045/... .. No estoy seguro de cuál es la política de agregación, etc.
Ryan

Respuestas:

9

Se puede establecer que a través del archivo de configuración de PIP, que está en $HOME/.pip/pip.confo %APPDATA%\pip\pip.inien Windows:

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

Este archivo le permite configurar básicamente todos los indicadores que utiliza pip. La documentación completa está en https://pip.pypa.io/en/latest/user_guide/#configuration

Ryan
fuente
2
Creo que su comentario en mi publicación original conduce a la respuesta real, que es que pip no usa los certificados del sistema. Esta es una buena solución, aunque tiene problemas cuando cambio entre los entornos de trabajo y hogar (a través de VPN). Sin embargo, es más un problema con el certificado que la solución.
Ian Lee
1
Enlace actualizado a la configuración: pip.pypa.io/en/latest/user_guide.html#configuration
sequoia
5

Para mí, ninguna de las soluciones alternativas del archivo de configuración funcionó. Estoy usando pip 1.5.4 en Ubuntu 14.04

Lo que finalmente funcionó para mí es instalar el certificado en el sistema primero (para mí en ubuntu sería)

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

Lo anterior actualiza automáticamente el archivo de paquete (la comprobación en la parte inferior de /etc/ssl/certs/ca-certificates.crtusted ahora debería ver el mismo certificado que en my_cert.crt)

Ahora usa ese camino PIP_CERT. Y agrégalo a mi .bashrc:

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

DESCARGO DE RESPONSABILIDAD : ya publiqué esta respuesta en SO (la misma respuesta que en el 'enlace finalmente duplicado arriba', pero al principio no encontré la otra (respuesta duplicada eventualmente) ... así que si alguien como yo llega aquí primero, entonces esto podría ayudar.

Tal vez estoy rompiendo algún tipo de reglas para publicar la misma respuesta dos veces, una en SO y la otra en superusuario. Si es así, perdón por eso.

andzep
fuente
2

Esto funcionó para mí sin necesidad de saber dónde vive el archivo de configuración:

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

Creo que necesita la versión 10+ de pip, que puede encontrar con:

 python -m pip --version

La salida del comando config set luego muestra el nombre del archivo de configuración para su conveniencia

avatarofhope2
fuente