Utilisation de pip derrière un proxy avec CNTLM

280

J'essaie d'utiliser pip derrière un proxy au travail.

L'une des réponses de ce post suggère d'utiliser CNTLM . Je l'ai installé et configuré par cet autre post , mais l'exécution a cntlm.exe -c cntlm.ini -I -M http://google.comdonné l'erreur Connection to proxy failed, bailing out.

J'ai également essayé pip install -–proxy=user:pass@localhost:3128(le port CNTLM par défaut) mais cela a augmenté Cannot fetch index base URL http://pypi.python.org/simple/. De toute évidence, quelque chose se passe avec le proxy.

Est-ce que quelqu'un sait comment vérifier de manière plus précise si CNTLM est correctement configuré ou s'il existe un autre moyen de contourner ce problème? Je sais que vous pouvez également définir la http_proxyvariable d'environnement comme décrit ici, mais je ne sais pas quelles informations d'identification mettre. Celles de cntlm.ini?

Rob
la source
2
Vous devez connaître l'adresse IP de votre proxy et le numéro de port et le définir en conséquence dans votre cntlm.ini (également votre nom d'utilisateur et votre mot de passe pour le proxy si vous en avez un)
numéro5
2
J'ai écrit un blog sur la façon de configurer et d'utiliser CNTLM. Le message est pour Ubuntu et pour l'installation de Rails, mais je pense que le processus pourrait être le même. Edit: Lisez cet article sur la façon de configurer CNTLM pour Windows, essentiellement la même chose avec ma version Ubuntu. HTH.
Annie Lagang

Réponses:

74

Pour configurer CNTLM pour Windows, suivez cet article . Pour Ubuntu, lisez mon article de blog .

Éditer:

Fondamentalement, pour utiliser CNTLM dans n'importe quelle plate-forme, vous devez configurer votre nom d'utilisateur et votre mot de passe haché , avant de l'utiliser http://127.0.0.1:3128comme proxy pour votre proxy parent.

  1. Modifiez la configuration et ajoutez des informations importantes telles que le domaine, le nom d'utilisateur, le mot de passe et le proxy parent.

  2. Générez un mot de passe haché.

    les fenêtres cntlm –c cntlm.ini –H

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

  3. Supprimez le mot de passe en texte brut de la configuration et remplacez-les par les mots de passe générés.

Pour vérifier si vous travaillez:

les fenêtres cntlm –M http://www.google.com

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

Pour des instructions plus détaillées, voir les liens ci-dessus.

Mettre à jour:

Par souci d'exhaustivité, j'ai récemment pu configurer et utiliser CNTLM dans Windows. J'ai rencontré un problème lors du processus de synchronisation de Kindle pour PC à cause de notre proxy et l'installation et la configuration de CNTLM pour Windows ont résolu ce problème pour moi. Référez-vous à mon article pour plus de détails.

Annie Lagang
la source
Si ce guide ne résout pas votre problème, essayez d'exécuter pip avec l'option de ligne de commande --trusted-host pypi.python.orgqui a fait l'affaire pour moi.
Petr
1
Je voudrais juste ajouter à cela, que je ne pouvais pas réellement faire fonctionner cntlm sur Windows ou Mac dans notre environnement d'entreprise, mais l'installation de Fiddler sur une machine Windows et son utilisation comme proxy a résolu le problème.
Dean Meehan
268

Avec Ubuntu, je ne pouvais pas faire fonctionner l'option proxy comme annoncé - la commande suivante n'a donc pas fonctionné:

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

Mais exporter la https_proxyvariable d'environnement (notez que ce https_proxyn'est pas le cas http_proxy) a fait l'affaire:

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

puis

sudo -E pip install somepackage
Sameer Vaidya
la source
1
la configuration de https_proxy fait également l'affaire sous Mac OS X.
Bharadwaj Srigiriraju
4
même ici, --proxy ne fonctionnait pas, je devais spécifier LES DEUX http_proxy ET https_proxy (Debian derrière un pare-feu corp)
marc.guenther
34
Merci d'avoir inclus -Edans la sudocommande, cela me jette constamment quand je me demande pourquoi les programmes ne voient pas mon ENV.
AndyC
11
-E ajouté à sudo a fait l'affaire pour moi. Il conserve la variable d'environnement "http_proxy" que j'ai configurée précédemment. Merci!
imagineerThat
7
pip --proxy = someproxy-url: port install some-package a fonctionné pour moi dans Win8.1 avec pip 6.1.1
zenpoy
96

Sous Windows, n'oubliez pas de définir

SET HTTPS_PROXY=<proxyHost>:<proxyPort>

ce que je devais définir

pip install pep8
k7sleeper
la source
Fonctionne sur fedora également avec 'export http_proxy = <proxy_host>: <port>'
Damien
5
Cela a fonctionné pour moi, mais uniquement sous la forme SET HTTPS_PROXY = ht tps: // user: pass @ addr: port [moins l'espace que je devais ajouter pour empêcher stackoverflow de le gâcher] et j'ai dû remplacer des caractères spéciaux dans mon mot de passe avec hex sous la forme% nn
Seth
cela a fonctionné pour moi. avant, je faisais: SET HTTPS_PROXY=username:password@<proxyHost>:<proxyPort>et ça ne fonctionnait pas.
Zahra
Quelqu'un a-t-il une explication pourquoi la variable d'environnement est nécessaire et comment est-elle utilisée par pip? Pour conda, il suffit de configurer le proxy dans le fichier .condarc.
maggie
1
Un exemple d'appel ressemblerait à: SET HTTPS_PROXY = https://512893:Pass%[email protected]:6050pour le nom d'utilisateur 512893et le mot de passe pass#h98. N'oubliez pas de coder l'URL des caractères spéciaux dans le mot de passe ou le nom d'utilisateur ( #dans ce cas). Essayez également de régler le HTTP_PROXYdrapeau.
Nuhman
65

Cela ne fonctionnait pas pour moi. J'ai dû utiliser https au travail:

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

Pour mettre à jour, ajoutez -U.

Hugo Salvador
la source
1
Cela semble être la solution la plus simple pour Windows, ne nécessitant aucun package supplémentaire.
JE Carter II
3
Si vous devez utiliser un mot de passe:pip install somepackage --proxy https://user:password@mydomain:port
Daniel R Carletti
Et si vous ne savez pas quoi usermettre, c'est peut-être parce qu'il n'y a rien à mettre:pip install --proxy=https://mydomain:port somepackage
Olivier
45

Vous pouvez continuer à utiliser pip sur HTTPS en ajoutant le certificat racine de votre société au fichier cacert.pem dans votre dossier site-packages / pip. Configurez ensuite pip pour utiliser votre proxy en ajoutant les lignes suivantes à ~ / pip / pip.conf (ou ~ \ pip \ pip.ini si vous êtes sous Windows):

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

C'est tout. Pas besoin d'utiliser des packages tiers ou d'abandonner HTTPS (bien sûr, votre administrateur réseau peut toujours voir ce que vous faites).

djmoch
la source
Cela a fonctionné pour moi, mais seulement après avoir installé manuellement pip, ce qui signifie que vous ne pouvez pas utiliser get-pip.py au départ
Luke Dunstan
2
Pour l'emplacement de pip.ini, voir pip.pypa.io/en/latest/user_guide.html#configuration Dans Windows, j'ai trouvé cacert dans "C: \ Python34 \ Lib \ site-packages \ pip_vendor \ requests \ cacert.pem"
lib
2
Cela a fonctionné pour moi , mais je na pas un fichier pip.config si je devais créer un dans ~/.pip/pip.confalors export PIP_CONFIG_FILE=/root/.pip/pip.confet mon installation a fonctionné! Merci!
Rhyuk
2
Merci, vous m'avez mis sur la bonne voie! Pour info, pour Python 3.7 sur Windows 7, le fichier de certificats de pip est apparemment localisé à [Python37]\Lib\site-packages\pip\_vendor\certifi\cacert.pem. Exportez le certificat d'interception SSL de votre entreprise au format Base64 .cer, collez la clé publique dans ce fichier, et voilà, la prise en charge https complète derrière le proxy d'entreprise.
Mike Strobel
2
Votre emplacement pip ini sur les fenêtres peut être AppData/Roaming/pip/pip.ini....
Erik Aronesty
27

Pour les fenêtres; définissez votre proxy dans l'invite de commande comme
set HTTP_PROXY=domain\username:password@myproxy:myproxyport

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

namit
la source
3
Et si le mot de passe a des caractères spéciaux tels que! et @.
Ravi Kumar
1
échapper aux caractères spéciaux avec le caractère d'échappement bash: \
Adam
1
Vous ne pouvez pas échapper '@' dans votre mot de passe avec le caractère d'échappement (), vous devez le coder en url en% 40 dans la chaîne proxy.
Deep-B
1
La définition de cette variable d'environnement semble n'avoir aucun effet sur pip sur ma machine
Jack M
26

Cela a fonctionné pour moi (sous Windows via CMD):

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

C'est ce qui a fonctionné pour moi

Anand
la source
4
Ceci est vraiment utile lorsqu'il n'est que temporairement derrière un proxy. J'ai également dû ajouter mon nom d'utilisateur et mon mot de passe à la syntaxe:pip --proxy http://username:password@proxy-host:proxy-port install <package>
Terrabits
14

En vertu de notre politique de sécurité, je ne peux pas utiliser https avec pypi, l'inspection SSL réécrit les certificats, cela brise la sécurité intégrée de pip pour www.python.org. L'homme au milieu est l'administrateur du réseau.

J'ai donc besoin d'utiliser du http simple . Pour ce faire, je dois remplacer le proxy système ainsi que le pypi par défaut:

bin/pip install --proxy=squidproxy:3128 -i http://www.python.org/pypi --upgrade "SQLAlchemy>=0.7.10"
bbaassssiiee
la source
2
Ça ne marche plus. PyPi vous transfère désormais automatiquement vers https.
Martin M.
L'inspection SSL ne semble pas fonctionner; Serait-ce à cause de l'épinglage des clés ou du secret de transmission?
bbaassssiiee
@SamuelHarmer. Securitya quatre syllabes. Trop pour Trump.
javadba
2
Je pense que @bbaassssiiee peut dire que son pip a rompu (en 2013) avec HTTPS parce que son proxy d'entreprise réécrit tous les certificats pour utiliser leur propre certificat racine (afin qu'ils puissent décrypter tout le trafic SSL) et pip échoue à la vérification du certificat. Bien sûr, en 2017, pip évite automatiquement la vérification des certificats lorsque --proxy est utilisé. De nombreux mandataires d'entreprise transforment déjà efficacement tout votre trafic en non-SSL, car même lorsque vous naviguez vers des sites SSL, vous procurez via un proxy HTTP non-SSL.
cowbert
13

Ouvrez l'invite de commande Windows.

Définissez les variables d'environnement proxy.

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

Installez les packages Python à l'aide du proxy dans la même invite de commande Windows.

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

Sous Windows 7:

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

c'est à dire:

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

Téléphone comme point d'accès mobile / partage de connexion USB

Si j'ai beaucoup de mal à trouver un moyen de passer par le proxy d'entreprise, je me connecte au Web via mon téléphone (point d'accès sans fil si j'ai le wifi, l'attache USB dans le cas contraire) et fais un rapide pip install.

Peut ne pas fonctionner pour toutes les configurations, mais devrait attirer la plupart des gens.

Tommy O'Dell
la source
8

Dans Ubuntu 14.04 LTS

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

À votre santé

René Cejas Bolecek
la source
7

J'ai eu le même problème: derrière un proxy d'entreprise avec auth au travail, je ne pouvais pas faire fonctionner pip, ainsi que Sublime Text 2 (eh bien, cela fonctionnait avec une configuration personnalisée de mes paramètres de proxy). Pour pip (et je vais essayer ça sur git), je l'ai résolu en installant le proxy cntlm. C'était très simple à configurer:

  1. Modifier cntlm.ini
  2. Modifier les champs "Nom d'utilisateur", "Domaine", "Mot de passe"
  3. Ajoutez une ligne "Proxy", avec vos paramètres de proxy: server:port
  4. Assurez-vous que la ligne "NoProxy" intègre "localhost" (comme celle par défaut)
  5. Notez le port par défaut: 3128
  6. Enregistrez et c'est tout.

Pour tester cela fonctionne, lancez simplement un nouvel outil de ligne de commande et essayez:

pip install django --proxy=localhost:3128

Cela a fonctionné pour moi. J'espère que ceci vous aidera.

Johan Chouquet
la source
6

Je pourrais y parvenir en exécutant:

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

J'utilise Python 3.7.3 dans un proxy corporatif.

Nicolas Castro
la source
5

si vous souhaitez mettre à jour pip par proxy, vous pouvez utiliser (par exemple sous Windows):

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

Pour les utilisateurs de Windows: si vous souhaitez installer Flask-MongoAlchemy, utilisez le code suivant

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

Si vous vous connectez à Internet derrière un proxy, il peut y avoir un problème lors de l'exécution de certaines commandes.

Définissez les variables d'environnement pour la configuration du proxy dans l'invite de commande comme suit:

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

Chez CentOS (en fait, je pense que toutes les distributions Linux sont similaires), exécutez

env|grep http_proxy

et

env|grep https_proxy

vérifiez quelle est la sortie de ces commandes (elles doivent contenir vos adresses proxy).

Si les sorties sont vides ou ont des valeurs incorrectes, modifiez-les, par exemple:

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

Essayez maintenant de récupérer et d'installer certains packages en utilisant pip:

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

et en fait je n'ai jamais rencontré le cas quand ça n'a pas marché. Pour certains systèmes, vous devez être un root (sudo ne suffit pas).

Paweł Wojtal
la source
2

Attention, il y a quelque chose de très mauvais avec la commande "pip search". La commande de recherche n'utilise pas le paramètre proxy quelle que soit la façon dont il est transmis.

J'essayais de comprendre le problème uniquement en essayant la commande "search", et j'ai trouvé ce message avec une explication détaillée sur ce bug: https://github.com/pypa/pip/issues/1104

Je peux confirmer que le bogue persiste avec pip 1.5.6 sur Debian 8 avec python 2.7.9. La commande "pip install" fonctionne comme un charme.

Pivert
la source
2

J'ai eu l'erreur:

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

(Le port du serveur proxy est le port ssh transféré localhost:3128).

J'ai dû définir des proxy http et https pour le faire fonctionner:

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

comme http://pypi.python.org/simple/redirige vers https://pypi.python.org/simplemais pipl'erreur ne vous le dit pas.

fadedbee
la source
2

Je ne suis pas non plus un expert dans ce domaine, mais je l'ai fait fonctionner en définissant la all_proxyvariable dans le fichier ~ / .bashrc. Pour ouvrir un ~/.bashrcfichier et le modifier à partir d'un terminal, exécutez les commandes suivantes,

gedit ~/.bashrc &

Ajouter le suivant à la fin du fichier,

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

Ensuite, ouvrez un nouveau terminal ou exécutez-le dans le même terminal,

source ~/.bashrc

Le simple réglage http_proxyet les https_proxyvariables ne suffisent pas pour une utilisation simple pip install somepackage. Bien que cela sudo -E pip install somepackagefonctionne d'une manière ou d'une autre , mais cela m'a posé un problème au cas où j'utiliserais une installation locale d'Anaconda dans le dossier de mes utilisateurs.

PS - J'utilise Ubuntu 16.04.

bytestorm
la source
2

Que diriez-vous de le faire localement? Très probablement, vous pouvez télécharger à partir de la source https via votre navigateur

  1. Téléchargez votre fichier de module (mysql-connector-python-2.0.3.zip / gz ... etc).
  2. Extrayez-le et allez dans le répertoire extrait où se trouve setup.py et appelez:

    C:\mysql-connector-python-2.0.3>python.exe setup.py install
Envoie-le
la source
6
Mais alors vous devez aller chercher vous-même toutes les dépendances (et leurs dépendances, et ...)
jonrsharpe
1

C'est ce qui fonctionne pour moi:

pip --proxy proxy url:port command package
Brock Vond
la source
1

Définissez la variable d'environnement suivante: export PIP_PROXY=http://web-proxy.mydomain.com

FTM
la source
1

Si vous utilisez Linux, en tant que root:

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

Lorsque vous utilisez env, il exporte la variable https_proxy pour l'exécution actuelle de la commande pip install.

$ web_proxy_ip est le nom d'hôte ou l'IP de votre proxy $ web_proxy_port est le port

Adail Junior
la source
0

J'ai résolu le problème avec PIP dans Windows en utilisant "Fiddler" ( https://www.telerik.com/download/fiddler ). Après avoir téléchargé et installé, procédez comme suit:

"Règles" => cliquez sur "Authentifier automatiquement"

Exemple: pip install virtualenv -proxy 127.0.0.1:8888

Ouvrez simplement votre invite et utilisez.

https://github.com/pypa/pip/issues/1182 Recherche de "voltagex" (commenté le 22 mai 2015)

Lucius Matos
la source
0

pour Windows, accédez à C: /ProgramData/pip/pip.ini et définissez

[global]

proxy = http: // YouKnowTheRest

avec vos coordonnées proxy. Cela configure en permanence le proxy de pip.

Kvothan
la source
0

Une approche plus simple pourrait être:

  1. Créez un dossier nommé "pip" dans votre $HOMErépertoire.
  2. Créez un fichier nommé "pip.ini" (Windows) ou "pip.conf" (Linux) dans le répertoire créé à l'étape 1
  3. Copiez et collez les lignes suivantes sous pip.ini / pip.conf:

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