Verwenden von pip hinter einem Proxy mit CNTLM


279

Ich versuche, pip hinter einem Proxy bei der Arbeit zu verwenden.

Eine der Antworten aus diesem Beitrag schlug die Verwendung von CNTLM vor . Ich habe es gemäß diesem anderen Beitrag installiert und konfiguriert , aber das Ausführen cntlm.exe -c cntlm.ini -I -M http://google.comergab den Fehler Connection to proxy failed, bailing out.

Ich habe es auch versucht pip install -–proxy=user:pass@localhost:3128(der Standard-CNTLM-Port), aber das hat ausgelöst Cannot fetch index base URL http://pypi.python.org/simple/. Offensichtlich ist etwas mit dem Proxy los.

Weiß jemand, wie man genauer überprüft, ob CNTLM richtig eingerichtet ist oder ob es einen anderen Weg gibt, dies zu umgehen? Ich weiß , dass Sie auch die festlegen können http_proxyUmgebungsvariable wie hier , aber ich bin nicht sicher , was Anmeldeinformationen zu setzen in. Die aus cntlm.ini?


2
Sie müssen die IP-Adresse Ihres Proxys und Ihrer Portnummer kennen und diese in Ihrer cntlm.ini entsprechend einstellen (auch Ihren Benutzernamen und Ihr Passwort für den Proxy, falls Sie einen haben)
Nummer 5

2
Ich habe einen Blog darüber geschrieben, wie man CNTLM einrichtet und verwendet. Der Beitrag ist für Ubuntu und für die Installation von Rails, aber ich denke, der Prozess könnte der gleiche sein. Bearbeiten: Lesen Sie diesen Artikel über das Einrichten von CNTLM für Windows, im Grunde das gleiche mit meiner Ubuntu-Version. HTH.
Annie Lagang

Antworten:


74

Befolgen Sie diesen Artikel , um CNTLM für Windows einzurichten . Lesen Sie für Ubuntu meinen Blog-Beitrag .

Bearbeiten:

Um CNTLM auf jeder Plattform verwenden zu können, müssen Sie grundsätzlich Ihren Benutzernamen und Ihr Hash- Passwort einrichten , bevor Sie es http://127.0.0.1:3128als Proxy für Ihren übergeordneten Proxy verwenden können.

  1. Bearbeiten Sie die Konfiguration und fügen Sie wichtige Informationen wie Domäne, Benutzername, Kennwort und übergeordneten Proxy hinzu.

  2. Hash-Passwort generieren.

    Windows cntlm –c cntlm.ini –H

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

  3. Entfernen Sie das Klartextkennwort aus der Konfiguration und ersetzen Sie es durch die generierten Kennwörter.

So überprüfen Sie, ob es funktioniert:

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

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

Ausführlichere Anweisungen finden Sie unter den obigen Links.

Aktualisieren:

Der Vollständigkeit halber konnte ich kürzlich CNTLM in Windows konfigurieren und verwenden. Während des Synchronisierungsprozesses von Kindle für PC ist ein Problem aufgetreten, da unser Proxy und die Installation und Konfiguration von CNTLM für Windows dieses Problem für mich behoben haben. Weitere Informationen finden Sie in meinem Artikel .


Wenn dieses Handbuch Ihr Problem nicht löst, versuchen Sie, pip mit der Befehlszeilenoption auszuführen, --trusted-host pypi.python.orgwas für mich der Trick war.
Petr

1
Ich möchte nur hinzufügen, dass ich cntlm in unserer Unternehmensumgebung nicht unter Windows oder Mac zum Laufen bringen konnte, aber die Installation von Fiddler auf einem Windows-Computer und die Verwendung als Proxy löste das Problem.
Dean Meehan

267

Mit Ubuntu konnte ich die Proxy-Option nicht wie angekündigt zum Laufen bringen - daher funktionierte der folgende Befehl nicht :

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

Aber das Exportieren der https_proxyUmgebungsvariablen (beachten Sie, dass dies https_proxynicht http_proxyder Fall ist) hat den Trick getan:

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

dann

sudo -E pip install somepackage

1
Das Festlegen von https_proxy erledigt den Job auch unter Mac OS X.
Bharadwaj Srigiriraju

4
das gleiche hier, --proxy funktionierte nicht, ich musste sowohl http_proxy als auch https_proxy (Debian hinter einer Corp-Firewall)
angeben

34
Vielen Dank für die Aufnahme -Ein den sudoBefehl, der mich ständig umwirft, wenn ich mich frage, warum Programme meine ENV nicht sehen.
AndyC

11
-E fügte hinzu, Sudo hat den Trick für mich getan. Die Umgebungsvariable "http_proxy", die ich zuvor eingerichtet habe, bleibt erhalten. Vielen Dank!
ImagineerThat

7
pip --proxy = someproxy-url: port install some-package funktionierte für mich in Win8.1 mit pip 6.1.1
zenpoy

96

Vergessen Sie unter Windows nicht zu setzen

SET HTTPS_PROXY=<proxyHost>:<proxyPort>

worauf ich mich einstellen musste

pip install pep8

Funktioniert auf Fedora auch mit 'export http_proxy = <proxy_host>: <port>'
Damien

5
Dies funktionierte für mich, aber nur in der Form SET HTTPS_PROXY = ht tps: // user: pass @ addr: port [abzüglich des Speicherplatzes, den ich hinzufügen musste, damit der Stackoverflow nicht verstümmelt] und ich musste Sonderzeichen in meinem Passwort ersetzen mit hex in der Form% nn
Seth

das hat bei mir funktioniert. vorher tat ich: SET HTTPS_PROXY=username:password@<proxyHost>:<proxyPort>und es funktionierte nicht.
Zahra

Hat jemand eine Erklärung, warum die Umgebungsvariable benötigt wird und wie sie von pip verwendet wird? Für conda reicht es aus, den Proxy in der .condarc-Datei zu konfigurieren.
Maggie

1
Ein Beispielanruf würde folgendermaßen aussehen: SET HTTPS_PROXY = https://512893:Pass%23h98@proxy.example.com:6050für Benutzername 512893und Passwort pass#h98. Denken Sie daran, Sonderzeichen in Kennwort oder Benutzername ( #in diesem Fall) per URL zu codieren . Vielleicht versuchen Sie auch, die HTTP_PROXYFlagge zu setzen.
Nuhman

65

Es hat bei mir nicht funktioniert. Ich musste https bei der Arbeit verwenden:

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

Fügen Sie zum Aktualisieren -U hinzu.


1
Dies scheint die einfachste Lösung für Windows zu sein, für die keine zusätzlichen Pakete erforderlich sind.
JE Carter II

3
Wenn Sie ein Passwort benötigen:pip install somepackage --proxy https://user:password@mydomain:port
Daniel R Carletti

Und wenn Sie nicht wissen, was Sie usersetzen sollen, liegt das vielleicht daran, dass es keine gibt:pip install --proxy=https://mydomain:port somepackage
Olivier

45

Sie können pip over HTTPS weiterhin verwenden, indem Sie das Stammzertifikat Ihres Unternehmens zur Datei cacert.pem in Ihrem Ordner site-packages / pip hinzufügen. Konfigurieren Sie dann pip für die Verwendung Ihres Proxys, indem Sie ~ / pip / pip.conf (oder ~ \ pip \ pip.ini unter Windows) die folgenden Zeilen hinzufügen:

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

Das ist es. Sie müssen keine Pakete von Drittanbietern verwenden oder HTTPS aufgeben (natürlich kann Ihr Netzwerkadministrator immer noch sehen, was Sie tun).


Dies funktionierte für mich, aber erst nach der manuellen Installation von pip, was bedeutet, dass Sie get-pip.py zunächst nicht verwenden können
Luke Dunstan

2
Für die Lage von pip.ini sehen pip.pypa.io/en/latest/user_guide.html#configuration In Fenstern fand ich cacert in "C: \ Python34 \ Lib \ site-packages \ pip_vendor \ Requests \ cacert.pem"
lib

2
Das ist für mich gearbeitet , aber ich habe nicht eine pip.config Datei haben , damit ich eine erstellen musste in ~/.pip/pip.confdann export PIP_CONFIG_FILE=/root/.pip/pip.confund meine Installation funktionierte! Vielen Dank!
Rhyuk

2
Danke, du hast mich auf den richtigen Weg gebracht! Zu Ihrer Information, für Python 3.7 unter Windows 7 befindet sich die Zertifikatsdatei von pip anscheinend unter [Python37]\Lib\site-packages\pip\_vendor\certifi\cacert.pem. Exportieren Sie das SSL-Abhörzertifikat Ihres Unternehmens im Base64 .cer-Format, fügen Sie den öffentlichen Schlüssel in diese Datei ein und voilà, volle https-Unterstützung hinter dem Unternehmens-Proxy.
Mike Strobel

2
Ihre Pip ini Position auf Fenstern kann sein AppData/Roaming/pip/pip.ini...
Erik Aronesty

27

für Windows; Stellen Sie Ihren Proxy in der Eingabeaufforderung als ein
set HTTP_PROXY=domain\username:password@myproxy:myproxyport

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


3
Was ist, wenn das Passwort spezielle Zeichen wie hat! und @.
Ravi Kumar

1
Entkomme speziellen Zeichen mit dem Bash-Fluchtzeichen: \
Adam

1
Sie können '@' in Ihrem Passwort nicht mit dem Escape-Zeichen () maskieren, sondern müssen es in der Proxy-Zeichenfolge mit% 40 codieren.
Deep-B


1
Das Einstellen dieser Umgebungsvariablen scheint keine Auswirkung auf Pip auf meinem Computer zu haben
Jack M

26

Dies funktionierte bei mir (unter Windows über CMD):

pip install --proxy proxyserver:port requests

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

Daran hat bei mir gearbeitet


4
Dies ist sehr nützlich, wenn Sie sich nur vorübergehend hinter einem Proxy befinden. Ich musste auch meinen Benutzernamen und mein Passwort zur Syntax hinzufügen:pip --proxy http://username:password@proxy-host:proxy-port install <package>
Terrabits

14

Gemäß unserer Sicherheitsrichtlinie darf ich https nicht verwenden mit pypi verwenden, SSL-Inspektion schreibt Zertifikate neu, es bricht die integrierte Sicherheit von pip für www.python.org. Der Mann in der Mitte ist der Netzwerkadministrator.

Also muss ich einfach http verwenden . Dazu muss ich den System-Proxy sowie die Standard-Pypi überschreiben:

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

2
Das funktioniert nicht mehr. PyPi leitet Sie jetzt automatisch an https weiter.
Martin M.

Die SSL-Überprüfung scheint nicht zu funktionieren. Könnte es daran liegen, dass die Schlüssel festgehalten werden oder dass die Geheimhaltung vorwärts geht?
bbaassssiiee

@ SamuelHarmer. Securityhat vier Silben. Zu viele für Trump.
Javadba

2
Ich denke, @bbaassssiiee könnte sagen, dass sein Pip (2013) mit HTTPS kaputt gegangen ist, weil sein Unternehmens-Proxy alle Zertifikate neu schreibt, um ihr eigenes Stammzertifikat zu verwenden (damit sie den gesamten SSL-Verkehr entschlüsseln können) und pip die Zertifikatsüberprüfung nicht besteht. Natürlich vermeidet pip 2017 automatisch die Zertifikatsprüfung, wenn --proxy verwendet wird. Viele Unternehmens-Proxys ändern ohnehin bereits Ihren gesamten Datenverkehr effektiv auf Nicht-SSL, da Sie selbst beim Navigieren zu SSL-Sites über einen Nicht-SSL-HTTP-Proxy Proxys erstellen.
Cowbert

13

Öffnen Sie die Windows-Eingabeaufforderung.

Legen Sie Proxy-Umgebungsvariablen fest.

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

Installieren Sie Python-Pakete mithilfe von Proxy an derselben Windows-Eingabeaufforderung.

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

12

In Windows 7:

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

dh:

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

11

Telefon als mobiler Hotspot / USB-Tethering

Wenn ich große Probleme habe, einen Weg durch den Unternehmens-Proxy zu finden, verbinde ich mich über mein Telefon mit dem Internet (drahtloser Hotspot, wenn ich WLAN habe, USB-Kabel, wenn nicht) und mache eine schnelle Verbindung pip install .

Funktioniert möglicherweise nicht für alle Setups, sollte aber die meisten Leute zur Not durchbringen.



7

Ich hatte das gleiche Problem: Hinter einem Unternehmens-Proxy mit Authentifizierung bei der Arbeit konnte ich keine Pip-Arbeit sowie Sublime Text 2 haben (nun, es funktionierte mit der benutzerdefinierten Einrichtung meiner Proxy-Einstellungen). Für pip (und ich werde das auf git versuchen) habe ich es gelöst, indem ich cntlm proxy installiert habe. Es war sehr einfach zu konfigurieren:

  1. Bearbeiten Sie cntlm.ini
  2. Bearbeiten Sie die Felder "Benutzername", "Domain", "Passwort"
  3. Fügen Sie eine "Proxy" -Zeile mit Ihren Proxy-Einstellungen hinzu: server:port
  4. Stellen Sie sicher, dass die Zeile "NoProxy" "localhost" integriert (standardmäßig so).
  5. Beachten Sie den Standardport: 3128
  6. Speichern und fertig.

Um dies zu testen, starten Sie einfach ein neues Befehlszeilentool und versuchen Sie:

pip install django --proxy=localhost:3128

Das hat bei mir funktioniert. Hoffe das wird dir helfen.


6

Ich könnte dies erreichen, indem ich renne:

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

Ich verwende Python 3.7.3 in einem korporativen Proxy.



5

Wenn Sie pip per Proxy aktualisieren möchten, können Sie Folgendes verwenden (z. B. unter Windows):

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

4

Für Windows-Benutzer: Wenn Sie Flask-MongoAlchemy installieren möchten, verwenden Sie den folgenden Code

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

3

Wenn Sie hinter einem Proxy eine Verbindung zum Internet herstellen, kann es zu Problemen beim Ausführen einiger Befehle kommen.

Legen Sie die Umgebungsvariablen für die Proxy-Konfiguration an der Eingabeaufforderung wie folgt fest:

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

2

Bei CentOS (eigentlich denke ich, dass alle Linux-Distributionen ähnlich sind) laufen

env|grep http_proxy

und

env|grep https_proxy

Überprüfen Sie, was die Ausgabe dieser Befehle ist (sie sollten Ihre Proxy-Adressen enthalten).

Wenn die Ausgänge leer sind oder falsche Werte haben, ändern Sie sie, z.

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

Versuchen Sie nun, einige Pakete mit pip abzurufen und zu installieren:

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

und tatsächlich habe ich den Fall nie getroffen, als es nicht funktionierte. Für einige Systeme müssen Sie ein Root sein (Sudo ist nicht genug).


2

Achtung, der Befehl "pip search" hat etwas sehr Schlimmes. Der Suchbefehl verwendet die Proxy-Einstellung nicht, unabhängig davon, wie sie übergeben wird.

Ich habe versucht, das Problem nur mit dem Befehl "Suchen" herauszufinden, und diesen Beitrag mit einer detaillierten Erklärung zu diesem Fehler gefunden: https://github.com/pypa/pip/issues/1104

Ich kann bestätigen, dass der Fehler mit Pip 1.5.6 auf Debian 8 mit Python 2.7.9 bestehen bleibt. Der Befehl "pip install" funktioniert wie ein Zauber.


2

Ich habe den Fehler bekommen:

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

(Der Port des Proxyservers ist der SSH-Port, an den weitergeleitet wird. localhost:3128)

Ich musste sowohl http- als auch https-Proxys festlegen, damit es funktioniert:

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

als http://pypi.python.org/simple/Weiterleitungen zu https://pypi.python.org/simpleaber pip's Fehler sagt Ihnen nicht.


2

Ich bin auch kein Experte in diesem Bereich, aber ich habe dafür all_proxygesorgt, dass es funktioniert, indem ich die Variable in der Datei ~ / .bashrc gesetzt habe. Um die ~/.bashrcDatei zu öffnen und von einem Terminal aus zu bearbeiten, führen Sie die folgenden Befehle aus:

gedit ~/.bashrc &

Fügen Sie am Ende der Datei Folgendes hinzu:

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

Öffnen Sie dann entweder ein neues Terminal oder führen Sie die folgenden Schritte im selben Terminal aus.

source ~/.bashrc

Nur Einstellungen http_proxyund https_proxyVariablen reichen für eine einfache Verwendung nicht aus pip install somepackage. Funktioniert zwar irgendwie sudo -E pip install somepackage, aber dies hat mir ein Problem bereitet , falls ich eine lokale Installation von Anaconda im Ordner meiner Benutzer verwende.

PS - Ich benutze Ubuntu 16.04.


2

Wie wäre es einfach vor Ort? Höchstwahrscheinlich können Sie über Ihren Browser von der https-Quelle herunterladen

  1. Laden Sie Ihre Moduldatei herunter (mysql-connector-python-2.0.3.zip / gz ... etc).
  2. Extrahieren Sie es und gehen Sie in das extrahierte Verzeichnis, in dem sich setup.py befindet, und rufen Sie auf:

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

6
Aber dann müssen Sie alle Abhängigkeiten (und ihre Abhängigkeiten und ...) selbst
abrufen

1

Das funktioniert bei mir:

pip --proxy proxy url:port command package

1

Legen Sie die folgende Umgebungsvariable fest: export PIP_PROXY=http://web-proxy.mydomain.com


1

Wenn Sie Linux als root verwenden:

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

Wenn Sie env verwenden, wird die Variable https_proxy für die aktuelle Ausführung des Befehls pip install exportiert.

$ web_proxy_ip ist der Hostname oder die IP Ihres Proxys. $ web_proxy_port ist der Port



0

Für Windows gehen Sie zu C: /ProgramData/pip/pip.ini und legen Sie fest

[global]

proxy = http: // YouKnowTheRest

mit Ihren Proxy-Daten. Dadurch wird der Proxy für pip dauerhaft konfiguriert.


0

Ein einfacherer Ansatz könnte sein:

  1. Erstellen Sie einen Ordner mit dem Namen "pip" in Ihrem $HOMEVerzeichnis.
  2. Erstellen Sie eine Datei mit dem Namen "pip.ini" (Windows) oder "pip.conf" (Linux) in dem in Schritt 1 erstellten Verzeichnis
  3. Kopieren Sie die folgenden Zeilen und fügen Sie sie unter der Datei pip.ini / pip.conf ein:

    [global]
    trusted-host = pypi.python.org
                   pypi.org
                   files.pythonhosted.org 
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.