Як використовувати pip на вікнах за автентифікуючим проксі


90

На моєму комп’ютері Windows працює за проксі-сервером на сервері Windows (з використанням активного каталогу), і я не можу зрозуміти, як пройти через нього pip(у python3). Я спробував використати --proxy, але це все ще просто тайм-аути. Я також намагався встановити тривалий тайм-аут (60-ті), але це не мало значення. Мої налаштування проксі правильні, і я порівняв їх із тими, які я успішно використовую в TortoiseHG, щоб переконатися.

Чи є якісь інші хитрощі, про які я можу спробувати, чи я маю деякі обмеження pipщодо проксі-серверів Windows?

Оновлення: Мої невдалі спроби включали пошук pypi. Я щойно спробував насправді щось встановити, і це спрацювало. Пошук все ще не вдається. Це вказує на помилку pipабо вони працюють інакше?

Відповіді:


107

Я спробував 2 варіанти, які обидва працюють на автентифікованому проксі-сервері моєї компанії NTLM. Варіант 1 - використовувати--proxy http://user:pass@proxyAddress:proxyPort

Якщо у вас все ще виникають проблеми, я б запропонував встановити службу автентифікації через проксі (я використовую CNTLM ) і навести на неї піп, тобто щось на зразок--proxy http://localhost:3128


1
Інструмент CNTLM активно підтримується і, здається, працює дуже добре.
Міхал Фіта

6
Я не міг змусити це працювати, незважаючи на всі попередні умови, які я робив
eusoubrasileiro

2
Якщо у вашому паролі чи імені користувача є спеціальні символи, просто уникніть цього знаком \ перед спеціальним символом. Це чудово працює.
Арокія

я правильно розумію це, що ви говорите pip відправити запит проксі-серверу, провіривши себе за допомогою вказаного користувача та пароля через з'єднання http? Це означає, що ваш пароль буде надісланий незашифрованим на проксі-сервер, так !? Мені здається, це великий ризик для безпеки або я чогось пропускаю?
Роберт

Для мене це працювало з брандмауером Microsoft Forefront
Рауль Салінас-Монтеагудо,

65

Мені знадобилося кілька годин, щоб зрозуміти це, але нарешті я змусив його працювати за допомогою CNTLM, а потім змусив його працювати лише з файлом налаштування pip. Ось як я змусив його працювати з файлом конфігурації pip ...

Рішення:

1. У Windows перейдіть до каталогу профілю користувача (наприклад, C: \ Users \ Sync) і створіть папку з назвою " pip "

2. Створіть у цьому каталозі файл із назвою " pip.ini " (Наприклад, C: \ Users \ Sync \ pip \ pip.ini) і введіть у нього таке:

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

Замініть [ім’я домену] , [ім’я користувача] , [пароль] , [адресу проксі] та [порт проксі] на вашу власну інформацію.

Зверніть увагу, якщо у вашому [доменному імені] , [імені користувача] чи [паролі] є спеціальні символи, вам потрібно кодувати відсотки | закодуйте їх.

3. На цьому етапі я зміг запустити " pip install " без жодних проблем.

Сподіваємось, це працює і для інших!

PS: Це може викликати загрозу безпеці через те, що ваш пароль зберігається у вигляді простого тексту. Якщо це проблема, спробуйте налаштувати CNTLM, використовуючи цю статтю (дозволяє використовувати хешований пароль замість простого тексту). Потім встановити proxy = 127.0.0.1:3128у згаданому вище файлі "pip.ini".


2
Більше про розташування pip.ini можна дізнатися тут . Ви можете встановити PIP_CONFIG_FILEзмінну середовища для вказівки на файл
pip.ini

1
Любіть це !!!! настільки чисто - пам’ятайте, що більшість довірених осіб дозволять вам вводити пароль вручну. НІКОЛИ не залишайте свій пароль у чистому тексті!
avgvstvs

1
Тут можна додати ще одне дуже важливе глобальне налаштування - дзеркальний сайт, наприклад, додавання "index-url = pypi.tuna.tsinghua.edu.cn/simple " значно збільшить швидкість завантаження піп у КНР. А відповідний файл під Linux - ~ / .pip / pip.conf
TingQian LI

4
що таке [доменне ім'я]?
Алекс Б

1
@AlexB, [доменне ім'я] відноситься до вашого доменного імені Windows
Майк Пеннінгтон,

45

Ось як я це налаштував:

  1. Відкрийте командний рядок (CMD) як адміністратор.
  2. Експортуйте налаштування проксі-сервера:

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

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

  3. Встановіть пакет, який ви хочете встановити:

    pip install PackageName

Наприклад:

Приклад


4
Це, безумовно, перше, що слід спробувати. Python є крос-платформним, і це еквівалентно тому, що ми зазвичай робимо в Linux. Були проблеми в Windows (за тим самим проксі-сервером), де --proxyаргумент просто не мав би його взагалі, але стандартний підхід env var працював вперше. Для запису ми також вирішили no_proxyуникати інших внутрішніх запитів, які намагаються вийти через проксі.
randomsock

не працює для мене на win10. використовувати інструмент емулятор консолі , як cygwinабо , cmderа потім зробити це в Linux так: export http_proxy=<proxy>і , export https_proxy=<proxy>а потім просто зробитиpip install <package>
Баки

Це працювало для мене, але --proxyпрапор командного рядка ніколи не працював. Windows 10.
AmbroseChapel

15

Я зіткнувся з тією ж проблемою у Windows 7. Мені вдалося змусити його працювати, створивши папку "pip" із файлом "pip.ini" всередині. Я помістив цю папку всередину "C: \ Users \ {my.username} \ AppData \ Roaming", оскільки згідно з документацією Python:

У Windows конфігураційним файлом є% APPDATA% \ pip \ pip.ini

У файлі pip.ini у мене є лише:

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

Тож немає імені користувача: пароля. І це працює чудово.


1
У моєму випадку це працює лише в тому випадку, якщо я вказав своє ім'я користувача та пароль у чистому тексті у цьому файлі ...: / Чому все інше з CMD працює як "ping XYZ". Чому pip не використовує налаштування IE?
hmrc87

7

У мене була подібна проблема, і я виявив, що моя компанія використовує автентифікацію проксі-сервера NTLM. Якщо ви бачите цю помилку у своєму pip.log, можливо, проблема в цьому:

Не вдалося отримати URL-адресу http://pypi.python.org/simple/pyreadline : Помилка HTTP 407: Потрібна автентифікація проксі-сервера (Сервер ISA вимагає авторизації для виконання запиту. Доступ до фільтра веб-проксі відмовлено.)

NTLMaps можна використовувати для взаємодії з проксі-сервером NTLM, ставши проміжним проксі.

Завантажте NTLMAP, оновіть доданий server.cfg, запустіть файл main.py, а потім вкажіть проксі-налаштування pip на 127.0.0.1 :.

Мені також потрібно було змінити ці значення за замовчуванням у server.cfgфайлі на:

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/


1

Ви також можете зіткнутися з проблемами із сертифікатами вашого проксі-сервера. Тут є безліч відповідей про те, як отримати сертифікат проксі-сервера.

На хості Windows, щоб дозволити pip очистити ваш проксі, ви можете встановити змінну середовища, таку як:

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

Ви також можете використовувати --certаргумент для PIPз тим самим результатом.


1

У мене була та ж проблема у віддаленому середовищі Windows. Я спробував багато рішень, знайдених тут або на інших схожих постах, але нічого не вдалося. Нарешті, рішення було досить простим. Мені довелося встановити за NO_PROXYдопомогою cmd:

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

Ви повинні використовувати подвійні лапки та встановлювати NO_PROXYвеликі регістри. Ви також можете додати NO_PROXYяк змінну середовища, замість того, щоб встановлювати її кожного разу, коли ви використовуєте консоль.

Сподіваюся, це допоможе, якщо будь-яке інше рішення, розміщене тут, спрацює.


1

встановити cntlm: Cntlm: Швидкий проксі-сервер автентифікації NTLM в C

Налаштуйте cntlm.ini:

Ім'я користувача ob66759

NAM домену

Пароль секретний

Проксі proxy1.net:8080

Проксі proxy2.net:8080

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

Слухай 3128

Дозвольте 127.0.0.1

# ваш IP

Дозвольте 10.106.18.138

запустити:

cntlm -v -c cntlm.ini

Зараз у 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

працює!

Ви також можете приховати пароль: https://stormpoopersmith.com/2012/03/20/using-applications-behind-a-corporate-proxy/


1

одна і та ж проблема у Windows10 і вище рішення для мене не працюють.

скористайтеся інструментом консолі емулятора, наприклад, cygwinа потім виконайте це за замовчуванням в Linux:

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

і все працює нормально.


в ОС Windows 10, з автентифікаційним проксі, це працює для мене: використання cntlm як проміжного проксі-сервера, потім у підказці msdos: "set https_proxy = localhost: 3128", а потім "pip install -U setuptools == 41.0.1"
mrtexaz
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.