Come utilizzare pip su Windows dietro un proxy di autenticazione


90

Il mio computer esegue Windows dietro un proxy su un server Windows (usando Active Directory) e non riesco a capire come pipsuperarlo con (in python3). Ho provato a usare --proxy, ma è ancora solo un timeout. Ho anche provato a impostare un timeout lungo (60s), ma non ha fatto differenza. Le mie impostazioni proxy sono corrette e le ho confrontate con quelle che sto usando con successo in TortoiseHG per assicurarmene.

Ci sono altri trucchi che qualcuno sa che posso provare, o c'è qualche limitazione per pipquanto riguarda i proxy di Windows?

Aggiornamento: i miei tentativi falliti hanno coinvolto la ricerca di pypi. Ho appena provato a installare effettivamente qualcosa e ha funzionato. La ricerca però non riesce ancora. Questo indica un bug pipo funzionano in modo diverso?

Risposte:


107

Ho provato 2 opzioni che funzionano entrambe sul proxy autenticato NTLM della mia azienda. L'opzione 1 è usare--proxy http://user:pass@proxyAddress:proxyPort

Se hai ancora problemi, suggerirei di installare un servizio di autenticazione proxy (io uso CNTLM ) e puntare pip su di esso, ovvero qualcosa di simile--proxy http://localhost:3128


1
Lo strumento CNTLM è mantenuto attivamente e sembra funzionare molto bene.
Michał Fita

6
Non sono riuscito a farlo funzionare, non importa tutti i tentativi che ho fatto
eusoubrasileiro

2
Se hai caratteri speciali nella tua password o nome utente, esegui semplicemente l'escape con \ prima del carattere speciale. Funziona bene.
Arockia

ho capito bene che stai dicendo a pip di inviare la richiesta al proxy, autenticandosi con l'utente e la password forniti tramite una connessione http? Ciò significa che la tua password verrà inviata non crittografata al server proxy, giusto !? Mi sembra un grosso rischio per la sicurezza o mi sto perdendo qualcosa?
Robert

Ha funzionato per me con un firewall Microsoft Forefront
Raúl Salinas-Monteagudo

64

Mi ci sono volute un paio d'ore per capirlo, ma alla fine l'ho fatto funzionare usando CNTLM e in seguito l'ho fatto funzionare solo con un file di configurazione pip. Ecco come l'ho fatto funzionare con il file di configurazione pip ...

Soluzione:

1. In Windows vai alla directory del tuo profilo utente (es. C: \ Users \ Sync) e crea una cartella denominata " pip "

2. Crea un file denominato " pip.ini " in questa directory (Es. C: \ Users \ Sync \ pip \ pip.ini) e inserisci quanto segue:

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

Sostituisci [nome dominio] , [nome utente] , [password] , [indirizzo proxy] e [porta proxy] con le tue informazioni.

Nota, se il tuo [nome dominio] , [nome utente] o [password] contiene caratteri speciali, devi codificare in percentuale | codificarli .

3. A questo punto sono stato in grado di eseguire " pip install " senza problemi.

Spero che funzioni anche per gli altri!

PS: questo potrebbe rappresentare un problema di sicurezza a causa della memorizzazione della password in testo normale. Se questo è un problema, considera l'impostazione di CNTLM utilizzando questo articolo (consente di utilizzare la password con hash invece del testo normale). Successivamente impostare proxy = 127.0.0.1:3128nel file "pip.ini" di cui sopra.


2
Maggiori informazioni sulla posizione di pip.ini possono essere trovate qui . È possibile impostare PIP_CONFIG_FILEla variabile di ambiente in modo che punti al file
pip.ini

1
Lo adoro!!!! quindi pulito - ricorda solo che la maggior parte dei proxy ti consente di inserire manualmente la tua password. Non lasciare MAI la tua password in chiaro!
avgvstvs

1
Un'altra impostazione globale molto importante che può essere aggiunta qui è il sito mirror, ad esempio, aggiungere "index-url = pypi.tuna.tsinghua.edu.cn/simple " aumenterebbe molto la velocità di download dei pip nella RPC Cina. E il file corrispondente sotto Linux è ~ / .pip / pip.conf
TingQian LI

4
cos'è [nome di dominio]?
Alex B

1
@AlexB, [nome di dominio] si riferisce al nome di dominio di Windows
Mike Pennington,

45

Ecco come l'ho impostato:

  1. Apri il prompt dei comandi (CMD) come amministratore.
  2. Esporta le impostazioni del proxy:

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

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

  3. Installa il pacchetto che desideri installare:

    pip install PackageName

Per esempio:

Esempio


4
Questa è sicuramente la prima cosa da provare. Python è multipiattaforma e questo è l'equivalente di ciò che normalmente facciamo su Linux. Ha avuto problemi su Windows (dietro lo stesso proxy) in cui l' --proxyargomento non lo avrebbe affatto, ma l'approccio standard env var ha funzionato la prima volta. Per la cronaca, abbiamo anche impostato no_proxyper evitare che altre richieste interne provino a uscire tramite il proxy.
randomsock

non funziona per me su win10. utilizzare uno strumento console emulatore come cygwino cmdere poi farlo nel modo Linux: export http_proxy=<proxy>e export https_proxy=<proxy>poi basta farepip install <package>
Bucky

Questo ha funzionato per me, ma il --proxyflag della riga di comando non ha mai funzionato. Windows 10.
AmbroseChapel

15

Ho riscontrato lo stesso problema su Windows 7. Sono riuscito a farlo funzionare creando una cartella "pip" con un file "pip.ini" al suo interno. Ho inserito questa cartella in "C: \ Users \ {my.username} \ AppData \ Roaming", perché secondo la documentazione di Python:

Su Windows il file di configurazione è% APPDATA% \ pip \ pip.ini

Nel file pip.ini ho solo:

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

Quindi nessun nome utente: password. E funziona benissimo.


1
Nel mio caso funziona solo se metto il mio nome utente e la password in chiaro in questo file ...: / Perché tutto il resto dal CMD funziona come "ping XYZ". Perché pip non utilizza le impostazioni di IE?
hmrc87

7

Ho riscontrato un problema simile e ho scoperto che la mia azienda utilizza l'autenticazione proxy NTLM. Se vedi questo errore nel tuo pip.log, questo è probabilmente il problema:

Impossibile recuperare l'URL http://pypi.python.org/simple/pyreadline : HTTP Errore 407: autenticazione proxy richiesta (ISA Server richiede l'autorizzazione per soddisfare la richiesta. L'accesso al filtro proxy Web è negato).

NTLMaps può essere utilizzato per interfacciarsi con il server proxy NTLM diventando un proxy intermedio.

Scarica NTLMAP, aggiorna il server.cfg incluso, esegui il file main.py, quindi punta l'impostazione proxy di pip su 127.0.0.1 :.

Avevo anche bisogno di modificare questi valori predefiniti nel server.cfgfile in:

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/


1

Potresti anche incontrare problemi con i certificati del tuo proxy. Ci sono molte risposte qui su come recuperare il certificato del tuo proxy.

Su un host Windows, per consentire a pip di cancellare il proxy, potresti voler impostare una variabile d'ambiente come:

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

Puoi anche usare l' --certargomento a PIPcon lo stesso risultato.


1

Ho avuto lo stesso problema su un ambiente Windows remoto. Ho provato molte soluzioni trovate qui o su altri post simili ma niente ha funzionato. Infine, la soluzione era abbastanza semplice. Ho dovuto impostare NO_PROXYcon cmd:

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

Devi usare le virgolette doppie e impostare NO_PROXYle maiuscole. Puoi anche aggiungere NO_PROXYcome variabile d'ambiente invece di impostarla ogni volta che usi la console.

Spero che questo aiuti se qualsiasi altra soluzione pubblicata qui funziona.


1

installa cntlm: Cntlm: Fast NTLM Authentication Proxy in C

Config cntlm.ini:

Nome utente ob66759

Dominio NAM

Password segreta

Proxy proxy1.net:8080

Proxy proxy2.net:8080

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

Ascolta 3128

Consenti 127.0.0.1

#il tuo IP

Consenti 10.106.18.138

avviarlo:

cntlm -v -c cntlm.ini

Ora in 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

lavori!

Puoi anche nascondere la password: https://stormpoopersmith.com/2012/03/20/using-applications-behind-a-corporate-proxy/


1

lo stesso problema su Windows10 e le soluzioni successive non funzionano per me.

utilizzare uno strumento console emulatore come cygwine poi farlo nel modo di default di Linux:

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

e le cose stanno funzionando bene.


sotto Windows 10, con l'autenticazione del proxy, questo funziona per me: utilizzando cntlm come proxy intermedio, quindi al prompt di msdos: "set https_proxy = localhost: 3128" e quindi "pip install -U setuptools == 41.0.1"
mrtexaz
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.