Как использовать pip в окнах за аутентификационным прокси

90

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

Есть ли какие-нибудь другие уловки, о которых я могу попробовать, или есть какие-то ограничения в pipотношении прокси-серверов Windows?

Обновление: мои неудачные попытки включали поиск pypi. Я только что попытался установить что-то, и это сработало. Однако поиск по-прежнему не работает. Указывает ли это на ошибку pipили они работают по-другому?

водоросли
источник

Ответы:

107

Я пробовал 2 варианта, которые работают на прокси-сервере с проверкой подлинности NTLM моей компании. Вариант 1 - использовать--proxy http://user:pass@proxyAddress:proxyPort

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

Рассел
источник
1
Инструмент CNTLM активно поддерживается и, похоже, действительно хорошо работает.
Михал Фита,
6
Я не мог заставить его работать,
несмотря на все попытки, которые
2
Если в вашем пароле или имени пользователя есть специальные символы, просто экранируйте их с помощью \ перед специальным символом. Работает нормально.
Arockia
правильно ли я понимаю, что вы говорите pip отправить запрос на прокси, аутентифицируясь с заданным пользователем и паролем через http-соединение? Это означает, что ваш пароль будет отправлен на прокси-сервер в незашифрованном виде, верно !? Для меня это большая угроза безопасности или я что-то упускаю?
Роберт
У меня это сработало с брандмауэром Microsoft Forefront
Рауль Салинас-Монтеагудо
66

Мне потребовалось несколько часов, чтобы разобраться в этом, но я наконец заставил его работать с использованием 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 09
1
Здесь можно добавить еще одну очень важную глобальную настройку - это зеркальный сайт, например, добавление "index-url = pypi.tuna.tsinghua.edu.cn/simple " значительно увеличит скорость загрузки пакетов в КНР, Китай. И соответствующий файл под Linux - ~ / .pip / pip.conf
TingQian LI
4
что такое [доменное имя]?
Alex B
1
@AlexB, [доменное имя] относится к вашему доменному имени Windows
Майк Пеннингтон
46

Вот как я это настроил:

  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 02
у меня не работает на win10. использовать инструмент эмулятор консоли , как cygwinили , cmderа затем сделать это в Linux так: export http_proxy=<proxy>и , export https_proxy=<proxy>а затем просто сделатьpip install <package>
Баки
Это сработало для меня, но --proxyфлаг командной строки никогда не работал. Windows 10.
AmbroseChapel 08
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]

Так что нет логина: пароля. И он работает нормально.

stann1
источник
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/

монкут
источник
2

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

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

Вы должны использовать двойные кавычки и использовать NO_PROXYверхний регистр. Вы также можете добавить NO_PROXYв качестве переменной среды вместо того, чтобы устанавливать ее каждый раз при использовании консоли.

Надеюсь, это поможет, если работает любое другое решение, размещенное здесь.

Связанный странник
источник
1

Вы также можете столкнуться с проблемами с сертификатами от вашего прокси. Здесь есть множество ответов о том, как получить сертификат вашего прокси.

На хосте Windows, чтобы позволить pip очищать ваш прокси-сервер, вы можете установить переменную среды, такую ​​как:

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

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

чепчик
источник
1

установить cntlm: Cntlm: Fast NTLM Authentication Proxy на 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
0

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

pip --proxy https://domain%5Cuser:password@proxy:port install -r requirements.txt
НемецкийСнайпер
источник
0

Для меня проблема заключалась в среде conda. Скорее всего, он использовал команду pip из среды conda («где pip» указывал на среду conda). Настройка прокси-сервера через --proxy или установка http_proxy не помогли.

Вместо этого помогло простое открытие нового CMD и выполнение там «pip install».

Геббиссимо
источник