Używanie pip za proxy z CNTLM

280

Próbuję użyć pip za serwerem proxy w pracy.

Jedna z odpowiedzi z tego postu sugerowała użycie CNTLM . Zainstalowałem i skonfigurowałem go dla tego innego posta , ale działamcntlm.exe -c cntlm.ini -I -M http://google.com spowodowało błąd Connection to proxy failed, bailing out.

Próbowałem też pip install -–proxy=user:pass@localhost:3128(domyślny port CNTLM), ale to podniosłemCannot fetch index base URL http://pypi.python.org/simple/ . Najwyraźniej coś jest nie tak z proxy.

Czy ktoś wie, jak bardziej ostatecznie sprawdzić, czy CNTLM jest poprawnie skonfigurowany, czy też istnieje inny sposób na obejście tego problemu? Wiem, że możesz również ustawić http_proxyzmienną środowiskową zgodnie z opisem tutaj, ale nie jestem pewien, jakie poświadczenia wprowadzić. Te z cntlm.ini?

Obrabować
źródło
2
Musisz znać adres IP swojego serwera proxy i numer portu i odpowiednio go ustawić w pliku cntlm.ini (również twoją nazwę użytkownika i hasło do serwera proxy, jeśli go masz)
numer 5
2
Napisałem blog na temat konfiguracji i korzystania z CNTLM. Wpis dotyczy Ubuntu i instalacji Railsów, ale myślę, że proces może być taki sam. Edycja: Przeczytaj ten artykuł na temat konfiguracji CNTLM dla Windows, w zasadzie tak samo jak w mojej wersji Ubuntu. HTH.
Annie Lagang

Odpowiedzi:

74

Aby skonfigurować CNTLM dla systemu Windows, postępuj zgodnie z tym artykułem . W przypadku Ubuntu przeczytaj mój post na blogu .

Edytować:

Zasadniczo, aby używać CNTLM na dowolnej platformie, musisz skonfigurować swoją nazwę użytkownika i zaszyfrowane hasło, zanim użyjesz go http://127.0.0.1:3128jako proxy dla nadrzędnego proxy.

  1. Edytuj konfigurację i dodaj ważne informacje, takie jak domena, nazwa użytkownika, hasło i nadrzędny serwer proxy.

  2. Wygeneruj zaszyfrowane hasło.

    Windows cntlm –c cntlm.ini –H

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

  3. Usuń zwykłe hasło tekstowe z konfiguracji i zastąp je wygenerowanymi hasłami.

Aby sprawdzić, czy działa:

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

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

Aby uzyskać bardziej szczegółowe instrukcje, patrz linki powyżej.

Aktualizacja:

Dla kompletności byłem w stanie ostatnio skonfigurować i używać CNTLM w systemie Windows. Wystąpił problem podczas synchronizacji Kindle na PC z powodu naszego serwera proxy, a instalacja i konfiguracja CNTLM dla Windows rozwiązała ten problem. Więcej informacji można znaleźć w moim artykule .

Annie Lagang
źródło
Jeśli ten przewodnik nie rozwiąże problemu, spróbuj uruchomić pip z opcją wiersza polecenia, --trusted-host pypi.python.orgktóra załatwiła sprawę .
Petr
1
Chciałbym tylko dodać do tego, że nie mogłem faktycznie uruchomić cntlm na Windowsie lub Macu w naszym środowisku korporacyjnym, ale zainstalowanie Fiddlera na komputerze z Windows i użycie go jako proxy rozwiązało problem.
Dean Meehan
268

W systemie Ubuntu nie mogłem uzyskać opcji proxy działającej zgodnie z reklamą, więc następujące polecenie nie działało:

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

Ale eksportowanie https_proxyzmiennej środowiskowej (zauważ, że https_proxynie jest http_proxy) rozwiązało problem:

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

następnie

sudo -E pip install somepackage
Sameer Vaidya
źródło
1
ustawienie https_proxy działa również w systemie Mac OS X.
Bharadwaj Srigiriraju,
4
to samo tutaj, --proxy nie działało, musiałem podać OBA http_proxy ORAZ https_proxy (Debian za zaporą ogniową)
marc.guenther
34
Dziękuję za uwzględnienie -Ew sudopoleceniu, które stale mnie rzuca, gdy zastanawiam się, dlaczego programy nie widzą mojej ENV.
AndyC
11
-E dodane do sudo zrobiło dla mnie lewę. Zachowuje zmienną środowiskową „http_proxy”, którą skonfigurowałem wcześniej. Dzięki!
imagineerTat
7
pip --proxy = someproxy-url: port install jakiś pakiet działał dla mnie w Win8.1 z pip 6.1.1
zenpoy
96

W systemie Windows nie zapomnij ustawić

SET HTTPS_PROXY=<proxyHost>:<proxyPort>

co musiałem ustawić

pip install pep8
k7sleeper
źródło
Działa na Fedorze również z 'export http_proxy = <proxy_host>: <port>'
Damien
5
Działa to dla mnie, ale tylko w formie SET HTTPS_PROXY = ht tps: // użytkownik: pass @ addr: port [minus miejsce, które musiałem dodać, aby zapobiec przepełnieniu stosu] i musiałem zamienić znaki specjalne w swoim haśle z hexem w postaci% nn
Seth
to działało dla mnie. wcześniej robiłem: SET HTTPS_PROXY=username:password@<proxyHost>:<proxyPort>i to nie działało.
Zahra
Czy ktoś ma wyjaśnienie, dlaczego zmienna środowiskowa jest potrzebna i jak jest używana przez pip? Dla conda wystarczy skonfigurować proxy w pliku .condarc.
maggie
1
Przykładowe połączenie wyglądałoby tak: SET HTTPS_PROXY = https://512893:Pass%[email protected]:6050dla nazwy użytkownika 512893i hasła pass#h98. Pamiętaj, aby URL zakodować znaki specjalne w haśle lub nazwie użytkownika ( #w tym przypadku). Może także spróbuj ustawić HTTP_PROXYflagę.
Nuhman,
65

To nie działało dla mnie. Musiałem używać https w pracy:

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

Aby zaktualizować, dodaj -U.

Hugo Salvador
źródło
1
To wydaje się być najprostszym rozwiązaniem dla systemu Windows, nie wymagającym żadnych dodatkowych pakietów.
JE Carter II
3
Jeśli potrzebujesz użyć hasła:pip install somepackage --proxy https://user:password@mydomain:port
Daniel R Carletti
A jeśli nie wiesz, co userumieścić, być może dlatego, że nie ma nic do dodania:pip install --proxy=https://mydomain:port somepackage
Olivier
45

Możesz nadal używać pip przez HTTPS, dodając certyfikat główny korporacji do pliku cacert.pem w folderze site-packages / pip. Następnie skonfiguruj pip, aby używał serwera proxy, dodając następujące wiersze do ~ / pip / pip.conf (lub ~ \ pip \ pip.ini, jeśli korzystasz z systemu Windows):

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

Otóż ​​to. Nie musisz używać pakietów innych firm ani rezygnować z HTTPS (oczywiście administrator sieci nadal może zobaczyć, co robisz).

djmoch
źródło
To zadziałało dla mnie, ale tylko po ręcznej instalacji pip, co oznacza, że ​​początkowo nie można użyć get-pip.py
Luke Dunstan
2
Aby znaleźć lokalizację pip.ini, zobacz pip.pypa.io/en/latest/user_guide.html#configuration W systemie Windows znalazłem cacert w „C: \ Python34 \ Lib \ site-packages \ pip_vendor \ Request \ cacert.pem”
lib
2
Ten pracował dla mnie ale nie mam pliku pip.config więc musiałem stworzyć jeden w ~/.pip/pip.confwtedy export PIP_CONFIG_FILE=/root/.pip/pip.confi moja instalacja pracowała! Dzięki!
Rhyuk
2
Dzięki, postawiłeś mnie na właściwej ścieżce! Do Twojej wiadomości, dla Pythona 3.7 w systemie Windows 7 plik certyfikatów PIP znajduje się najwyraźniej na [Python37]\Lib\site-packages\pip\_vendor\certifi\cacert.pem. Wyeksportuj certyfikat przechwytywania SSL swojego korporacji w formacie Base64 .cer, wklej klucz publiczny do tego pliku i voilà, pełne wsparcie https za korporacyjnym proxy.
Mike Strobel,
2
Twoja lokalizacja pip ini w AppData/Roaming/pip/pip.ini
systemie
27

dla Windowsa; ustaw serwer proxy w wierszu polecenia jako
set HTTP_PROXY=domain\username:password@myproxy:myproxyport

przykład:
set http_proxy=IND\namit.kewat:[email protected]:8880

namit
źródło
3
Co jeśli hasło ma specjalne znaki, takie jak! i @.
Ravi Kumar
1
uciec ze specjalnych znaków za pomocą bash escape char: \
Adam
1
Nie możesz wstawić znaku „@” w haśle za pomocą znaku zmiany znaczenia (), musisz zakodować go w adresie URL 40% w ciągu proxy.
Deep-B,
3
Potrzebowałem ustawić HTTP_PROXY = nazwa użytkownika: hasło @ myproxy: myproxyport zestaw HTTPS_PROXY = nazwa użytkownika: hasło @ myproxy: myproxyport
Seth
1
Ustawienie tej zmiennej środowiskowej wydaje się nie mieć wpływu na pip na moim komputerze
Jack M
26

Działa to dla mnie (w systemie Windows za pośrednictwem CMD):

pip install --proxy proxyserver:port requests
damian1baran
źródło
21
$ pip --proxy http://proxy-host:proxy-port install packagename

To nad tym działało dla mnie

Anand
źródło
4
Jest to bardzo przydatne, gdy tylko tymczasowo znajduje się za serwerem proxy. Musiałem także dodać swoją nazwę użytkownika i hasło do składni:pip --proxy http://username:password@proxy-host:proxy-port install <package>
Terrabits,
14

Zgodnie z naszą polityką bezpieczeństwa nie mogę używać https z pypi, inspekcja SSL przepisuje certyfikaty, narusza to wbudowane zabezpieczenia pip dla www.python.org. Mężczyzna pośrodku to administrator sieci.

Więc muszę użyć zwykłego http . Aby to zrobić, muszę zastąpić systemowe proxy, a także domyślne pypi:

bin/pip install --proxy=squidproxy:3128 -i http://www.python.org/pypi --upgrade "SQLAlchemy>=0.7.10"
bbaassssiiee
źródło
2
To już nie działa. PyPi automatycznie przekierowuje cię do https.
Martin M.
Kontrola SSL nie działa; może to być spowodowane przypięciem klucza lub tajemnicą przekazania?
bbaassssiiee
@SamuelHarmer. Securityma cztery sylaby. Za dużo dla Trumpa.
javadba
2
Myślę, że @bbaassssiiee może mówić, że jego pip złamał (w 2013 r.) HTTPS, ponieważ jego korporacyjny serwer proxy przepisuje wszystkie certyfikaty, aby użyć własnego certyfikatu głównego (aby mogli odszyfrować cały ruch SSL) i pip nie weryfikuje certyfikatu. Oczywiście w 2017 r. Pip automatycznie unika sprawdzania certyfikatu, gdy użyto opcji --proxy. Wiele korporacyjnych serwerów proxy już teraz skutecznie zmienia cały ruch na non-SSL, ponieważ nawet podczas nawigacji do stron SSL, proxy odbywa się za pośrednictwem proxy HTTP bez SSL.
cowbert
13

Otwórz wiersz polecenia systemu Windows.

Ustaw zmienne środowiskowe proxy.

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

Zainstaluj pakiety Python za pomocą proxy w tym samym wierszu polecenia systemu Windows.

pip install --proxy="user:password@proxy_ip:port" package_name
Jyoti Yadav
źródło
12

W systemie Windows 7:

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

to znaczy:

pip install --proxy BR\neo:p4ssw0rd@myproxyrocks.com.br:8080 virtualenv
Daniel
źródło
11

Telefon jako mobilny punkt dostępu / tethering przez USB

Jeśli mam duże problemy ze znalezieniem sposobu przez korporacyjny serwer proxy, łączę się z Internetem przez telefon (bezprzewodowy hotspot, jeśli mam Wi-Fi, tethering USB, jeśli nie) i robię szybkie pip install.

Może nie działać dla wszystkich konfiguracji, ale powinien skłonić większość ludzi do szczypania.

Tommy O'Dell
źródło
8

W Ubuntu 14.04 LTS

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

Twoje zdrowie

Rene Cejas Bolecek
źródło
7

Miałem ten sam problem: za korporacyjnym proxy z autoryzacją w pracy nie mogłem mieć pracy pip, jak również Sublime Text 2 (cóż, działało z niestandardową konfiguracją moich ustawień proxy). W przypadku pipa (i spróbuję tego na git) rozwiązałem go instalując proxy cntlm. Konfiguracja była bardzo prosta:

  1. Edytuj plik cntlm.ini
  2. Edytuj pola „Nazwa użytkownika”, „Domena”, „Hasło”
  3. Dodaj wiersz „Proxy” wraz z ustawieniami proxy: server:port
  4. Upewnij się, że wiersz „NoProxy” integruje „localhost” (domyślnie tak)
  5. Uwaga domyślny port: 3128
  6. Zapisz i to wszystko.

Aby sprawdzić, czy to działa, po prostu uruchom nowe narzędzie wiersza polecenia i spróbuj:

pip install django --proxy=localhost:3128

To działało dla mnie. Mam nadzieję, że to ci pomoże.

Bukiet Johan
źródło
6

Mogłem to osiągnąć, uruchamiając:

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

Używam Python 3.7.3 wewnątrz korporacyjnego proxy.

Nicolas Castro
źródło
5

jeśli chcesz zaktualizować pip przez proxy, możesz użyć (na przykład w systemie Windows):

python -m pip --proxy http://proxy_user:proxy_password@proxy_hostname:proxy_port insta
ll --upgrade pip
Nikołaj Baranenko
źródło
4

Dla użytkowników systemu Windows: jeśli chcesz zainstalować Flask-MongoAlchemy, użyj następującego kodu

pip install Flask-MongoAlchemy --proxy="http://example.com:port"**
Nitin Panwar
źródło
3

Jeśli łączysz się z Internetem za pośrednictwem serwera proxy, może wystąpić problem z uruchomieniem niektórych poleceń.

Ustaw zmienne środowiskowe dla konfiguracji proxy w wierszu polecenia w następujący sposób:

set http_proxy=http://username:password@proxyserver:proxyport
set https_proxy=https://username:password@proxyserver:proxyport
gii96
źródło
2

W CentOS (właściwie myślę, że wszystkie dystrybucje linuksowe są podobne) działa

env|grep http_proxy

i

env|grep https_proxy

sprawdź, jakie są dane wyjściowe tych poleceń (powinny one zawierać adresy serwera proxy).

Jeśli dane wyjściowe są puste lub mają nieprawidłowe wartości, zmodyfikuj je, na przykład:

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

Teraz spróbuj pobrać i zainstalować niektóre pakiety za pomocą pip:

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

i tak naprawdę nigdy nie spotkałem się ze sprawą, która nie działała. W niektórych systemach musisz być rootem (sudo to za mało).

Paweł Wojtal
źródło
2

Ostrzeżenie: w poleceniu „pip search” jest coś bardzo złego. Polecenie wyszukiwania nie korzysta z ustawienia proxy, niezależnie od sposobu jego przekazywania.

Próbowałem rozwiązać problem tylko podczas próby polecenia „szukaj” i znalazłem ten post ze szczegółowym wyjaśnieniem tego błędu: https://github.com/pypa/pip/issues/1104

Mogę potwierdzić, że błąd pozostaje w Pip 1.5.6 na Debianie 8 z Pythonem 2.7.9. Polecenie „pip install” działa jak urok.

Pivert
źródło
2

Dostałem błąd:

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

(Port serwera proxy to port ssh przekierowany na localhost:3128).

Musiałem ustawić serwery proxy HTTP i https, aby działały:

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

ponieważ http://pypi.python.org/simple/przekierowuje do, https://pypi.python.org/simpleale pipbłąd nie mówi.

wyblakłe
źródło
2

Nie jestem też w tym ekspertem, ale sprawiłem, że działało, ustawiając all_proxyzmienną w pliku ~ / .bashrc. Aby otworzyć ~/.bashrcplik i edytować go z terminala, uruchom następujące polecenia:

gedit ~/.bashrc &

Dodaj następujące na końcu pliku,

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

Następnie albo otwórz nowy terminal, albo biegnij w tym samym terminalu,

source ~/.bashrc

Samo ustawienie http_proxyi https_proxyzmienne nie wystarczą do prostego użycia pip install somepackage. Chociaż jakośsudo -E pip install somepackage działa, ale dało mi to pewien problem w przypadku, gdy korzystam z lokalnej instalacji Anacondy w folderze moich użytkowników.

PS - używam Ubuntu 16.04.

bytestorm
źródło
2

A może po prostu zrobić to lokalnie? Najprawdopodobniej możesz pobrać ze źródła https za pośrednictwem przeglądarki

  1. Pobierz plik modułu (mysql-connector-python-2.0.3.zip / gz ... itd.).
  2. Wyodrębnij go i przejdź do wyodrębnionego katalogu, w którym znajduje się setup.py, i wywołaj:

    C:\mysql-connector-python-2.0.3>python.exe setup.py install
Wyślij to
źródło
6
Ale potem musisz iść i zdobyć wszystkie zależności (i ich zależności, i ...) sam
jonrsharpe
1

Oto, co działa dla mnie:

pip --proxy proxy url:port command package
Brock Vond
źródło
1

Ustaw następującą zmienną środowiskową: export PIP_PROXY=http://web-proxy.mydomain.com

FTM
źródło
1

Jeśli używasz Linuksa, jako root:

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

Gdy używasz env, eksportuje zmienną https_proxy do bieżącego wykonania polecenia pip install.

$ web_proxy_ip to nazwa hosta lub adres IP serwera proxy $ web_proxy_ip to port

Adail Junior
źródło
0

Rozwiązałem problem z PIP w systemie Windows za pomocą „Fiddler” ( https://www.telerik.com/download/fiddler ). Po pobraniu i zainstalowaniu wykonaj następujące czynności:

„Reguły” => kliknij „Automatycznie uwierzytelnij”

Przykład: pip install virtualenv -proxy 127.0.0.1:8888

Wystarczy otworzyć monit i użyć.

https://github.com/pypa/pip/issues/1182 Wyszukaj „voltagex” (skomentowano 22 maja 2015)

Lucjusz Matos
źródło
0

dla Windows przejdź do C: /ProgramData/pip/pip.ini i ustaw

[światowy]

proxy = http: // YouKnowTheRest

z danymi twojego proxy. To trwale konfiguruje proxy dla pip.

Kwotan
źródło
0

Prostszym podejściem może być:

  1. Utwórz folder o nazwie „pip” w swoim $HOMEkatalogu.
  2. Utwórz plik o nazwie „pip.ini” (Windows) lub „pip.conf” (Linux) w katalogu utworzonym w kroku 1
  3. Skopiuj i wklej następujące wiersze pod pip.ini / pip.conf:

    [global]
    trusted-host = pypi.python.org
                   pypi.org
                   files.pythonhosted.org 
Jayant Kumar
źródło