Como usar o pip no Windows por trás de um proxy de autenticação

90

Meu computador está executando o Windows atrás de um proxy em um servidor Windows (usando o diretório ativo), e não consigo descobrir como lidar com isso com pip(em python3). Eu tentei usar --proxy, mas ainda assim é apenas o tempo limite. Também tentei definir um tempo limite longo (60s), mas isso não fez diferença. Minhas configurações de proxy estão corretas e eu as comparei com aquelas que estou usando com sucesso no TortoiseHG para ter certeza.

Há algum outro truque que alguém conheça que eu possa tentar, ou há alguma limitação em piprelação aos proxies do Windows?

Atualização: Minhas tentativas fracassadas envolveram pesquisar pypi. Acabei de tentar instalar algo e funcionou. A busca ainda falha. Isso indica um bug pipou eles funcionam de forma diferente?

aquavitae
fonte

Respostas:

107

Eu tentei 2 opções que funcionam no proxy autenticado NTLM da minha empresa. A opção 1 é usar--proxy http://user:pass@proxyAddress:proxyPort

Se você ainda estiver tendo problemas, sugiro instalar um serviço de autenticação de proxy (eu uso CNTLM ) e apontar pip para ele, ou seja, algo como--proxy http://localhost:3128

Russell
fonte
1
A ferramenta CNTLM é mantida ativamente e parece funcionar muito bem.
Michał Fita
6
Não consegui fazer funcionar, independentemente de todas as tentativas que fiz
eusoubrasileiro
2
Se você tiver caracteres especiais em sua senha ou nome de usuário, basta escapar com \ antes do caractere especial. Funciona bem.
Arockia
entendi corretamente que você está dizendo ao pip para enviar a solicitação ao proxy, autenticando-se com o usuário e senha fornecidos por meio de uma conexão http? Isso significa que sua senha será enviada sem criptografia para o servidor proxy, certo !? Parece um grande risco de segurança para mim ou estou perdendo alguma coisa?
Robert,
Funcionou para mim com um firewall Microsoft Forefront
Raúl Salinas-Monteagudo,
64

Levei algumas horas para descobrir isso, mas finalmente consegui fazê-lo funcionar usando CNTLM e depois fiz com que funcionasse apenas com um arquivo de configuração pip. Aqui está como eu fiz funcionar com o arquivo de configuração do pip ...

Solução:

1. No Windows, navegue até o diretório do seu perfil de usuário (Ex. C: \ Usuários \ Sincronizar) e crie uma pasta chamada " pip "

2. Crie um arquivo chamado " pip.ini " neste diretório (Ex. C: \ Users \ Sync \ pip \ pip.ini) e digite o seguinte nele:

    [global]
    trusted-host = pypi.python.org
                   pypi.org
                   files.pythonhosted.org
    proxy = http://[domain name]%5C[username]:[password]@[proxy address]:[proxy port]

Substitua [nome de domínio] , [nome de usuário] , [senha] , [endereço de proxy] e [porta de proxy] por suas próprias informações.

Observe, se seu [nome de domínio] , [nome de usuário] ou [senha] tiver caracteres especiais, você deve codificar por cento | codifique- os.

3. Nesse ponto, consegui executar o " pip install " sem problemas.

Espero que isso funcione para outras pessoas também!

PS: Isso pode representar uma preocupação de segurança por ter sua senha armazenada em texto simples. Se isso for um problema, considere configurar o CNTLM usando este artigo (permite o uso de senha com hash em vez de texto simples). Posteriormente, defina proxy = 127.0.0.1:3128no arquivo "pip.ini" mencionado acima.

Sincronizar
fonte
2
Mais sobre a localização do pip.ini pode ser encontrado aqui . Você pode definir PIP_CONFIG_FILEa variável de ambiente para apontar para o arquivo
pip.ini
1
Adoro!!!! tão limpo - lembre-se de que a maioria dos proxies permite que você insira sua senha manualmente. NUNCA deixe sua senha em texto puro!
média de
1
Outra configuração global muito importante pode ser adicionada aqui é o site espelho, por exemplo, adicionar "index-url = pypi.tuna.tsinghua.edu.cn/simple " aumentaria muito a velocidade de download do pip na China da RPC. E o arquivo correspondente no Linux é ~ / .pip / pip.conf
TingQian LI
4
o que é [nome de domínio]?
Alex B
1
@AlexB, [nome de domínio] refere-se ao seu nome de domínio do Windows
Mike Pennington
45

É assim que eu configurei:

  1. Abra o prompt de comando (CMD) como administrador.
  2. Exporte as configurações de proxy:

    set http_proxy=http://username:password@proxyAddress:port

    set https_proxy=https://username:password@proxyAddress:port

  3. Instale o pacote que deseja instalar:

    pip install PackageName

Por exemplo:

Exemplo

Heinrich Cloete
fonte
4
Esta é definitivamente a primeira coisa a tentar. Python é multiplataforma, e isso é o equivalente ao que normalmente fazemos no Linux. Teve problemas no Windows (por trás do mesmo proxy) onde o --proxyargumento simplesmente não o teria, mas a abordagem env var padrão funcionou na primeira vez. Para registro, também no_proxyevitamos que outras solicitações internas tentem sair pelo proxy.
randomsock
não funciona para mim no win10. usar uma ferramenta de console emulador como cygwinou cmdere, em seguida, fazê-lo da forma como o Linux: export http_proxy=<proxy>e export https_proxy=<proxy>em seguida, basta fazerpip install <package>
Bucky
Isso funcionou para mim, mas o --proxysinalizador de linha de comando nunca funcionou. Windows 10.
AmbroseChapel
15

Eu encontrei o mesmo problema no Windows 7. Eu consegui fazer funcionar criando uma pasta "pip" com um arquivo "pip.ini" dentro dela. Coloquei esta pasta dentro de "C: \ Users \ {my.username} \ AppData \ Roaming", porque de acordo com a documentação do Python:

No Windows, o arquivo de configuração é% APPDATA% \ pip \ pip.ini

No arquivo pip.ini, tenho apenas:

[global]
proxy = [proxy address]:[proxy port]

Portanto, nenhum nome de usuário: senha. E está funcionando muito bem.

Stann1
fonte
1
No meu caso, isso só funciona se eu colocar meu nome de usuário e senha em texto simples neste arquivo ...: / Por que todo o resto do CMD está funcionando como "ping XYZ". Por que o pip não está usando as configurações do IE?
hmrc87 de
7

Tive um problema semelhante e descobri que minha empresa usa autenticação de proxy NTLM. Se você vir esse erro em seu pip.log, provavelmente este é o problema:

Não foi possível buscar o URL http://pypi.python.org/simple/pyreadline : Erro HTTP 407: Autenticação de proxy necessária (O ISA Server requer autorização para atender à solicitação. O acesso ao filtro de proxy da Web foi negado.)

Os NTLMaps podem ser usados ​​para fazer interface com o servidor proxy NTLM, tornando-se um proxy intermediário.

Baixe NTLMAPs, atualize o server.cfg incluído, execute o arquivo main.py e aponte a configuração de proxy de pip para 127.0.0.1 :.

Também precisei alterar esses valores padrão no server.cfgarquivo para:

LM_PART:1
NT_PART:1

# Highly experimental option. See research.txt for details.
# LM - 06820000
# NT - 05820000
# LM + NT - 
NTLM_FLAGS: 07820000

http://ntlmaps.sourceforge.net/

Monkut
fonte
1

Você também pode ter problemas com os certificados do seu proxy. Existem muitas respostas aqui sobre como recuperar o certificado do seu proxy.

Em um host Windows, para permitir que o pip limpe o seu proxy, você pode definir uma variável de ambiente como:

PIP_CERT=C:\path\to\certificate\file\in\pem\form\myproxycert.pem

Você também pode usar o --certargumento para PIPcom o mesmo resultado.

cincypiper
fonte
1

Eu tive o mesmo problema em um ambiente remoto do Windows. Tentei várias soluções encontradas aqui ou em outros posts semelhantes, mas nada funcionou. Por fim, a solução foi bastante simples. Tive que definir NO_PROXYcom cmd:

set NO_PROXY="<domain>\<username>:<password>@<host>:<port>"
pip install <packagename>

Você deve usar aspas duplas e definir NO_PROXYpara maiúsculas. Você também pode adicionar NO_PROXYuma variável de ambiente em vez de defini-la cada vez que usar o console.

Espero que isso ajude se alguma outra solução postada aqui funcionar.

EL Manu
fonte
1

instalar cntlm: Cntlm: Proxy de autenticação NTLM rápido em C

Config cntlm.ini:

Nome de usuário ob66759

Domínio NAM

Senha secreta

Proxy proxy1.net:8080

Proxy proxy2.net:8080

NoProxy localhost, 127.0.0. *, 10. *, 192.168. *

Ouça 3128

Permitir 127.0.0.1

#Seu ip

Permitir 10.106.18.138

inicie:

cntlm -v -c cntlm.ini

Agora em cmd.exe:

pip install --upgrade pip --proxy 127.0.0.1:3128

Collecting pip
  Downloading https://files.pythonhosted.
44c8a6e917c1820365cbebcb6a8974d1cd045ab4/

    100% |███████████████████████████████
Installing collected packages: pip
  Found existing installation: pip 9.0.1
    Uninstalling pip-9.0.1:
      Successfully uninstalled pip-9.0.1

Successfully installed pip-10.0.1

trabalho!

Você também pode ocultar a senha: https://stormpoopersmith.com/2012/03/20/using-applications-behind-a-corporate-proxy/

Alex B
fonte
1

mesmo problema no windows10 e soluções acima não estão funcionando para mim.

use uma ferramenta de console de emulador como cygwine, em seguida, faça isso da maneira padrão do Linux:

export http_proxy=<proxy>
export https_proxy=<proxy>
pip install <package>

e as coisas estão funcionando bem.

bucky
fonte
no Windows 10, com proxy de autenticação, isso funciona para mim: usando cntlm como proxy intermediário, depois no prompt msdos: "set https_proxy = localhost: 3128" e "pip install -U setuptools == 41.0.1"
mrtexaz