Posso usar o "pip install --cert"?

21

Tentando descobrir se existe uma maneira de evitar o uso do sinalizador --cert ao pip quando estou instalando pacotes no trabalho. Há algum problema com o proxy que apenas permite que eu baixe os pacotes necessários quando forneço esse sinalizador, apesar de adicionar e executar o mycert.crtarquivo ./usr/local/share/ca-certificatessudo update-ca-certificates

Um exemplo das mensagens que estou vendo é:

$ 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

Isso pode ser resolvido com o uso de:

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

No entanto, eu preferiria não precisar fazer isso (pois tenho certeza que outros aplicativos se deparam com esse problema).

Estou executando o Linux Mint 15 (embora eu já tenha tido problemas muito semelhantes no Ubuntu 12.04), versão 1.4.1 do pip.

Ian Lee
fonte
Esta poderia ser uma duplicata potencial deste stackoverflow.com/questions/19377045/... .. eu não tenho certeza qual é a política para agregar etc.
Ryan

Respostas:

9

Você pode definir isso através do arquivo de configuração do pip, que está no $HOME/.pip/pip.confou %APPDATA%\pip\pip.inino Windows:

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

Esse arquivo permite definir basicamente todos os sinalizadores usados ​​pelo pip. A documentação completa está em https://pip.pypa.io/en/latest/user_guide/#configuration

Ryan
fonte
2
Eu acho que seu comentário no meu post original leva à resposta real, que é que o pip não usa os certificados do sistema. Esta é uma boa solução, apesar de ter problemas quando estou alternando entre os ambientes de trabalho e doméstico (por VPN). Mais um problema com o certificado do que com a solução.
Ian Lee
11
Atualizado link para configuração: pip.pypa.io/en/latest/user_guide.html#configuration
sequoia
5

Para mim, não as soluções alternativas do arquivo de configuração funcionaram. Estou usando o pip 1.5.4 no Ubuntu 14.04

O que funcionou para mim foi instalar o certificado no sistema primeiro (para mim no ubuntu seria)

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

O anterior atualiza automaticamente o arquivo de pacote configurável (a verificação na parte inferior de /etc/ssl/certs/ca-certificates.crtvocê agora deve ver o mesmo certificado que em my_cert.crt)

Agora use esse caminho PIP_CERT. E adicione-o ao meu .bashrc:

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

AVISO LEGAL : Eu já publiquei esta resposta no SO (mesma resposta que no "link eventualmente duplicado acima", mas no começo eu não encontrei a outra (resposta eventualmente duplicada) ... então, se alguém como eu chegar aqui primeiro, então isso pode ajudar.

Talvez eu esteja quebrando algum tipo de regra para postar a mesma resposta duas vezes, uma no SO e a outra no superusuário. Se sim, desculpe por isso.

andzep
fonte
2

Isso funcionou para mim sem precisar saber onde fica o arquivo de configuração:

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

Eu acredito que você precisa da versão 10+ do pip, que você pode encontrar com:

 python -m pip --version

A saída do comando config set gera o nome do arquivo de configuração para sua conveniência

avatarofhope2
fonte