Usando pip atrás de um proxy com CNTLM

279

Estou tentando usar pip atrás de um proxy no trabalho.

Uma das respostas deste post sugeriu o uso do CNTLM . Eu instalei e o configurei por esse outro post , mas a execução cntlm.exe -c cntlm.ini -I -M http://google.comdeu o erro Connection to proxy failed, bailing out.

Eu também tentei pip install -–proxy=user:pass@localhost:3128(a porta CNTLM padrão), mas isso aumentou Cannot fetch index base URL http://pypi.python.org/simple/. Claramente algo está acontecendo com o proxy.

Alguém sabe como verificar de forma mais definitiva se o CNTLM está configurado corretamente ou se existe outra maneira de contornar isso? Eu sei que você também pode definir a http_proxyvariável de ambiente como descrito aqui , mas eu não tenho certeza do que credenciais para colocar em. Os queridos de cntlm.ini?

Roubar
fonte
2
Você precisa saber o endereço IP do seu número de proxy ea porta e configurá-lo de acordo com sua cntlm.ini (também seu nome de usuário e senha para o proxy se você tiver um)
Number5
2
Eu escrevi um blog sobre como configurar e usar o CNTLM. O post é para o Ubuntu e para a instalação do Rails, mas acho que o processo pode ser o mesmo. Edit: Leia este artigo sobre como configurar o CNTLM para Windows, basicamente o mesmo da minha versão do Ubuntu. HTH.
Annie Lagang

Respostas:

74

Para configurar o CNTLM para Windows, siga este artigo . Para o Ubuntu, leia minha postagem no blog .

Editar:

Basicamente, para usar o CNTLM em qualquer plataforma, você precisa configurar seu nome de usuário e senha com hash , antes de usar http://127.0.0.1:3128como proxy para o proxy pai.

  1. Edite a configuração e adicione informações importantes como domínio, nome de usuário, senha e proxy pai.

  2. Gere uma senha com hash.

    janelas cntlm –c cntlm.ini –H

    Ubuntu / Linux cntlm -v -H -c /etc/cntlm.conf

  3. Remova a senha de texto sem formatação da configuração e substitua-a pelas senhas geradas.

Para verificar se está funcionando:

janelas cntlm –M http://www.google.com

Ubuntu / Linux sudo cntlm -M http://www.google.com/

Para instruções mais detalhadas, consulte os links acima.

Atualizar:

Por uma questão de integridade, pude configurar e usar o CNTLM no Windows recentemente. Encontrei um problema durante o processo de sincronização do Kindle para PC por causa do nosso proxy e a instalação e configuração do CNTLM for Windows corrigiu esse problema para mim. Consulte o meu artigo para mais detalhes.

Annie Lagang
fonte
Se este guia não resolver seu problema, tente executar o pip com a opção de linha de comando, --trusted-host pypi.python.orgque fez o truque para mim.
Petr
1
Gostaria apenas de acrescentar que não consegui realmente fazer o cntlm funcionar no Windows ou Mac dentro de nosso ambiente corporativo, mas instalando o Fiddler em uma máquina Windows e usando-o como proxy resolveu o problema.
Dean Meehan
267

Com o Ubuntu, não consegui que a opção de proxy funcionasse como anunciado - portanto, o comando a seguir não funcionou:

sudo pip --proxy http://web-proxy.mydomain.com install somepackage

Mas exportar a https_proxyvariável de ambiente (observe que https_proxynão é http_proxy) fez o truque:

export https_proxy=http://web-proxy.mydomain.com

então

sudo -E pip install somepackage
Sameer Vaidya
fonte
1
definir https_proxy também faz o trabalho no Mac OS X.
Bharadwaj Srigiriraju
4
mesmo aqui, --proxy não funcionou, eu tinha que especificar http_proxy E https_proxy (Debian atrás de um firewall corp)
marc.guenther
34
Obrigado por incluir -Eno sudocomando, que sempre me impressiona quando me pergunto por que os programas não estão vendo meu ENV.
AndyC
11
-E adicionado ao sudo fez o truque para mim. Ele preserva a variável de ambiente "http_proxy" que eu configurei anteriormente. Obrigado!
usar o seguinte código
7
pip --proxy = someproxy-url: port install algum-pacote trabalhou para mim em Win8.1 com pip 6.1.1
zenpoy
96

No Windows, não esqueça de definir

SET HTTPS_PROXY=<proxyHost>:<proxyPort>

o que eu precisava definir

pip install pep8
k7sleeper
fonte
Obras no Fedora também com 'export http_proxy = <proxy_host>: <porta>'
Damien
5
Isso funcionou para mim, mas apenas no formato SET HTTPS_PROXY = ht tps: // usuário: pass @ addr: port [menos o espaço que eu precisei adicionar para evitar que o stackoverflow o ilumine] e tive que substituir caracteres especiais na minha senha com hexadecimal no formato% nn
Seth
isso funcionou para mim. antes eu estava fazendo: SET HTTPS_PROXY=username:password@<proxyHost>:<proxyPort>e não estava funcionando.
Zahra
Alguém tem uma explicação por que a variável de ambiente é necessária e como é usada pelo pip? Para conda, basta configurar o proxy no arquivo .condarc.
Maggie #
1
Um exemplo de chamada seria: SET HTTPS_PROXY = https://512893:Pass%[email protected]:6050para nome de usuário 512893e senha pass#h98. Lembre-se de codificar url caracteres especiais em senha ou nome de usuário ( #neste caso). Talvez também tente definir a HTTP_PROXYbandeira também.
Nuhman
65

Não estava funcionando para mim. Eu tive que usar https no trabalho:

pip install --proxy=https://user@mydomain:port somepackage

Para atualizar, adicione -U.

Hugo Salvador
fonte
1
Essa parece ser a solução mais simples para o Windows, sem a necessidade de pacotes adicionais.
JE Carter II
3
Se você precisar usar uma senha:pip install somepackage --proxy https://user:password@mydomain:port
Daniel R Carletti
E se você não sabe o userque colocar, talvez seja porque não há como colocar:pip install --proxy=https://mydomain:port somepackage
Olivier
45

Você pode continuar usando o pip sobre HTTPS adicionando o certificado raiz da sua empresa ao arquivo cacert.pem na pasta site-packages / pip. Em seguida, configure o pip para usar seu proxy adicionando as seguintes linhas ao ~ / pip / pip.conf (ou ~ \ pip \ pip.ini se você estiver no Windows):

[global]
proxy = [user:passwd@]proxy.server:port

É isso aí. Não é necessário usar pacotes de terceiros ou abandonar o HTTPS (é claro, o administrador da rede ainda pode ver o que você está fazendo).

djmoch
fonte
Isso funcionou para mim, mas a instalação só depois manualmente pip, o que significa que você não pode usar get-pip.py inicialmente
Luke Dunstan
2
Para obter a localização do pip.ini, consulte pip.pypa.io/en/latest/user_guide.html#configuration Nas janelas, encontrei o cacert em "C: \ Python34 \ Lib \ pacotes de sites \ pip_vendor \ orders \ cacert.pem"
lib
2
Isso funcionou para mim, mas eu não tenho um arquivo pip.config então eu tive que criar um em ~/.pip/pip.confseguida, export PIP_CONFIG_FILE=/root/.pip/pip.confe minha instalação funcionou! Obrigado!
Rhyuk # 22/16
2
Obrigado, você me colocou no caminho certo! Para sua informação, para o Python 3.7 no arquivo de certificados do pip do Windows 7, aparentemente está localizado em [Python37]\Lib\site-packages\pip\_vendor\certifi\cacert.pem. Exporte o certificado de interceptação SSL da sua empresa no formato .cer Base64, cole a chave pública nesse arquivo e, voilà, suporte https completo por trás do proxy corporativo.
Mike Strobel
2
Sua localização ini pip no Windows pode ser AppData/Roaming/pip/pip.ini....
Erik Aronesty
27

para Windows; defina seu proxy no prompt de comando como
set HTTP_PROXY=domain\username:password@myproxy:myproxyport

exemplo:
set http_proxy=IND\namit.kewat:[email protected]:8880

namit
fonte
3
E se a senha tiver caracteres especiais como! e @.
Ravi Kumar
1
escape caracteres especiais com o bash escape char: \
Adam ''
1
Você não pode escapar de '@' na sua senha com o caractere de escape (); é necessário codificá-lo para% 40 na cadeia de proxy.
Deep-B
3
Eu precisava definir HTTP_PROXY = nome de usuário: senha @ myproxy: myproxyport definir HTTPS_PROXY = nome de usuário: senha @ myproxy: myproxyport
Seth
1
A definição dessa variável de ambiente parece não ter efeito sobre pip na minha máquina
Jack M
26

Isso funcionou para mim (no Windows via CMD):

pip install --proxy proxyserver:port requests
damian1baran
fonte
21
$ pip --proxy http://proxy-host:proxy-port install packagename

Isto é o que funcionou para mim em

Anand
fonte
4
Isso é realmente útil quando apenas temporariamente atrás de um proxy. Eu também tive que adicionar meu nome de usuário e senha à sintaxe:pip --proxy http://username:password@proxy-host:proxy-port install <package>
Terrabits
14

De acordo com nossa política de segurança, eu não posso usar https com pypi, a inspeção SSL reescreve certificados, ele quebra a segurança interna do pip para www.python.org. O homem do meio é o administrador da rede.

Então, eu preciso usar http simples . Para fazer isso, preciso substituir o proxy do sistema e o pypi padrão:

bin/pip install --proxy=squidproxy:3128 -i http://www.python.org/pypi --upgrade "SQLAlchemy>=0.7.10"
bbaassssiiee
fonte
2
Isso não funciona mais. O PyPi agora encaminha automaticamente para https.
Martin M.
A inspeção SSL parece não funcionar; poderia ser por causa da fixação de chaves ou encaminhamento de sigilo?
precisa saber é o seguinte
@SamuelHarmer. Securitytem quatro sílabas. Demais para Trump.
Javadba 27/06
2
Acho que @bbaassssiiee pode estar dizendo que seu pip quebrou (em 2013) com HTTPS porque seu proxy corporativo reescreve todas as certs para usar seu próprio certificado raiz (para que possam descriptografar todo o tráfego SSL) e o pip falha na verificação do certificado. Obviamente, em 2017, o pip evita automaticamente a verificação de certificado quando --proxy é usado. Muitos proxies corporativos já efetivamente alteram todo o seu tráfego para não SSL de qualquer maneira, porque mesmo ao navegar para sites SSL, você faz proxy por meio de proxy HTTP não SSL.
Cowbert
13

Abra o prompt de comando do Windows.

Defina variáveis ​​de ambiente proxy.

set http_proxy=http://user:password@proxy_ip:port
set https_proxy=https://user:password@proxy_ip:port

Instale pacotes Python usando proxy no mesmo prompt de comando do Windows.

pip install --proxy="user:password@proxy_ip:port" package_name
Jyoti Yadav
fonte
12

No Windows 7:

pip install --proxy DOMAIN\user:password@proxyaddress:port package

ou seja:

pip install --proxy BR\neo:p4ssw0rd@myproxyrocks.com.br:8080 virtualenv
Daniel
fonte
11

Telefone como ponto de acesso móvel / compartilhamento USB

Se tiver muita dificuldade para encontrar uma maneira de usar o proxy corporativo, conecto-me à Web pelo telefone (ponto de acesso sem fio se houver wifi, cabo USB, se não houver) e faça uma rápida pip install .

Pode não funcionar para todas as configurações, mas deve atrair a maioria das pessoas.

Tommy O'Dell
fonte
8

No Ubuntu 14.04 LTS

   sudo pip --proxy http://PROXYDOM:PROXYPORT install package

Felicidades

Rene Cejas Bolecek
fonte
7

Eu tive o mesmo problema: por trás de um proxy corporativo com autenticação no trabalho, eu não poderia ter um trabalho de pip e o Sublime Text 2 (bem, ele funcionou com a configuração personalizada das minhas configurações de proxy). Para o pip (e tentarei isso no git), resolvi instalando o proxy cntlm. Foi muito simples de configurar:

  1. Editar cntlm.ini
  2. Edite os campos "Nome de usuário", "Domínio", "Senha"
  3. Adicione uma linha "Proxy", com suas configurações de proxy: server:port
  4. Verifique se a linha "NoProxy" integra "localhost" (assim por padrão)
  5. Observe a porta padrão: 3128
  6. Salve e é isso.

Para testar isso funciona, basta iniciar uma nova ferramenta de linha de comando e tente:

pip install django --proxy=localhost:3128

Isso funcionou para mim. Espero que isso ajude você.

Johan Chouquet
fonte
6

Eu poderia conseguir isso executando:

pip install --proxy=http://user:pass@your.proxy.com:3128 package==version

Estou usando o Python 3.7.3 dentro de um proxy corporativo.

Nicolas Castro
fonte
5

se você deseja atualizar o pip por proxy, pode usar (por exemplo, no Windows):

python -m pip --proxy http://proxy_user:proxy_password@proxy_hostname:proxy_port insta
ll --upgrade pip
Nikolay Baranenko
fonte
4

Para usuários do Windows: se você deseja instalar o Flask-MongoAlchemy, use o seguinte código

pip install Flask-MongoAlchemy --proxy="http://example.com:port"**
Nitin Panwar
fonte
3

Se você estiver se conectando à Internet atrás de um proxy, pode haver um problema ao executar alguns comandos.

Defina as variáveis ​​de ambiente para a configuração do proxy no prompt de comandos, da seguinte maneira:

set http_proxy=http://username:password@proxyserver:proxyport
set https_proxy=https://username:password@proxyserver:proxyport
gii96
fonte
2

No CentOS (na verdade, acho que todas as distribuições Linux são semelhantes), execute

env|grep http_proxy

e

env|grep https_proxy

verifique qual é a saída desses comandos (eles devem conter seus endereços de proxy).

Se as saídas estiverem vazias ou tiverem valores incorretos, modifique-as, por exemplo:

export http_proxy=http://10.1.1.1:8080
export https_proxy=http://10.1.1.1:8080

Agora tente buscar e instalar alguns pacotes usando o pip:

pip --proxy http://10.1.1.1:8080 install robotframework

e, na verdade, nunca conheci o caso quando não funcionou. Para alguns sistemas, você precisa ser um root (sudo não é suficiente).

Paweł Wojtal
fonte
2

Aviso, há algo muito ruim com o comando "pip search". O comando search não usa a configuração de proxy, independentemente da maneira como está sendo transmitida.

Eu estava tentando descobrir o problema apenas tentando o comando "search" e encontrei este post com explicações detalhadas sobre esse bug: https://github.com/pypa/pip/issues/1104

Posso confirmar que o bug permanece no pip 1.5.6 no Debian 8 com python 2.7.9. O comando "pip install" funciona como um encanto.

Pivert
fonte
2

Eu recebi o erro:

chris@green:~$ sudo http_proxy=http://localhost:3128 pip install django==1.8.8 
Downloading/unpacking django==1.8.8
  Cannot fetch index base URL http://pypi.python.org/simple/
  Could not find any downloads that satisfy the requirement django==1.8.8
No distributions at all found for django==1.8.8
Storing complete log in /home/chris/.pip/pip.log

(A porta do servidor proxy é a porta ssh encaminhada para localhost:3128 ).

Eu tive que definir os proxies http e https para fazê-lo funcionar:

chris@green:~$ sudo http_proxy=http://localhost:3128 https_proxy=http://localhost:3128 pip install django==1.8.8
Downloading/unpacking django==1.8.8
  Downloading Django-1.8.8.tar.gz (7.3Mb): 7.3Mb downloaded
  Running setup.py egg_info for package django

    warning: no previously-included files matching '__pycache__' found under directory '*'
    warning: no previously-included files matching '*.py[co]' found under directory '*'
Installing collected packages: django
  Running setup.py install for django

    warning: no previously-included files matching '__pycache__' found under directory '*'
    warning: no previously-included files matching '*.py[co]' found under directory '*'
    changing mode of build/scripts-2.7/django-admin.py from 644 to 755
    changing mode of /usr/local/bin/django-admin.py to 755
    Installing django-admin script to /usr/local/bin
Successfully installed django
Cleaning up...

como http://pypi.python.org/simple/redireciona para o erro de https://pypi.python.org/simplebut pipnão informa.

fadedbee
fonte
2

Também não sou especialista nisso, mas o fiz funcionar definindo a all_proxyvariável no arquivo ~ / .bashrc. Para abrir o ~/.bashrcarquivo e editá-lo a partir de um terminal, execute os seguintes comandos:

gedit ~/.bashrc &

Adicione o seguinte no final do arquivo,

export all_proxy="http://x.y.z.w:port"

Em seguida, abra um novo terminal ou execute o seguinte no mesmo terminal,

source ~/.bashrc

Apenas a configuração http_proxye as https_proxyvariáveis ​​não são suficientes para o uso simples pip install somepackage. Embora de alguma formasudo -E pip install somepackage funcione, mas isso me deu algum problema no caso de eu estar usando uma instalação local do Anaconda na pasta dos meus usuários.

PS - Estou usando o Ubuntu 16.04.

bytestorm
fonte
2

Que tal apenas localmente? Provavelmente você pode fazer o download da fonte https através do seu navegador

  1. Faça o download do seu arquivo de módulo (mysql-connector-python-2.0.3.zip / gz ... etc).
  2. Extraia-o e vá para o diretório extraído onde setup.py está localizado e chame:

    C:\mysql-connector-python-2.0.3>python.exe setup.py install
Envie isto
fonte
6
Mas então você tem que ir e obter todas as dependências (e suas dependências, e ...) você mesmo
jonrsharpe
1

Isto é o que funciona para mim:

pip --proxy proxy url:port command package
Brock Vond
fonte
1

Defina a seguinte variável de ambiente: export PIP_PROXY=http://web-proxy.mydomain.com

FTM
fonte
1

Se você estiver usando Linux, como root:

env https_proxy=http://$web_proxy_ip:$web_proxy_port pip install something

Quando você usa o env, exporta a variável https_proxy para a execução atual do comando pip install.

$ web_proxy_ip é o nome do host ou o IP do seu proxy $ web_proxy_port é a porta

Adail Junior
fonte
0

para janelas, vá para C: /ProgramData/pip/pip.ini e defina

[global]

proxy = http: // YouKnowTheRest

com seus detalhes de proxy. Isso configura permanentemente o proxy para o pip.

Kvothan
fonte
0

Uma abordagem mais simples pode ser:

  1. Crie uma pasta chamada "pip" em seu $HOMEdiretório.
  2. Crie um arquivo chamado "pip.ini" (Windows) ou "pip.conf" (Linux) no diretório criado na etapa 1
  3. Copie e cole as seguintes linhas no arquivo pip.ini / pip.conf:

    [global]
    trusted-host = pypi.python.org
                   pypi.org
                   files.pythonhosted.org 
Jayant Kumar
fonte