Jak używać pip w systemie Windows za uwierzytelniającym serwerem proxy

90

Na moim komputerze działa system Windows za proxy na serwerze Windows (przy użyciu usługi Active Directory) i nie mogę dowiedzieć się, jak się przez to przejść pip(w python3). Próbowałem użyć --proxy, ale nadal są to tylko limity czasu. Próbowałem też ustawić długi limit czasu (60 s), ale to nie miało znaczenia. Moje ustawienia proxy są poprawne i porównałem je z tymi, których z powodzeniem używam w TortoiseHG, aby się upewnić.

Czy są jakieś inne sztuczki, o których ktoś wie, które mogę wypróbować, czy są jakieś ograniczenia pipdotyczące serwerów proxy systemu Windows?

Aktualizacja: Moje nieudane próby obejmowały wyszukiwanie pypi. Właśnie próbowałem coś zainstalować i zadziałało. Wyszukiwanie wciąż jednak kończy się niepowodzeniem. Czy to wskazuje na błąd, pipczy też działają one inaczej?

Aqua vitae
źródło

Odpowiedzi:

107

Wypróbowałem 2 opcje, które działają na serwerze proxy mojej firmy z uwierzytelnianiem NTLM. Opcja 1 to użycie--proxy http://user:pass@proxyAddress:proxyPort

Jeśli nadal masz problemy, sugeruję zainstalowanie usługi uwierzytelniania proxy (używam CNTLM ) i wskazanie na nią pip, czyli coś w stylu--proxy http://localhost:3128

Russell
źródło
1
Narzędzie CNTLM jest aktywnie utrzymywane i wydaje się działać naprawdę dobrze.
Michał Fita
6
Nie mogłem sprawić, żeby to zadziałało, nieważne, wszystkie
niepewności,
2
Jeśli masz znaki specjalne w haśle lub nazwie użytkownika, po prostu zastąp je znakiem \ przed znakiem specjalnym. To działa dobrze.
Arockia
Czy dobrze rozumiem, że mówisz pipowi, aby wysłał żądanie do proxy, uwierzytelniając się za pomocą podanego użytkownika i hasła przez połączenie http? Oznacza to, że Twoje hasło zostanie wysłane niezaszyfrowane na serwer proxy, prawda !? Wygląda na to, że stanowi dla mnie duże zagrożenie bezpieczeństwa, czy coś mi brakuje?
Robert
U mnie zadziałało z zaporą ogniową Microsoft Forefront
Raúl Salinas-Monteagudo
65

Zajęło mi to kilka godzin, aby to rozgryźć, ale w końcu uruchomiłem go przy użyciu CNTLM, a potem uruchomiłem go tylko z plikiem konfiguracyjnym pip. Oto jak to działa z plikiem konfiguracyjnym pip ...

Rozwiązanie:

1. W systemie Windows przejdź do katalogu profilu użytkownika (np. C: \ Users \ Sync) i utwórz folder o nazwie „ pip

2. Utwórz plik o nazwie „ pip.ini ” w tym katalogu (np. C: \ Users \ Sync \ pip \ pip.ini) i wprowadź do niego następujące informacje:

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

Zastąp [nazwa domeny] , [nazwa użytkownika] , [hasło] , [adres proxy] i [port proxy] własnymi informacjami.

Uwaga, jeśli Twoja [nazwa domeny] , [nazwa użytkownika] lub [hasło] zawiera znaki specjalne, musisz zakodować | zakoduj je.

3. W tym momencie mogłem bez problemu uruchomić " pip install ".

Miejmy nadzieję, że to działa również dla innych!

PS: Może to stanowić zagrożenie dla bezpieczeństwa, ponieważ hasło jest przechowywane w postaci zwykłego tekstu. Jeśli jest to problem, rozważ skonfigurowanie CNTLM za pomocą tego artykułu (pozwala na użycie zaszyfrowanego hasła zamiast zwykłego tekstu). Następnie ustaw proxy = 127.0.0.1:3128w wymienionym wyżej pliku „pip.ini”.

Synchronizuj
źródło
2
Więcej o lokalizacji pip.ini można znaleźć tutaj . Możesz ustawić PIP_CONFIG_FILEzmienną środowiskową tak, aby wskazywała na plik
pip.ini
1
Kocham to!!!! tak czysty - pamiętaj tylko, że większość serwerów proxy umożliwia ręczne wprowadzenie hasła. NIGDY nie zostawiaj hasła w postaci zwykłego tekstu!
avgvstvs
1
Innym bardzo ważnym globalnym ustawieniem, które można tutaj dodać, jest witryna lustrzana, na przykład dodanie „index-url = pypi.tuna.tsinghua.edu.cn/simple ” znacznie zwiększyłoby prędkość pobierania pip w Chinach. Odpowiedni plik w systemie Linux to ~ / .pip / pip.conf
TingQian LI
4
co to jest [nazwa domeny]?
Alex B
1
@AlexB, [nazwa domeny] odnosi się do nazwy Twojej domeny Windows
Mike Pennington
45

Oto jak to skonfigurowałem:

  1. Otwórz wiersz polecenia (CMD) jako administrator.
  2. Eksportuj ustawienia proxy:

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

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

  3. Zainstaluj pakiet, który chcesz zainstalować:

    pip install PackageName

Na przykład:

Przykład

Heinrich Cloete
źródło
4
To zdecydowanie pierwsza rzecz, którą należy spróbować. Python jest wieloplatformowy i jest to odpowiednik tego, co zwykle robimy w systemie Linux. Miałem problemy w systemie Windows (za tym samym proxy), gdzie --proxyargument po prostu go nie miał, ale standardowe podejście env var działało za pierwszym razem. Dla przypomnienia, postanowiliśmy również no_proxyunikać innych żądań wewnętrznych próbujących wychodzić przez serwer proxy.
randomsock
nie działa u mnie na win10. użyć narzędzia jak emulator konsoli cygwinlub cmder, a następnie zrobić to tak, Linux: export http_proxy=<proxy>i export https_proxy=<proxy>, a następnie po prostu zrobićpip install <package>
Bucky
To działało dla mnie, ale --proxyflaga wiersza poleceń nigdy nie działała . Windows 10.
AmbroseChapel
15

Napotkałem ten sam problem w systemie Windows 7. Udało mi się go uruchomić, tworząc folder „pip” z plikiem „pip.ini” w środku. Umieściłem ten folder w folderze „C: \ Users \ {my.username} \ AppData \ Roaming”, ponieważ zgodnie z dokumentacją Pythona:

W systemie Windows plik konfiguracyjny to% APPDATA% \ pip \ pip.ini

W pliku pip.ini mam tylko:

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

Więc nie ma nazwy użytkownika: hasło. I działa dobrze.

stann1
źródło
1
W moim przypadku to działa tylko wtedy, gdy umieszczę moją nazwę użytkownika i hasło w postaci zwykłego tekstu w tym pliku ...: / Dlaczego wszystko inne z CMD działa jak "ping XYZ". Dlaczego pip nie używa ustawień IE?
hmrc87
7

Miałem podobny problem i stwierdziłem, że moja firma używa uwierzytelniania proxy NTLM. Jeśli widzisz ten błąd w swoim pip.log, prawdopodobnie jest to problem:

Nie można pobrać adresu URL http://pypi.python.org/simple/pyreadline : Błąd HTTP 407: Wymagane uwierzytelnienie serwera proxy (serwer ISA wymaga autoryzacji do realizacji żądania. Odmowa dostępu do filtru serwera proxy sieci Web).

NTLMaps może służyć do łączenia się z serwerem proxy NTLM, stając się pośrednim serwerem proxy.

Pobierz NTLMAP, zaktualizuj dołączony server.cfg, uruchom plik main.py, a następnie wskaż ustawienie proxy pip na 127.0.0.1 :.

Musiałem również zmienić te domyślne wartości w server.cfgpliku na:

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/

monkut
źródło
1

Możesz również napotkać problemy z certyfikatami z serwera proxy. Tutaj znajdziesz wiele odpowiedzi na temat odzyskiwania certyfikatu serwera proxy.

Na hoście z systemem Windows, aby umożliwić pipowi wyczyszczenie serwera proxy, możesz ustawić zmienną środowiskową, taką jak:

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

Możesz również użyć --certargumentu do PIPz tym samym wynikiem.

cincypiper
źródło
1

Miałem ten sam problem w zdalnym środowisku Windows. Wypróbowałem wiele rozwiązań znalezionych tutaj lub na innych podobnych postach, ale nic nie działało. Wreszcie rozwiązanie było dość proste. Musiałem ustawić za NO_PROXYpomocą cmd:

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

Musisz użyć podwójnych cudzysłowów i ustawić NO_PROXYwielkie litery. Możesz także dodać NO_PROXYjako zmienną środowiskową zamiast ustawiać ją za każdym razem, gdy używasz konsoli.

Mam nadzieję, że to pomoże, jeśli inne zamieszczone tutaj rozwiązanie zadziała.

Connected Wanderer
źródło
1

zainstaluj cntlm: Cntlm: Fast NTLM Authentication Proxy w C

Konfiguracja cntlm.ini:

Nazwa użytkownika ob66759

NAM domeny

Hasło jest tajne

Proxy proxy1.net:8080

Proxy proxy2.net:8080

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

Posłuchaj 3128

Zezwól 127.0.0.1

#Twoje IP

Zezwól 10.106.18.138

Zacznij to:

cntlm -v -c cntlm.ini

Teraz w 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

Pracuje!

Możesz również ukryć hasło: https://stormpoopersmith.com/2012/03/20/using-applications-behind-a-corporate-proxy/

Alex B.
źródło
1

ten sam problem na Windows10 i nowszych rozwiązaniach nie działają dla mnie.

użyj narzędzia konsoli emulatora, takiego jak, cygwina następnie zrób to w domyślny sposób linux:

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

i wszystko działa dobrze.

bucky
źródło
pod Windows 10, z uwierzytelniającym proxy, działa to dla mnie: używając cntlm jako pośredniego proxy, a następnie w monicie msdos: „set https_proxy = localhost: 3128”, a następnie „pip install -U setuptools == 41.0.1”
mrtexaz