Використання pip за проксі-сервером із CNTLM


280

Я намагаюся використовувати pip за проксі-сервером на роботі.

Один із відповідей із цього допису запропонував використовувати CNTLM . Я встановив і налаштував його на цій іншій публікації , але запуск cntlm.exe -c cntlm.ini -I -M http://google.comдав помилкуConnection to proxy failed, bailing out .

Я також спробував pip install -–proxy=user:pass@localhost:3128(порт CNTLM за замовчуванням), але це піднялоCannot fetch index base URL http://pypi.python.org/simple/ . Очевидно, що щось не вдається з проксі.

Хтось знає, як перевірити, чи CNTLM налаштований правильно, чи взагалі існує інший спосіб? Я знаю , що ви також можете встановити http_proxyзмінну оточення , як описано тут , але я не впевнений , що облікові дані , щоб покласти в. Тих , кого з cntlm.ini?


2
Вам потрібно знати IP-адресу вашого проксі-сервера та номер порту та встановити його відповідно у своєму cntlm.ini (Також ваше ім'я користувача та пароль для проксі, якщо у вас є)
number5

2
Я написав блог про те, як налаштувати та використовувати CNTLM. Допис призначений для Ubuntu та встановлення Rails, але я думаю, що процес може бути однаковим. Редагувати: Прочитайте цю статтю про те, як налаштувати CNTLM для Windows, в основному, це відповідає моїй версії Ubuntu. HTH.
Annie Lagang

Відповіді:


74

Щоб налаштувати CNTLM для Windows, дотримуйтесь цієї статті . Для Ubuntu читайте мою публікацію в блозі .

Редагувати:

В основному, щоб використовувати CNTLM на будь-якій платформі, вам потрібно встановити своє ім’я користувача та пароль хешу , перш ніж використовувати http://127.0.0.1:3128як проксі до свого батьківського проксі.

  1. Відредагуйте конфігурацію та додайте важливу інформацію, наприклад домен, ім’я користувача, пароль та батьківський проксі.

  2. Створити хешований пароль.

    Windows cntlm –c cntlm.ini –H

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

  3. Видаліть звичайний текстовий пароль із конфігурації та замініть їх на створені паролі.

Щоб перевірити, чи працює:

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

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

Більш докладні вказівки див. Посилання вище.

Оновлення:

Тільки задля повноти, я нещодавно зміг налаштувати та використовувати CNTLM у Windows. Під час синхронізації Kindle для ПК я зіткнувся з проблемою через наш проксі, встановлення та налаштування CNTLM для Windows. Детальнішу інформацію див. У моїй статті .


Якщо цей посібник не вирішує вашу проблему, спробуйте запустити pip з параметром командного рядка, --trusted-host pypi.python.orgякий зробив для мене трюк.
Петро

1
Я просто хотів би додати до цього, що я фактично не міг змусити cntlm працювати на Windows або Mac у нашому корпоративному середовищі, але встановивши Fiddler на машині Windows і використовуючи його як проксі вирішив проблему.
Дін Механ

268

З Ubuntu я не зміг отримати можливість проксі-сервера працювати як рекламоване - тому наступна команда не працювала:

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

Але експорт https_proxyзмінної середовища (зауважимо, що https_proxyне http_proxy) зробив свою справу:

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

тоді

sudo -E pip install somepackage

1
налаштування https_proxy також виконує завдання в Mac OS X.
Bharadwaj Srigiriraju

4
тут же, --proxy не працював, мені довелося вказати БОТУ http_proxy AND https_proxy (Debian за корпоративної брандмауером)
marc.guenther

34
Дякую, що включили -Eдо sudoкоманди, яка постійно кидає мене, коли мені цікаво, чому програми не бачать мого ENV.
AndyC

11
-Е додав, що судо зробив для мене трюк. Він зберігає змінну середовища "http_proxy", яку я створив раніше. Дякую!
ImaerThat

7
pip --proxy = someproxy-url: порт встановив якийсь пакет, який працював на мене у Win8.1 з pip 6.1.1
zenpoy

96

Під Windows не забудьте встановити

SET HTTPS_PROXY=<proxyHost>:<proxyPort>

що мені потрібно було встановити

pip install pep8

Працює на Fedora також з 'експортом http_proxy = <proxy_host>: <port>'
Дамієн

5
Це працювало для мене, але лише у формі SET HTTPS_PROXY = ht tps: // користувач: pass @ addr: port [мінус простір, який я повинен був додати, щоб утримати stackoverflow від його видалення], і мені довелося замінити спеціальні символи в моєму паролі з шістнадцятковою формою% nn
Сет

це працювало для мене. раніше я робив: SET HTTPS_PROXY=username:password@<proxyHost>:<proxyPort>і це не працювало.
Захра

Хтось має пояснення, чому потрібна змінна середовища та як її використовує pip? Для conda його досить, щоб налаштувати проксі у файлі .condarc.
Меггі

1
Приклад дзвінка виглядатиме так: SET HTTPS_PROXY = https://512893:Pass%23h98@proxy.example.com:6050для імені користувача 512893та пароля pass#h98. Пам’ятайте, що URL-адреса кодує спеціальні символи паролем чи ім’ям користувача ( #у цьому випадку) Можливо, спробуйте також встановити HTTP_PROXYпрапор.
Нухман

65

Це не працювало для мене. Мені довелося використовувати https на роботі:

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

Для оновлення додайте -U.


1
Це здається найпростішим рішенням для Windows, не вимагаючи додаткових пакетів.
JE Carter II

3
Якщо вам потрібно скористатися паролем:pip install somepackage --proxy https://user:password@mydomain:port
Daniel R Carletti

А якщо ви не знаєте, що userпоставити, можливо, це тому, що нема чого поставити:pip install --proxy=https://mydomain:port somepackage
Олів'є

45

Ви можете продовжувати використовувати pip через HTTPS, додавши кореневий сертифікат вашої корпорації до файлу cacert.pem у папці site-пакети / pip. Потім налаштуйте pip для використання вашого проксі, додавши наступні рядки до ~ / pip / pip.conf (або ~ \ pip \ pip.ini, якщо ви працюєте в Windows):

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

Це воно. Не потрібно використовувати сторонні пакети або відмовлятися від HTTPS (звичайно, ваш мережевий адміністратор все ще може бачити, що ви робите).


Це працювало для мене, але лише після встановлення pip вручну, а це означає, що ви не можете використовувати get-pip.py спочатку
Люк Данстан

2
Про місцезнаходження pip.ini див. Pip.pypa.io/en/latest/user_guide.html#configuration У Windows я знайшов cacert у "C: \ Python34 \ Lib \ site-пакети \ pip_vendor \ request \ cacert.pem"
lib

2
Це працювало для мене, але у мене не було файлу pip.config, тому мені довелося створити його ~/.pip/pip.confтоді, export PIP_CONFIG_FILE=/root/.pip/pip.confі моя установка спрацювала! Дякую!
Рюк

2
Дякую, ти поставив мене на правильний шлях! FYI, для Python 3.7 у файлі сертифікатів піп Windows 7, очевидно, знаходиться за адресою [Python37]\Lib\site-packages\pip\_vendor\certifi\cacert.pem. Експортуйте сертифікат SSL-перехоплення вашого corp у форматі Base64 .cer, вставте відкритий ключ у цей файл та voilà, повну підтримку https за корпоративним проксі.
Майк Стробель

2
Можливо, ваше місцезнаходження у програмі Windows AppData/Roaming/pip/pip.ini.... ....
Ерік Аронесті

27

для вікон; встановити проксі-сервера в командному рядку як
set HTTP_PROXY=domain\username:password@myproxy:myproxyport

приклад:
set http_proxy=IND\namit.kewat:xl123456@192.168.180.150:8880


3
Що робити, якщо пароль має спеціальні символи, такі як! і @.
Раві Кумар

1
уникнути спеціальних знаків із баш-рятувальником: \
Адам

1
Ви не можете уникнути "@" у своєму паролі з символом escape (), вам потрібно url-кодувати його до% 40 у рядку проксі-сервера.
Глибокий-Б

3
Мені потрібно встановити HTTP_PROXY = ім'я користувача: пароль @ myproxy: встановити myproxyport HTTPS_PROXY = ім'я користувача: пароль @ myproxy: myproxyport
Seth

1
Налаштування цієї змінної середовища, схоже, не впливає на піп на моїй машині
Jack M

26

Це працювало для мене (у Windows через CMD):

pip install --proxy proxyserver:port requests

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

Це те, що працювало на мене


4
Це дійсно корисно, коли лише тимчасово стоїть за проксі-сервером. Я також повинен був додати своє ім’я користувача та пароль до синтаксису:pip --proxy http://username:password@proxy-host:proxy-port install <package>
Terrabits

14

Відповідно до нашої політики безпеки я не можу використовувати https з pypi, SSL-інспекція переписує сертифікати, це порушує вбудовану безпеку pip для www.python.org. Чоловік посередині - мережевий адміністратор.

Тому мені потрібно використовувати звичайний http . Для цього мені потрібно змінити системний проксі, а також піпі за замовчуванням:

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

2
Це більше не працює. PyPi тепер автоматично пересилає вас до https.
Мартін М.

Здається, інспекція SSL не працює; це може бути тому, що ключове закріплення або передача секретності?
bbaassssiiee

@SamuelHarmer. Securityмає чотири склади. Занадто багато для Трампа.
javadba

2
Я думаю, що @bbaassssiiee, можливо, говорить про те, що його піп зламався (у 2013 році) з HTTPS, оскільки його корпоративний проксі переписує всі серти, щоб використовувати їх власний кореневий сертифікат (щоб вони могли розшифрувати весь трафік SSL) і піп не вдався до перевірки cert. Звичайно, у 2017 році Pip автоматично уникає перевірки сертифікатів, коли --proxy використовується. Багато корпоративних проксі-сервісів вже фактично змінюють весь ваш трафік на не-SSL, оскільки навіть під час навігації на SSL-сайти ви здійснюєте доступ через не-SSL HTTP-проксі.
коуберт

13

Відкрийте командний рядок Windows.

Встановити змінні середовища проксі.

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

Встановіть пакети Python за допомогою проксі-сервера в той же командний рядок Windows.

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

12

У Windows 7:

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

тобто:

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

11

Телефон як мобільний гарячу точку / прив'язку через USB

Якщо у мене є багато проблем з пошуком способу через корпоративний проксі, я підключаюсь до Інтернету через свій телефон (бездротова точка доступу, якщо у мене є Wi-Fi, USB-зв’язок, якщо ні) і швидко виконувати pip install .

Можливо, це працює не для всіх налаштувань, але більшість людей повинні змусити їх просто.



7

У мене була така ж проблема: за корпоративним проксі-сервером з auth на роботі я не міг працювати з pip, а також з Sublime Text 2 (ну, це працювало з налаштуваннями моїх налаштувань проксі). Для pip (і я спробую це на git), я вирішив його, встановивши проксі cntlm. Конфігурувати було дуже просто:

  1. Редагувати cntlm.ini
  2. Відредагуйте поля "Ім'я користувача", "Домен", "Пароль"
  3. Додайте рядок "Проксі" із налаштуваннями проксі: server:port
  4. Переконайтеся, що рядок "NoProxy" інтегрує "localhost" (наприклад, за замовчуванням)
  5. Зверніть увагу на типовий порт: 3128
  6. Збережіть і все.

Щоб перевірити це, просто запустіть новий інструмент командного рядка та спробуйте:

pip install django --proxy=localhost:3128

Це працювало для мене. Сподіваюся, що це вам допоможе.


6

Я міг досягти цього, запустивши:

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

Я використовую Python 3.7.3 всередині корпоративного проксі.


5

Налаштуйте змінну навколишнього середовища в Додаткові параметри системи. У командному рядку він повинен вести себе так:

C: \ Windows \ system32> echo% http_proxy%

http: // ім'я користувача: passowrd @ proxy: port

C: \ Windows \ system32> echo% https_proxy%

http: // ім'я користувача: password @ proxy: порт

Пізніше просто pip install whatEverповинно працювати.


5

якщо ви хочете оновити pip за допомогою проксі, можна використовувати (наприклад, у Windows):

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

4

Для користувачів Windows: якщо ви хочете встановити Flask-MongoAlchemy, використовуйте наступний код

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

3

Якщо ви підключаєтесь до Інтернету за допомогою проксі, може виникнути проблема із запуском деяких команд.

Встановіть змінні середовища для конфігурації проксі в командному рядку наступним чином:

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

2

У CentOS (насправді я думаю, що всі дистрибутиви Linux схожі) запустіть

env|grep http_proxy

і

env|grep https_proxy

перевірте, що є результатом цих команд (вони повинні містити ваші проксі-адреси).

Якщо виходи порожні або мають неправильні значення, змініть їх, наприклад:

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

Тепер спробуйте взяти і встановити деякі пакети, використовуючи pip:

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

і насправді я ніколи не зустрічав випадку, коли це не працювало. Для деяких систем вам потрібно бути root (судо недостатньо).


2

Попередження, в команді "пошук піп" є щось дуже погане. Команда пошуку не використовує налаштування проксі, незалежно від способу передачі.

Я намагався вирішити проблему лише намагаючись команду "search" і знайшов цю публікацію з детальним поясненням про цю помилку: https://github.com/pypa/pip/isissue/1104

Я можу підтвердити залишки помилок за допомогою pip 1.5.6 на Debian 8 з python 2.7.9. Команда "pip install" працює як шарм.


2

Я отримав помилку:

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

(Порт проксі-сервера передається на порт ssh localhost:3128 ).

Мені довелося встановити як http, так і https проксі, щоб це працювало:

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

як http://pypi.python.org/simple/перенаправлення на, https://pypi.python.org/simpleале pipпомилка не каже вам.


2

Я також не є експертом у цьому, але я змусив його працювати, встановивши all_proxyзмінну у файлі ~ / .bashrc. Щоб відкрити ~/.bashrcфайл і відредагувати його з термінального запуску, виконуючи наступні команди,

gedit ~/.bashrc &

Додайте наступне в кінці файлу,

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

Потім відкрийте новий термінал або запустіть наступний термінал,

source ~/.bashrc

Простого налаштування http_proxyта https_proxyзмінних недостатньо для простого використання pip install somepackage. Хоча якимось чином sudo -E pip install somepackageпрацює, але це створило мені певну проблему, якщо я використовую локальну установку Anaconda у папці своїх користувачів.

PS - я використовую Ubuntu 16.04.


2

Як щодо того, щоб це зробити лише локально? Швидше за все, ви можете завантажити з https-джерела через браузер

  1. Завантажте файл свого модуля (mysql-connector-python-2.0.3.zip / gz ... тощо).
  2. Витягніть його та перейдіть до витягнутого режиму, де знаходиться setup.py, та зателефонуйте:

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

6
Але тоді вам доведеться піти і отримати всі залежності (і їх залежності, і ...) самостійно
jonrsharpe


1

Встановіть таку змінну середовища: export PIP_PROXY=http://web-proxy.mydomain.com


1

Якщо ви використовуєте Linux як root:

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

Якщо ви використовуєте env, він експортує змінну https_proxy для поточного виконання команди установки pip.

$ web_proxy_ip - ім'я хоста або IP вашого проксі $ web_proxy_port - Порт


0

Я вирішив проблему з PIP в Windows за допомогою "Fiddler" ( https://www.telerik.com/download/fiddler ). Після завантаження та встановлення виконайте наступне:

"Правила" => натисніть "Автоматично підтвердити автентифікацію"

Приклад: pip install virtualenv -proxy 127.0.0.1:8888

Просто відкрийте своє запит і скористайтеся.

https://github.com/pypa/pip/isissue/1182 Шукати "voltagex" (коментується 22 травня 2015 р.)


0

для Windows перейдіть до C: /ProgramData/pip/pip.ini та встановіть

[глобальний]

проксі = http: // YouKnowTheRest

з вашими реквізитами проксі. Це конфігурує проксі-сервер для pip.


0

Більш простим підходом може бути:

  1. Створіть у своєму $HOMEкаталозі папку з назвою "pip" .
  2. Створіть файл з назвою "pip.ini" (Windows) або "pip.conf" (Linux) у каталозі, створеному на кроці 1
  3. Скопіюйте та вставте наступні рядки під pip.ini / pip.conf:

    [global]
    trusted-host = pypi.python.org
                   pypi.org
                   files.pythonhosted.org 
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.