Usando pip detrás de un proxy con CNTLM

280

Estoy tratando de usar pip detrás de un proxy en el trabajo.

Una de las respuestas de esta publicación sugirió usar CNTLM . Lo instalé y configuré según esta otra publicación , pero la ejecución cntlm.exe -c cntlm.ini -I -M http://google.comdio el error Connection to proxy failed, bailing out.

También probé pip install -–proxy=user:pass@localhost:3128(el puerto CNTLM predeterminado) pero eso aumentó Cannot fetch index base URL http://pypi.python.org/simple/. Claramente, algo pasa con el proxy.

¿Alguien sabe cómo verificar de manera más definitiva si CNTLM está configurado correctamente o si hay otra forma de evitarlo? Sé que también puede establecer la http_proxyvariable de entorno como se describe aquí, pero no estoy seguro de qué credenciales poner. ¿De dónde cntlm.ini?

Robar
fuente
2
Debe conocer la dirección IP de su proxy y número de puerto y configurarlo en consecuencia en su cntlm.ini (también su nombre de usuario y contraseña para el proxy si tiene uno)
número5
2
Escribí un blog sobre cómo configurar y usar CNTLM. La publicación es para Ubuntu y para instalar Rails, pero creo que el proceso podría ser el mismo. Editar: lea este artículo sobre cómo configurar CNTLM para Windows, básicamente lo mismo con mi versión de Ubuntu. HTH
Annie Lagang

Respuestas:

74

Para configurar CNTLM para Windows, siga este artículo . Para Ubuntu, lea la publicación de mi blog .

Editar:

Básicamente, para usar CNTLM en cualquier plataforma, debe configurar su nombre de usuario y contraseña hash , antes de usarlo http://127.0.0.1:3128como proxy para su proxy principal.

  1. Edite la configuración y agregue información importante como dominio, nombre de usuario, contraseña y proxy principal.

  2. Generar contraseña hash.

    Ventanas cntlm –c cntlm.ini –H

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

  3. Elimine la contraseña de texto sin formato de la configuración y reemplácelas con las contraseñas generadas.

Para verificar si funciona:

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

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

Para obtener instrucciones más detalladas, consulte los enlaces anteriores.

Actualizar:

Solo por completo, pude configurar y usar CNTLM en Windows recientemente. Encontré un problema durante el proceso de sincronización de Kindle para PC debido a nuestro proxy y la instalación y configuración de CNTLM para Windows me solucionó ese problema. Consulte mi artículo para más detalles.

Annie Lagang
fuente
Si esta guía no resuelve su problema, intente ejecutar pip con la opción de línea de comandos --trusted-host pypi.python.orgque me sirvió.
Petr
1
Solo me gustaría agregar a esto, que en realidad no podía hacer que cntlm funcionara en Windows o Mac dentro de nuestro entorno corporativo, pero instalar Fiddler en una máquina Windows y usarlo como proxy resolvió el problema.
Dean Meehan
268

Con Ubuntu no pude hacer que la opción de proxy funcione como se anuncia, por lo que el siguiente comando no funcionó:

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

Pero exportar la https_proxyvariable de entorno (tenga en cuenta que https_proxyno http_proxy) hizo el truco:

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

luego

sudo -E pip install somepackage
Sameer Vaidya
fuente
1
configurar https_proxy también hace el trabajo en Mac OS X.
Bharadwaj Srigiriraju
44
lo mismo aquí, --proxy no funcionó, tuve que especificar AMBOS http_proxy Y https_proxy (Debian detrás de un cortafuegos corp)
marc.guenther 12/12/2013
34
Gracias por incluir -Een el sudocomando, que constantemente me arroja cuando me pregunto por qué los programas no están viendo mi ENV.
AndyC
11
-E agregué a sudo hizo el truco para mí. Conserva la variable de entorno "http_proxy" que configuré anteriormente. ¡Gracias!
imagineer
77
pip --proxy = someproxy-url: port install some-package funcionó para mí en Win8.1 con pip 6.1.1
zenpoy
96

En Windows no olvides configurar

SET HTTPS_PROXY=<proxyHost>:<proxyPort>

para lo que necesitaba establecer

pip install pep8
k7sleeper
fuente
Funciona en fedora también con 'export http_proxy = <proxy_host>: <port>'
Damien
55
Esto funcionó para mí, pero solo en la forma SET HTTPS_PROXY = ht tps: // user: pass @ addr: port [menos el espacio que tuve que agregar para evitar que el desbordamiento de la pila lo impidiera] y tuve que reemplazar caracteres especiales en mi contraseña con hexadecimal en forma% nn
Seth
Esto funcionó para mí. antes, estaba haciendo: SET HTTPS_PROXY=username:password@<proxyHost>:<proxyPort>y no estaba funcionando.
Zahra
¿Alguien tiene una explicación de por qué se necesita la variable de entorno y cómo la utiliza pip? Para conda es suficiente para configurar el proxy en el archivo .condarc.
maggie
1
Un ejemplo de llamada sería: SET HTTPS_PROXY = https://512893:Pass%[email protected]:6050para nombre de usuario 512893y contraseña pass#h98. Recuerde codificar url caracteres especiales en contraseña o nombre de usuario ( #en este caso). Tal vez también intente configurar la HTTP_PROXYbandera también.
Nuhman el
65

No me estaba funcionando. Tuve que usar https en el trabajo:

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

Para actualizar, agregue -U.

Hugo Salvador
fuente
1
Esta parece ser la solución más simple para Windows, que no requiere paquetes adicionales.
JE Carter II
3
Si necesita usar una contraseña:pip install somepackage --proxy https://user:password@mydomain:port
Daniel R Carletti
Y si no sabes qué userponer, tal vez sea porque no hay nada que poner:pip install --proxy=https://mydomain:port somepackage
Olivier
45

Puede continuar usando pip sobre HTTPS agregando el certificado raíz de su empresa al archivo cacert.pem en su carpeta de paquetes de sitio / pip. Luego configure pip para usar su proxy agregando las siguientes líneas a ~ / pip / pip.conf (o ~ \ pip \ pip.ini si está en Windows):

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

Eso es. No es necesario usar paquetes de terceros o renunciar a HTTPS (por supuesto, el administrador de su red aún puede ver lo que está haciendo).

djmoch
fuente
Esto funcionó para mí, pero solo después de instalar pip manualmente, lo que significa que no puede usar get-pip.py inicialmente
Luke Dunstan
2
Para conocer la ubicación de pip.ini, consulte pip.pypa.io/en/latest/user_guide.html#configuration En Windows encontré cacert en "C: \ Python34 \ Lib \ site-packages \ pip_vendor \ request \ cacert.pem"
lib
2
Esto funcionó para mí, pero me dio tienen un archivo pip.config así que tuve que crear uno en ~/.pip/pip.confcontinuación export PIP_CONFIG_FILE=/root/.pip/pip.confy mi instalación funcionó! ¡Gracias!
Rhyuk
2
Gracias, me pusiste en el camino correcto! FYI, para Python 3.7 en el archivo de certificados de pip de Windows 7 aparentemente se encuentra en [Python37]\Lib\site-packages\pip\_vendor\certifi\cacert.pem. Exporte el certificado de intercepción SSL de su empresa en formato .cer Base64, pegue la clave pública en ese archivo y listo, soporte https completo detrás del proxy corporativo.
Mike Strobel
2
Su ubicación pip ini en Windows puede ser AppData/Roaming/pip/pip.ini...
Erik Aronesty
27

para ventanas; configura tu proxy en el símbolo del sistema como
set HTTP_PROXY=domain\username:password@myproxy:myproxyport

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

namit
fuente
3
¿Qué pasa si la contraseña tiene caracteres especiales como! y @.
Ravi Kumar
1
escapar caracteres especiales con el bash escape char: \
Adam
1
No puede escapar '@' en su contraseña con el carácter de escape (), debe codificarlo en URL a% 40 en la cadena de proxy.
Deep-B
1
Establecer esta variable de entorno parece no tener efecto en pip en mi máquina
Jack M
26

Esto funcionó para mí (en Windows a través de CMD):

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

Esto es lo que me funcionó en

Anand
fuente
44
Esto es realmente útil cuando solo está temporalmente detrás de un proxy. También tuve que agregar mi nombre de usuario y contraseña a la sintaxis:pip --proxy http://username:password@proxy-host:proxy-port install <package>
Terrabits
14

Bajo nuestra política de seguridad, no puedo usar https con pypi, la inspección SSL reescribe los certificados, esto rompe la seguridad incorporada de pip para www.python.org. El hombre en el medio es el administrador de la red.

Entonces necesito usar http simple . Para hacerlo, necesito anular el proxy del sistema y el pypi predeterminado:

bin/pip install --proxy=squidproxy:3128 -i http://www.python.org/pypi --upgrade "SQLAlchemy>=0.7.10"
bbaassssiiee
fuente
2
Esto ya no funciona. PyPi ahora lo reenvía automáticamente a https.
Martin M.
La inspección SSL no parece funcionar; ¿Podría ser debido a la fijación de claves o al secreto de reenvío?
bbaassssiiee
@SamuelHarmer. SecurityTiene cuatro sílabas. Demasiados para Trump.
javadba
2
Creo que @bbaassssiiee puede estar diciendo que su pip se rompió (en 2013) con HTTPS porque su proxy corporativo reescribe todos los certificados para usar su propio certificado raíz (para que puedan descifrar todo el tráfico SSL) y pip falla la verificación del certificado. Por supuesto, en 2017, pip evita automáticamente la verificación de certificados cuando se usa --proxy. De todos modos, muchos servidores proxy corporativos cambian efectivamente todo su tráfico a no SSL porque, incluso cuando navega a sitios SSL, está enviando un proxy a través de un proxy HTTP no SSL.
cowbert
13

Abra el símbolo del sistema de Windows.

Establecer variables de entorno proxy.

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

Instale paquetes de Python usando proxy en el mismo símbolo del sistema de Windows.

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

En Windows 7:

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

es decir:

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

Teléfono como punto de acceso móvil / conexión USB

Si tengo muchos problemas para encontrar un camino a través del proxy corporativo, me conecto a la web a través de mi teléfono (punto de acceso inalámbrico si tengo wifi, conexión USB si no) y hago un rápido pip install.

Puede que no funcione para todas las configuraciones, pero debería ayudar a la mayoría de las personas en un apuro.

Tommy O'Dell
fuente
8

En Ubuntu 14.04 LTS

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

Salud

Rene Cejas Bolecek
fuente
7

Tuve el mismo problema: detrás de un proxy corporativo con autenticación en el trabajo, no podía tener trabajo de pip, así como Sublime Text 2 (bueno, funcionó con la configuración personalizada de mi configuración de proxy). Para pip (y lo intentaré en git), lo resolví instalando cntlm proxy. Fue muy simple de configurar:

  1. Editar cntlm.ini
  2. Edite los campos "Nombre de usuario", "Dominio", "Contraseña"
  3. Agregue una línea "Proxy", con su configuración de proxy: server:port
  4. Asegúrese de que la línea "NoProxy" integre "localhost" (así por defecto)
  5. Tenga en cuenta el puerto predeterminado: 3128
  6. Ahorre y eso es todo.

Para probar que funciona, simplemente inicie una nueva herramienta de línea de comando e intente:

pip install django --proxy=localhost:3128

Eso funcionó para mí. Espero que esto te ayudará.

Johan Chouquet
fuente
6

Podría lograr esto ejecutando:

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

Estoy usando Python 3.7.3 dentro de un proxy corporativo.

Nicolas Castro
fuente
5

si desea actualizar pip por proxy, puede usar (por ejemplo en Windows):

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

Para usuarios de Windows: si desea instalar Flask-MongoAlchemy, use el siguiente código

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

Si se está conectando a Internet detrás de un proxy, puede haber problemas al ejecutar algunos comandos.

Establezca las variables de entorno para la configuración del proxy en el símbolo del sistema de la siguiente manera:

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

En CentOS (en realidad creo que todas las distribuciones de Linux son similares) ejecute

env|grep http_proxy

y

env|grep https_proxy

compruebe cuál es el resultado de esos comandos (deben contener sus direcciones proxy).

Si las salidas están vacías o tienen valores incorrectos, modifíquelos, por ejemplo:

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

Ahora intenta buscar e instalar algunos paquetes usando pip:

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

y en realidad nunca conocí el caso cuando no funcionó. Para algunos sistemas necesitas ser root (sudo no es suficiente).

Paweł Wojtal
fuente
2

Advertencia, hay algo muy malo con el comando "pip search". El comando de búsqueda no utiliza la configuración de proxy independientemente de la forma en que se pasa.

Estaba tratando de resolver el problema solo probando el comando "buscar", y encontré esta publicación con una explicación detallada sobre ese error: https://github.com/pypa/pip/issues/1104

Puedo confirmar que el error permanece con pip 1.5.6 en Debian 8 con python 2.7.9. El comando "pip install" funciona de maravilla.

Pivert
fuente
2

Recibí el error:

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

(El puerto del servidor proxy es el puerto ssh reenviado localhost:3128).

Tuve que configurar los proxies http y https para que funcione:

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/redirige a https://pypi.python.org/simplepero pipel error no te dice.

fadedbee
fuente
2

Tampoco soy un experto en esto, pero lo hice funcionar estableciendo la all_proxyvariable en el archivo ~ / .bashrc. Para abrir el ~/.bashrcarchivo y editarlo desde una terminal, ejecute los siguientes comandos,

gedit ~/.bashrc &

Agregue siguiente al final del archivo,

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

Luego, abra una nueva terminal o ejecute siguiente en la misma terminal,

source ~/.bashrc

Solo la configuración http_proxyy las https_proxyvariables no son suficientes para un uso simple pip install somepackage. Aunque de alguna manera sudo -E pip install somepackagefunciona, pero esto me ha dado algún problema en caso de que esté usando una instalación local de Anaconda en la carpeta de mis usuarios.

PD: estoy usando Ubuntu 16.04.

bytestorm
fuente
2

¿Qué tal simplemente hacerlo localmente? Lo más probable es que pueda descargar desde la fuente https a través de su navegador

  1. Descargue el archivo de su módulo (mysql-connector-python-2.0.3.zip / gz ... etc).
  2. Extraerlo e ir al directorio extraído donde se encuentra setup.py y llamar:

    C:\mysql-connector-python-2.0.3>python.exe setup.py install
Mándalo
fuente
66
Pero luego tienes que ir y obtener todas las dependencias (y sus dependencias, y ...) tú mismo
jonrsharpe
1

Esto es lo que funciona para mí:

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

Establezca la siguiente variable de entorno: export PIP_PROXY=http://web-proxy.mydomain.com

FTM
fuente
1

Si está utilizando Linux, como root:

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

Cuando usa env, exporta la variable https_proxy para la ejecución actual del comando pip install.

$ web_proxy_ip es el nombre de host o IP de su Proxy $ web_proxy_port es el puerto

Adail Junior
fuente
0

para Windows, vaya a C: /ProgramData/pip/pip.ini y establezca

[global]

proxy = http: // YouKnowTheRest

con tus datos de proxy. Esto configura permanentemente el proxy para pip.

Kvothan
fuente
0

Un enfoque más simple podría ser:

  1. Cree una carpeta llamada "pip" en su $HOMEdirectorio.
  2. Cree un archivo llamado "pip.ini" (Windows) o "pip.conf" (Linux) en el directorio creado en el paso 1
  3. Copie y pegue las siguientes líneas debajo de pip.ini / pip.conf:

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