Utilizzo di pip dietro un proxy con CNTLM


280

Sto cercando di usare pip dietro un proxy al lavoro.

Una delle risposte a questo post ha suggerito di usare CNTLM . L'ho installato e configurato per questo altro post , ma l'esecuzione ha cntlm.exe -c cntlm.ini -I -M http://google.comdato l'errore Connection to proxy failed, bailing out.

Ho anche provato pip install -–proxy=user:pass@localhost:3128(la porta CNTLM predefinita) ma che ha sollevato Cannot fetch index base URL http://pypi.python.org/simple/. Chiaramente qualcosa sta succedendo con il proxy.

Qualcuno sa come verificare più definitivamente se CNTLM è impostato correttamente o se esiste un altro modo per aggirare il problema? So che è possibile anche impostare la http_proxyvariabile d'ambiente come descritto qui , ma non sono sicuro di quello che le credenziali di mettere in. Quelli da cntlm.ini?


2
Devi conoscere l'indirizzo IP del tuo proxy e il numero di porta e impostarlo di conseguenza nel tuo cntlm.ini (anche il tuo nome utente e password per il proxy se ne hai uno)
numero

2
Ho scritto un blog su come impostare e utilizzare CNTLM. Il post è per Ubuntu e per l'installazione di Rails, ma penso che il processo potrebbe essere lo stesso. Modifica: leggi questo articolo su come configurare CNTLM per Windows, sostanzialmente lo stesso con la mia versione di Ubuntu. HTH.
Annie Lagang,

Risposte:


74

Per installare CNTLM per Windows, segui questo articolo . Per Ubuntu, leggi il mio post sul blog .

Modificare:

Fondamentalmente, per utilizzare CNTLM in qualsiasi piattaforma, è necessario impostare il nome utente e la password con hash , prima di utilizzarlo http://127.0.0.1:3128come proxy per il proxy principale.

  1. Modifica la configurazione e aggiungi informazioni importanti come dominio, nome utente, password e proxy principale.

  2. Genera password con hash.

    finestre cntlm –c cntlm.ini –H

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

  3. Rimuovere la password in testo semplice dalla configurazione e sostituirli con le password generate.

Per verificare se funziona:

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

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

Per istruzioni più dettagliate, vedere i collegamenti sopra.

Aggiornare:

Solo per completezza, recentemente sono stato in grado di configurare e utilizzare CNTLM in Windows. Ho riscontrato un problema durante il processo di sincronizzazione di Kindle per PC a causa del nostro proxy e l'installazione e la configurazione di CNTLM per Windows risolto il problema per me. Fare riferimento al mio articolo per maggiori dettagli.


Se questa guida non risolve il problema, prova a eseguire pip con l'opzione della riga di comando --trusted-host pypi.python.orgche ha fatto il trucco per me.
Petr

1
Vorrei solo aggiungere a questo, che in realtà non riuscivo a far funzionare cntlm su Windows o Mac nel nostro ambiente aziendale, ma l'installazione di Fiddler su un computer Windows e l'utilizzo come proxy ha risolto il problema.
Decano Meehan,

268

Con Ubuntu non sono riuscito a far funzionare l'opzione proxy come pubblicizzato, quindi il seguente comando non ha funzionato:

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

Ma l'esportazione della https_proxyvariabile d'ambiente (notare che https_proxynon lo è http_proxy) ha funzionato:

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

poi

sudo -E pip install somepackage

1
l'impostazione https_proxy fa il lavoro anche in Mac OS X.
Bharadwaj Srigiriraju,

4
stesso qui, --proxy non ha funzionato, ho dovuto specificare ENTRAMBI http_proxy E https_proxy (Debian dietro un firewall corp)
marc.guenther

34
Grazie per aver incluso -Enel sudocomando, che mi lancia costantemente quando mi chiedo perché i programmi non vedano il mio ENV.
AndyC,

11
-E aggiunto a sudo ha fatto il trucco per me. Conserva la variabile di ambiente "http_proxy" che ho impostato in precedenza. Grazie!
imagerhat quel

7
pip --proxy = someproxy-url: port install some-package ha funzionato per me in Win8.1 con pip 6.1.1
zenpoy

96

Sotto Windows non dimenticare di impostare

SET HTTPS_PROXY=<proxyHost>:<proxyPort>

quello che dovevo impostare

pip install pep8

Funziona su fedora anche con 'export http_proxy = <proxy_host>: <port>'
Damien

5
Questo ha funzionato per me, ma solo nella forma SET HTTPS_PROXY = ht tps: // user: pass @ addr: port [meno lo spazio che ho dovuto aggiungere per impedire a stackoverflow di confonderlo] e ho dovuto sostituire caratteri speciali nella mia password con esadecimale nella forma% nn
Seth

questo ha funzionato per me. prima, stavo facendo: SET HTTPS_PROXY=username:password@<proxyHost>:<proxyPort>e non funzionava.
Zahra,

Qualcuno ha una spiegazione del motivo per cui la variabile d'ambiente è necessaria e come viene utilizzata da pip? Per conda è sufficiente configurare il proxy nel file .condarc.
Maggie

1
Una chiamata di esempio sarebbe simile a: SET HTTPS_PROXY = https://512893:Pass%23h98@proxy.example.com:6050nome utente 512893e password pass#h98. Ricorda di url codificare caratteri speciali in password o nome utente ( #in questo caso). Forse prova anche a impostare la HTTP_PROXYbandiera.
Nuhman,

65

Non funzionava per me. Ho dovuto usare https al lavoro:

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

Per aggiornare, aggiungi -U.


1
Questa sembra la soluzione più semplice per Windows, che non richiede pacchetti aggiuntivi.
JE Carter II,

3
Se è necessario utilizzare una password:pip install somepackage --proxy https://user:password@mydomain:port
Daniel R Carletti,

E se non sai cosa usermettere, forse è perché non c'è nessuno da mettere:pip install --proxy=https://mydomain:port somepackage
Olivier

45

Puoi continuare a usare pip su HTTPS aggiungendo il certificato radice della tua azienda al file cacert.pem nella cartella site-pacchetti / pip. Quindi configura pip per usare il tuo proxy aggiungendo le seguenti righe a ~ / pip / pip.conf (o ~ \ pip \ pip.ini se sei su Windows):

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

Questo è tutto. Non è necessario utilizzare pacchetti di terze parti o rinunciare a HTTPS (ovviamente l'amministratore di rete può ancora vedere cosa stai facendo).


Questo ha funzionato per me, ma solo dopo aver installato manualmente pip, il che significa che inizialmente non è possibile utilizzare get-pip.py
Luke Dunstan,

2
Per la posizione di pip.ini vedi pip.pypa.io/it/latest/user_guide.html#configuration In Windows ho trovato cacert in "C: \ Python34 \ Lib \ site-pacchetti \ pip_vendor \ richieste \ cacert.pem"
lib

2
Questo ha funzionato per me ma non avevo un file pip.config, quindi ho dovuto crearne uno in ~/.pip/pip.confquel momento export PIP_CONFIG_FILE=/root/.pip/pip.confe la mia installazione ha funzionato! Grazie!
Rhyuk,

2
Grazie, mi hai messo sulla strada giusta! Cordiali saluti, per Python 3.7 sul file dei certificati pip di Windows 7 si trova apparentemente in [Python37]\Lib\site-packages\pip\_vendor\certifi\cacert.pem. Esporta il certificato di intercettazione SSL del tuo corp in formato .cer Base64, incolla la chiave pubblica in quel file e voilà, supporto https completo dietro il proxy aziendale.
Mike Strobel,

2
La posizione del pip ini su Windows potrebbe essere AppData/Roaming/pip/pip.ini....
Erik Aronesty,

27

per windows; imposta il proxy nel prompt dei comandi come
set HTTP_PROXY=domain\username:password@myproxy:myproxyport

esempio:
set http_proxy=IND\namit.kewat:xl123456@192.168.180.150:8880


3
Che cosa succede se la password ha caratteri speciali come! e @.
Ravi Kumar,

1
sfuggire a caratteri speciali con il carattere di escape bash: \
Adam

1
Non è possibile uscire da "@" nella password con il carattere di escape (), è necessario url codificarlo su% 40 nella stringa proxy.
Deep-B,

3
Avevo bisogno di impostare HTTP_PROXY = nome utente: password @ myproxy: set myproxyport HTTPS_PROXY = nome utente: password @ myproxy: myproxyport
Seth

1
L'impostazione di questa variabile d'ambiente sembra non avere alcun effetto sul pip sulla mia macchina
Jack M,

26

Questo ha funzionato per me (su Windows tramite CMD):

pip install --proxy proxyserver:port requests

21
$ pip --proxy http://proxy-host:proxy-port install packagename

Questo è ciò su cui ha funzionato per me


4
Questo è davvero utile se solo temporaneamente dietro un proxy. Ho anche dovuto aggiungere il mio nome utente e la mia password alla sintassi:pip --proxy http://username:password@proxy-host:proxy-port install <package>
Terrabits,

14

In base alla nostra politica di sicurezza, non posso usare https con pypi, l'ispezione SSL riscrive i certificati, interrompe la sicurezza integrata di pip per www.python.org. L'uomo nel mezzo è l'amministratore di rete.

Quindi ho bisogno di usare un semplice http . Per fare ciò ho bisogno di sovrascrivere il proxy di sistema e il pypi predefinito:

bin/pip install --proxy=squidproxy:3128 -i http://www.python.org/pypi --upgrade "SQLAlchemy>=0.7.10"

2
Questo non funziona più. PyPi ora ti inoltra automaticamente a https.
Martin M.,

L'ispezione SSL non sembra funzionare; potrebbe essere dovuto al blocco dei tasti o alla segretezza?
bbaassssiiee,

@SamuelHarmer. Securityha quattro sillabe. Troppi per Trump.
javadba,

2
Penso che @bbaassssiiee stia dicendo che il suo pip si è rotto (nel 2013) con HTTPS perché il suo proxy aziendale riscrive tutti i certificati per utilizzare il proprio certificato root (in modo che possano decrittografare tutto il traffico SSL) e pip non supera la verifica del certificato. Naturalmente nel 2017, pip evita automaticamente il controllo del certificato quando --proxy viene utilizzato. Molti proxy aziendali cambiano già efficacemente tutto il tuo traffico in non SSL comunque perché anche quando navighi verso siti SSL, stai eseguendo il proxy tramite proxy HTTP non SSL.
Cowbert,

13

Apri il prompt dei comandi di Windows.

Imposta variabili di ambiente proxy.

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

Installa i pacchetti Python usando il proxy nello stesso prompt dei comandi di Windows.

pip install --proxy="user:password@proxy_ip:port" package_name

12

In Windows 7:

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

vale a dire:

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

11

Telefono come hotspot mobile / tethering USB

Se ho molti problemi a trovare un modo attraverso il proxy aziendale, mi collego al Web tramite il mio telefono (hotspot wireless se ho wifi, cavo USB se non lo è) e faccio rapidamente pip install.

Potrebbe non funzionare per tutte le configurazioni, ma dovrebbe coinvolgere la maggior parte delle persone in un pizzico.



7

Ho avuto lo stesso problema: dietro un proxy aziendale con auth al lavoro, non potevo avere il pip pip, così come Sublime Text 2 (beh, funzionava con la configurazione personalizzata delle mie impostazioni proxy). Per pip (e lo proverò su git), l'ho risolto installando il proxy cntlm. È stato molto semplice da configurare:

  1. Modifica cntlm.ini
  2. Modifica i campi "Nome utente", "Dominio", "Password"
  3. Aggiungi una riga "Proxy", con le impostazioni del proxy: server:port
  4. Assicurarsi che la riga "NoProxy" integri "localhost" (come quella predefinita)
  5. Nota la porta predefinita: 3128
  6. Salva e basta.

Per verificare che funzioni, basta avviare un nuovo strumento da riga di comando e provare:

pip install django --proxy=localhost:3128

Questo ha funzionato per me. Spero che questo ti possa aiutare.


6

Potrei raggiungere questo obiettivo eseguendo:

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

Sto usando Python 3.7.3 all'interno di un proxy corporativo.



5

se si desidera aggiornare pip tramite proxy, è possibile utilizzare (ad esempio in Windows):

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

4

Per utenti Windows: se si desidera installare Flask-MongoAlchemy, utilizzare il seguente codice

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

3

Se ti stai connettendo a Internet dietro un proxy, potrebbero esserci problemi nell'esecuzione di alcuni comandi.

Impostare le variabili di ambiente per la configurazione proxy nel prompt dei comandi come segue:

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

2

A CentOS (in realtà penso che tutte le distro di Linux siano simili) corrono

env|grep http_proxy

e

env|grep https_proxy

controlla qual è l'output di quei comandi (dovrebbero contenere i tuoi indirizzi proxy).

Se gli output sono vuoti o hanno valori errati, modificali, ad esempio:

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

Ora prova a recuperare e installare alcuni pacchetti usando pip:

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

e in realtà non ho mai incontrato il caso quando non ha funzionato. Per alcuni sistemi devi essere un root (sudo non è abbastanza).


2

Attenzione, c'è qualcosa di molto brutto con il comando "pip search". Il comando di ricerca non utilizza le impostazioni del proxy indipendentemente dal modo in cui viene passato.

Stavo cercando di capire il problema solo provando il comando "cerca", e ho trovato questo post con una spiegazione dettagliata di quel bug: https://github.com/pypa/pip/issues/1104

Posso confermare che il bug rimane con pip 1.5.6 su Debian 8 con python 2.7.9. Il comando "pip install" funziona come un incantesimo.


2

Ho ricevuto l'errore:

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

(La porta del server proxy è la porta ssh inoltrata a localhost:3128).

Ho dovuto impostare i proxy http e https per farlo funzionare:

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...

come http://pypi.python.org/simple/reindirizza a https://pypi.python.org/simplema pipl'errore non te lo dice.


2

Anche io non sono esperto in questo, ma l'ho fatto funzionare impostando la all_proxyvariabile nel file ~ / .bashrc. Per aprire il ~/.bashrcfile e modificarlo da un terminale, eseguire i seguenti comandi,

gedit ~/.bashrc &

Aggiungi seguito alla fine del file,

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

Quindi apri un nuovo terminale o esegui seguito nello stesso terminale,

source ~/.bashrc

Solo l'impostazione http_proxye le https_proxyvariabili non sono sufficienti per un semplice utilizzo pip install somepackage. Anche se in qualche modosudo -E pip install somepackage funziona, ma questo mi ha dato qualche problema nel caso in cui sto usando un'installazione locale di Anaconda nella cartella dei miei utenti.

PS: sto usando Ubuntu 16.04.


2

Che ne dici di farlo a livello locale? Molto probabilmente è possibile scaricare da https source tramite il browser

  1. Scarica il file del modulo (mysql-connector-python-2.0.3.zip / gz ... ecc.).
  2. Estrai e vai alla directory estratta dove si trova setup.py e chiama:

    C:\mysql-connector-python-2.0.3>python.exe setup.py install

6
Ma poi devi andare a prendere tutte le dipendenze (e le loro dipendenze, e ...) te stesso
jonrsharpe,

1

Questo è ciò che funziona per me:

pip --proxy proxy url:port command package

1

Impostare la seguente variabile di ambiente: export PIP_PROXY=http://web-proxy.mydomain.com


1

Se stai usando Linux, come root:

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

Quando usi env esporta la variabile https_proxy per l'esecuzione corrente del comando pip install.

$ web_proxy_ip è il nome host o IP del proxy $ web_proxy_port è la porta



0

per windows vai su C: /ProgramData/pip/pip.ini e imposta

[globale]

proxy = http: // YouKnowTheRest

con i dettagli del tuo proxy. Questo configura permanentemente il proxy per pip.


0

Un approccio più semplice potrebbe essere:

  1. Crea una cartella denominata "pip" nella tua $HOMEdirectory.
  2. Creare un file denominato "pip.ini" (Windows) o "pip.conf" (Linux) nella directory creata nel passaggio 1
  3. Copia e incolla le seguenti righe sotto pip.ini / pip.conf:

    [global]
    trusted-host = pypi.python.org
                   pypi.org
                   files.pythonhosted.org 
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.