Verwendung von pip unter Windows hinter einem authentifizierenden Proxy

90

Auf meinem Computer wird Windows hinter einem Proxy auf einem Windows-Server ausgeführt (unter Verwendung von Active Directory), und ich kann nicht herausfinden, wie ich damit pipumgehen soll (in Python3). Ich habe es versucht --proxy, aber es sind immer noch nur Timeouts. Ich habe auch versucht, eine lange Zeitüberschreitung (60er Jahre) einzustellen, aber das machte keinen Unterschied. Meine Proxy-Einstellungen sind korrekt und ich habe sie mit denen verglichen, die ich erfolgreich in TortoiseHG verwende, um sicherzugehen.

Gibt es andere Tricks, von denen jeder weiß, dass ich sie ausprobieren kann, oder gibt es einige Einschränkungen in pipBezug auf Windows-Proxys?

Update: Meine fehlgeschlagenen Versuche umfassten die Suche nach Pypi. Ich habe gerade versucht, etwas zu installieren, und es hat funktioniert. Die Suche schlägt jedoch immer noch fehl. Zeigt dies einen Fehler an pipoder funktionieren sie anders?

aquavitae
quelle

Antworten:

107

Ich habe zwei Optionen ausprobiert, die beide auf dem NTLM-authentifizierten Proxy meines Unternehmens funktionieren. Option 1 ist zu verwenden--proxy http://user:pass@proxyAddress:proxyPort

Wenn Sie immer noch Probleme haben, würde ich vorschlagen, einen Proxy-Authentifizierungsdienst (ich verwende CNTLM ) zu installieren und pip darauf zu zeigen, z--proxy http://localhost:3128

Russell
quelle
1
Das CNTLM-Tool wird aktiv gewartet und scheint sehr gut zu funktionieren.
Michał Fita
6
Ich konnte es nicht zum
Laufen bringen,
2
Wenn Ihr Passwort oder Benutzername Sonderzeichen enthält, maskieren Sie diese einfach mit \ vor dem Sonderzeichen. Es funktioniert gut.
Arockia
Verstehe ich das richtig, dass Sie pip anweisen, die Anfrage an den Proxy zu senden und sich über eine http-Verbindung mit dem angegebenen Benutzer und Passwort zu authentifizieren? Das heißt, Ihr Passwort wird unverschlüsselt an den Proxyserver gesendet, oder? Sieht nach einem großen Sicherheitsrisiko für mich aus oder fehlt mir etwas?
Robert
Es funktionierte für mich mit einer Microsoft Forefront Firewall
Raúl Salinas-Monteagudo
64

Ich habe ein paar Stunden gebraucht, um das herauszufinden, aber ich habe es endlich mit CNTLM zum Laufen gebracht und danach nur noch mit einer Pip-Konfigurationsdatei. Hier ist, wie ich es mit der Pip-Konfigurationsdatei zum Laufen gebracht habe ...

Lösung:

1. Navigieren Sie in Windows zu Ihrem Benutzerprofilverzeichnis (Bsp. C: \ Users \ Sync) und erstellen Sie einen Ordner mit dem Namen " pip ".

2. Erstellen Sie in diesem Verzeichnis eine Datei mit dem Namen " pip.ini " (Bsp. C: \ Users \ Sync \ pip \ pip.ini) und geben Sie Folgendes ein:

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

Ersetzen Sie [Domainname] , [Benutzername] , [Passwort] , [Proxy-Adresse] und [Proxy-Port] durch Ihre eigenen Informationen.

Hinweis: Wenn Ihr [Domainname] , [Benutzername] oder [Passwort] Sonderzeichen enthält, müssen Sie | in Prozent codieren verschlüsseln sie.

3. Zu diesem Zeitpunkt konnte ich " pip install " ohne Probleme ausführen .

Hoffentlich funktioniert das auch für andere!

PS: Dies kann ein Sicherheitsrisiko darstellen, da Ihr Passwort im Klartext gespeichert ist. Wenn dies ein Problem darstellt, sollten Sie CNTLM mithilfe dieses Artikels einrichten (ermöglicht die Verwendung eines Hash-Kennworts anstelle von einfachem Text). Anschließend proxy = 127.0.0.1:3128in der oben genannten Datei "pip.ini" einstellen.

Synchronisieren
quelle
2
Weitere Informationen zum Standort von pip.ini finden Sie hier . Sie können die PIP_CONFIG_FILEUmgebungsvariable so einstellen , dass sie auf die Datei
pip.ini
1
Liebe es!!!! So sauber - denken Sie daran, dass Sie bei den meisten Proxys Ihr Passwort manuell eingeben können. Hinterlassen Sie Ihr Passwort NIEMALS im Klartext!
avgvstvs
1
Eine weitere sehr wichtige globale Einstellung, die hier hinzugefügt werden kann, ist die Spiegelseite. Wenn Sie beispielsweise "index-url = pypi.tuna.tsinghua.edu.cn/simple " hinzufügen, wird die Download-Geschwindigkeit von Pip in der VR China stark erhöht. Und die entsprechende Datei unter Linux ist ~ / .pip / pip.conf
TingQian LI
4
Was ist [Domainname]?
Alex B
1
@AlexB, [Domainname] bezieht sich auf Ihren Windows- Domainnamen
Mike Pennington
45

So habe ich es eingerichtet:

  1. Öffnen Sie die Eingabeaufforderung (CMD) als Administrator.
  2. Exportieren Sie die Proxy-Einstellungen:

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

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

  3. Installieren Sie das Paket, das Sie installieren möchten:

    pip install PackageName

Beispielsweise:

Beispiel

Heinrich Cloete
quelle
4
Dies ist definitiv das erste, was Sie versuchen sollten. Python ist plattformübergreifend und entspricht dem, was wir normalerweise unter Linux tun. Hatte Probleme unter Windows (hinter demselben Proxy), bei denen das --proxyArgument es überhaupt nicht hätte, aber der Standard-Env-Var-Ansatz funktionierte beim ersten Mal. Für die Aufzeichnung haben wir auch festgelegt no_proxy, dass andere interne Anforderungen vermieden werden, die versuchen, über den Proxy zu gehen.
Randomsock
funktioniert bei mir auf win10 nicht. verwenden , um ein Emulator Konsole Tool wie cygwinoder cmderund dann tun Sie es dem Linux - Weg: export http_proxy=<proxy>und export https_proxy=<proxy>und führen Sie dann nurpip install <package>
Bucky
Das hat bei mir funktioniert, aber das --proxyKommandozeilen-Flag hat es nie getan. Windows 10.
AmbroseChapel
15

Unter Windows 7 stieß ich auf dasselbe Problem. Ich habe es geschafft, es zum Laufen zu bringen, indem ich einen "pip" -Ordner mit einer "pip.ini" -Datei darin erstellt habe. Ich habe diesen Ordner in "C: \ Users \ {my.username} \ AppData \ Roaming" abgelegt, weil gemäß der Python-Dokumentation:

Unter Windows lautet die Konfigurationsdatei% APPDATA% \ pip \ pip.ini

In der pip.ini-Datei habe ich nur:

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

Also kein Benutzername: Passwort. Und es funktioniert gut.

stann1
quelle
1
In meinem Fall funktioniert dies nur, wenn ich meinen Benutzernamen und mein Passwort in Klartext in diese Datei eingebe ...: / Warum funktioniert alles andere vom CMD wie "ping XYZ". Warum verwendet pip nicht die IE-Einstellungen?
hmrc87
7

Ich hatte ein ähnliches Problem und stellte fest, dass mein Unternehmen die NTLM-Proxyauthentifizierung verwendet. Wenn Sie diesen Fehler in Ihrer pip.log sehen, ist dies wahrscheinlich das Problem:

URL http://pypi.python.org/simple/pyreadline konnte nicht abgerufen werden : HTTP-Fehler 407: Proxy-Authentifizierung erforderlich (Der ISA Server benötigt eine Autorisierung, um die Anforderung zu erfüllen. Der Zugriff auf den Webproxy-Filter wird verweigert.)

NTLMaps können verwendet werden, um eine Schnittstelle zum NTLM-Proxyserver herzustellen, indem ein Zwischenproxy wird.

Laden Sie NTLMAPs herunter, aktualisieren Sie die enthaltene server.cfg, führen Sie die Datei main.py aus und zeigen Sie die Proxy-Einstellung von pip auf 127.0.0.1:.

Ich musste auch diese Standardwerte in der server.cfgDatei ändern 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/

Mönch
quelle
1

Möglicherweise treten auch Probleme mit Zertifikaten von Ihrem Proxy auf. Hier finden Sie zahlreiche Antworten zum Abrufen des Zertifikats Ihres Proxys.

Auf einem Windows-Host möchten Sie möglicherweise eine Umgebungsvariable festlegen, damit pip Ihren Proxy löschen kann:

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

Sie können das --certArgument auch PIPmit demselben Ergebnis verwenden.

cincypiper
quelle
1

Ich hatte das gleiche Problem in einer Remote-Windows-Umgebung. Ich habe viele Lösungen ausprobiert, die hier oder in anderen ähnlichen Beiträgen gefunden wurden, aber nichts hat funktioniert. Schließlich war die Lösung recht einfach. Ich musste NO_PROXYmit cmd setzen:

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

Sie müssen doppelte Anführungszeichen verwenden und NO_PROXYauf Großbuchstaben setzen. Sie können auch NO_PROXYeine Umgebungsvariable hinzufügen , anstatt sie bei jeder Verwendung der Konsole festzulegen.

Ich hoffe, dies wird helfen, wenn eine andere hier veröffentlichte Lösung funktioniert.

EL Manu
quelle
1

Installieren Sie cntlm: Cntlm: Fast NTLM Authentication Proxy in C.

Config cntlm.ini:

Benutzername ob66759

Domain NAM

Passwort geheim

Proxy proxy1.net:8080

Proxy proxy2.net:8080

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

Hören Sie 3128

Erlaube 127.0.0.1

#Deine IP-Adresse

Erlaube 10.106.18.138

starte es:

cntlm -v -c cntlm.ini

Jetzt 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

funktioniert!

Sie können das Passwort auch ausblenden: https://stormpoopersmith.com/2012/03/20/using-applications-behind-a-corporate-proxy/

Alex B.
quelle
1

Das gleiche Problem unter Windows 10 und höher funktioniert bei mir nicht.

Verwenden Sie ein Emulatorkonsolen-Tool wie das folgende cygwinund führen Sie es wie folgt aus:

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

und die Dinge funktionieren gut.

Bucky
quelle
Unter Windows 10 mit authentifizierendem Proxy funktioniert dies für mich: Verwenden von cntlm als Zwischenproxy, dann an der msdos-Eingabeaufforderung: "set https_proxy = localhost: 3128" und dann "pip install -U setuptools == 41.0.1"
mrtexaz