Использование pip за прокси с CNTLM


280

Я пытаюсь использовать пип за прокси на работе.

Один из ответов из этого поста предложил использовать 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. НТН.
Энни Лаганг,

Ответы:


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 устранили эту проблему для меня. Обратитесь к моей статье для более подробной информации.


Если это руководство не решит вашу проблему, попробуйте запустить --trusted-host pypi.python.orgкоманду pip с параметром командной строки, что помогло мне.
Петр

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 тоже.
Бхарадвад Сригирираджу

4
то же самое здесь, --proxy не работал, мне пришлось указать ОБА http_proxy И https_proxy (Debian за межсетевым экраном corp)
marc.guenther

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

11
-Добавлено в судо сделал трюк для меня. Он сохраняет переменную среды "http_proxy", которую я установил ранее. Спасибо!
воображение, что

7
pip --proxy = someproxy-url: установка порта some-package у меня работала в Win8.1 с pip 6.1.1
zenpoy

96

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

SET HTTPS_PROXY=<proxyHost>:<proxyPort>

что мне нужно было установить для

pip install pep8

Работает на fedora также с 'export http_proxy = <proxy_host>: <port>'
Дэмиен

5
Это сработало для меня, но только в форме SET HTTPS_PROXY = ht tps: // user: 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-packages / pip. Затем настройте pip для использования вашего прокси, добавив следующие строки в ~ / pip / pip.conf (или ~ \ pip \ pip.ini, если вы используете Windows):

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

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


Это сработало для меня, но только после ручной установки pip, что означает, что вы не можете использовать get-pip.py изначально
Luke Dunstan

2
Расположение pip.ini см. В pip.pypa.io/en/latest/user_guide.html#configuration. В Windows я нашел cacert в "C: \ Python34 \ Lib \ site-packages \ pip_vendor \ запросы \ cacert.pem"
Либ

2
Это работает для меня , но я не есть файл pip.config , так что я должен был создать в ~/.pip/pip.confто export PIP_CONFIG_FILE=/root/.pip/pip.confи моя установка работала! Спасибо!
Rhyuk

2
Спасибо, вы поставили меня на правильный путь! К вашему сведению, для Python 3.7 в Windows 7 файл сертификатов pip, по-видимому, находится по адресу [Python37]\Lib\site-packages\pip\_vendor\certifi\cacert.pem. Экспортируйте сертификат перехвата SSL вашей корпорации в формате Base64 .cer, вставьте открытый ключ в этот файл и вуаля, полная поддержка https за корпоративным прокси.
Майк Штробель

2
Ваше местоположение пип-ини на окнах может быть 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
избежать специальных символов с помощью символа bash escape: \
Адам

1
Вы не можете экранировать «@» в своем пароле с помощью escape-символа (), вам нужно url кодировать его в% 40 в строке прокси.
Deep-B


1
Установка этой переменной среды, похоже, не влияет на pip на моей машине
Джек М

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 . Для этого мне нужно переопределить системный прокси, а также Pypi по умолчанию:

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

2
Это больше не работает. PyPi теперь автоматически перенаправляет вас на https.
Мартин М.

Проверка SSL не работает; Может ли это быть из-за закрепления ключа или секретности?
bbaassssiiee

@SamuelHarmer. Securityимеет четыре слога. Слишком много для Трампа.
Джавадба

2
Я думаю, что @bbaassssiiee может сказать, что его пипс (в 2013 году) сломался с HTTPS, потому что его корпоративный прокси переписывает все сертификаты, чтобы использовать их собственный корневой сертификат (чтобы они могли дешифровать весь трафик SSL), и pip не проходит проверку сертификата. Конечно, в 2017 году pip автоматически избегает проверки сертификатов при использовании --proxy. Многие корпоративные прокси-серверы в любом случае уже эффективно изменяют весь ваш трафик на не-SSL, потому что даже при переходе на сайты SSL вы используете прокси-сервер через HTTP-прокси без SSL.
ковбер

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

У меня была та же проблема: за корпоративным прокси с аутентификацией на работе у меня не могло быть работы 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

Установите переменную invironment в Дополнительные параметры системы. В командной строке он должен вести себя так:

C: \ Windows \ system32> echo% http_proxy%

Http: // имя пользователя: passowrd @ прокси: порт

C: \ Windows \ system32> echo% https_proxy%

Http: // имя пользователя: пароль @ прокси: порт

Позже просто 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

и на самом деле я никогда не встречал случая, когда это не сработало. Для некоторых систем вам нужно быть рутом (sudo недостаточно).


2

Предупреждение, что-то очень плохое с командой "pip search". Команда поиска не использует настройку прокси независимо от способа ее передачи.

Я пытался выяснить проблему, только попробовав команду «поиск», и нашел этот пост с подробным объяснением этой ошибки: https://github.com/pypa/pip/issues/1104.

Я могу подтвердить, что ошибка остается в пипе 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 install.

$ 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/issues/1182 Поиск по запросу «Voltagex» (комментарий от 22 мая 2015 г.)


0

для окон перейдите в C: /ProgramData/pip/pip.ini и установите

[Глобальный]

proxy = http: // YouKnowTheRest

с вашими данными прокси. Это постоянно настраивает прокси для pip.


0

Более простой подход может быть:

  1. Создайте папку с именем «pip» в вашем $HOMEкаталоге.
  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.