Cómo usar pip en Windows detrás de un proxy de autenticación

90

Mi computadora está ejecutando Windows detrás de un proxy en un servidor de Windows (usando el directorio activo), y no puedo averiguar cómo hacerlo pip(en python3). He intentado usarlo --proxy, pero todavía solo se agota el tiempo de espera. También intenté establecer un tiempo de espera prolongado (60 s), pero eso no hizo ninguna diferencia. La configuración de mi proxy es correcta y la comparé con las que estoy usando con éxito en TortoiseHG para asegurarme.

¿Hay algún otro truco que alguien sepa que pueda probar o hay alguna limitación pipcon respecto a los proxies de Windows?

Actualización: Mis intentos fallidos involucraron la búsqueda de pypi. Intenté instalar algo y funcionó. Sin embargo, la búsqueda aún falla. ¿Esto indica un error pipo funcionan de manera diferente?

aquavitae
fuente

Respuestas:

107

He probado 2 opciones que funcionan en el proxy autenticado NTLM de mi empresa. La opción 1 es usar--proxy http://user:pass@proxyAddress:proxyPort

Si todavía tiene problemas, le sugiero que instale un servicio de autenticación de proxy (yo uso CNTLM ) y apunte pip a él, es decir, algo como--proxy http://localhost:3128

Russell
fuente
1
La herramienta CNTLM se mantiene activamente y parece funcionar muy bien.
Michał Fita
6
No pude hacerlo funcionar, no importa todas las tentativas que hice
eusoubrasileiro
2
Si tiene caracteres especiales en su contraseña o nombre de usuario, simplemente escape con \ antes del carácter especial. Funciona bien.
Arockia
¿Entiendo correctamente que le está diciendo a pip que envíe la solicitud al proxy, autenticándose con el usuario y la contraseña dados a través de una conexión http? Eso significa que su contraseña se enviará sin cifrar al servidor proxy, ¿verdad? ¿Me parece un gran riesgo de seguridad o me estoy perdiendo algo?
Robert
Me funcionó con un firewall de Microsoft Forefront
Raúl Salinas-Monteagudo
65

Me tomó un par de horas resolver esto, pero finalmente lo puse en funcionamiento usando CNTLM y luego lo hice funcionar con solo un archivo de configuración pip. Así es como lo hice funcionar con el archivo de configuración pip ...

Solución:

1. En Windows, navegue hasta el directorio de su perfil de usuario (Ej. C: \ Users \ Sync) y cree una carpeta llamada " pip "

2. Cree un archivo llamado " pip.ini " en este directorio (Ej. C: \ Users \ Sync \ pip \ pip.ini) e ingrese lo siguiente en él:

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

Reemplace [nombre de dominio] , [nombre de usuario] , [contraseña] , [dirección de proxy] y [puerto de proxy] con su propia información.

Tenga en cuenta que si su [nombre de dominio] , [nombre de usuario] o [contraseña] tiene caracteres especiales, debe codificar en porcentaje | codificarlos .

3. En este punto pude ejecutar " pip install " sin problemas.

¡Ojalá esto funcione para otros también!

PD: Esto puede representar un problema de seguridad debido a que su contraseña se almacena en texto sin formato. Si esto es un problema, considere configurar CNTLM usando este artículo (permite usar una contraseña con hash en lugar de texto sin formato). A continuación, establezca proxy = 127.0.0.1:3128el archivo "pip.ini" mencionado anteriormente.

Sincronizar
fuente
2
Puede encontrar más información sobre la ubicación de pip.ini aquí . Puede configurar PIP_CONFIG_FILEla variable de entorno para que apunte al archivo
pip.ini
1
¡¡¡¡Quiéralo!!!! tan limpio, solo recuerde que la mayoría de los proxies le permitirán ingresar manualmente su contraseña. ¡NUNCA deje su contraseña en texto sin cifrar!
avgvstvs
1
Otra configuración global muy importante que se puede agregar aquí es el sitio espejo, por ejemplo, agregar "index-url = pypi.tuna.tsinghua.edu.cn/simple " aumentaría mucho la velocidad de descarga de pip en la República Popular China. Y el archivo correspondiente en Linux es ~ / .pip / pip.conf
TingQian LI
4
¿Qué es [nombre de dominio]?
Alex B
1
@AlexB, [nombre de dominio] se refiere a su nombre de dominio de Windows
Mike Pennington
45

Así es como lo configuré:

  1. Abra el símbolo del sistema (CMD) como administrador.
  2. Exporta la configuración del proxy:

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

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

  3. Instale el paquete que desea instalar:

    pip install PackageName

Por ejemplo:

Ejemplo

Heinrich Cloete
fuente
4
Definitivamente, esto es lo primero que debe intentar. Python es multiplataforma, y ​​esto es el equivalente a lo que hacemos normalmente en Linux. Tuve problemas en Windows (detrás del mismo proxy) donde el --proxyargumento simplemente no lo tendría en absoluto, pero el enfoque estándar de env var funcionó la primera vez. Para el registro, también nos configuramos no_proxypara evitar otras solicitudes internas que intentan salir a través del proxy.
randomsock
no me funciona en win10. utilizar una herramienta de consola como emulador cygwino cmdery luego hacerlo de la manera Linux: export http_proxy=<proxy>y export https_proxy=<proxy>y luego simplemente hacerpip install <package>
Bucky
Esto funcionó para mí, pero la --proxybandera de la línea de comandos nunca lo hizo. Windows 10.
AmbroseChapel
15

Me encontré con el mismo problema en Windows 7. Me las arreglé para hacerlo funcionar creando una carpeta "pip" con un archivo "pip.ini" dentro. Puse esta carpeta dentro de "C: \ Users \ {my.username} \ AppData \ Roaming", porque de acuerdo con la documentación de Python:

En Windows, el archivo de configuración es% APPDATA% \ pip \ pip.ini

En el archivo pip.ini solo tengo:

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

Entonces no hay nombre de usuario: contraseña. Y está funcionando bien.

stann1
fuente
1
En mi caso, esto solo funciona si pongo mi nombre de usuario y contraseña en texto sin cifrar en este archivo ...: / ¿Por qué todo lo demás de la CMD funciona como "ping XYZ"? ¿Por qué pip no usa la configuración de IE?
hmrc87
7

Tuve un problema similar y descubrí que mi empresa usa autenticación de proxy NTLM. Si ve este error en su pip.log, probablemente este sea el problema:

No se pudo obtener la URL http://pypi.python.org/simple/pyreadline : Error HTTP 407: Se requiere autenticación de proxy (El servidor ISA requiere autorización para cumplir con la solicitud. Se deniega el acceso al filtro de proxy web).

NTLMaps se puede utilizar para interactuar con el servidor proxy NTLM convirtiéndose en un proxy intermedio.

Descargue NTLMAP, actualice el server.cfg incluido, ejecute el archivo main.py, luego apunte la configuración del proxy de pip a 127.0.0.1 :.

También necesitaba cambiar estos valores predeterminados en el server.cfgarchivo a:

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
fuente
1

También puede tener problemas con los certificados de su proxy. Aquí hay muchas respuestas sobre cómo recuperar el certificado de su proxy.

En un host de Windows, para permitir que pip borre su proxy, es posible que desee establecer una variable de entorno como:

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

También puede usar el --certargumento to PIPcon el mismo resultado.

cincypiper
fuente
1

Tuve el mismo problema en un entorno de Windows remoto. Probé muchas soluciones que se encuentran aquí o en otras publicaciones similares, pero nada funcionó. Finalmente, la solución fue bastante simple. Tuve que configurar NO_PROXYcon cmd:

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

Tienes que usar comillas dobles y poner NO_PROXYen mayúsculas. También puede agregar NO_PROXYuna variable de entorno en lugar de configurarla cada vez que use la consola.

Espero que esto ayude si alguna otra solución publicada aquí funciona.

Wanderer conectado
fuente
1

instalar cntlm: Cntlm: Fast NTLM Authentication Proxy en C

Configurar cntlm.ini:

Nombre de usuario ob66759

Dominio NAM

Secreto de contraseña

Proxy proxy1.net:8080

Proxy proxy2.net:8080

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

Escuchar 3128

Permitir 127.0.0.1

#tu dirección Ip

Permitir 10.106.18.138

iniciarlo:

cntlm -v -c cntlm.ini

Ahora en 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

¡trabajos!

También puede ocultar la contraseña: https://stormpoopersmith.com/2012/03/20/using-applications-behind-a-corporate-proxy/

Alex B
fuente
1

El mismo problema en Windows10 y las soluciones anteriores no funcionan para mí.

use una herramienta de consola de emulador como cygwiny luego hágalo de la manera predeterminada de Linux:

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

y las cosas están funcionando bien.

Bucky
fuente
en Windows 10, con proxy de autenticación, esto funciona para mí: usando cntlm como proxy intermedio, luego en el indicador de msdos: "set https_proxy = localhost: 3128" y luego "pip install -U setuptools == 41.0.1"
mrtexaz