pip, прокси-аутентификация и неподдерживаемая прокси-схема

Попытка установить pip на новую установку python. Я застрял с ошибками прокси. Похоже на ошибку в get-pip или urllib3??

Вопрос в том, нужно ли мне пройти через настройку CNTLM, как описано здесь или есть ярлык?

В документации get-pip.py говорится, что используйте параметр --proxy="[user:passwd@]proxy.server:port" для указания прокси-сервера и соответствующей аутентификации. Но похоже, что pip передает все это как есть urllib3, который интерпретирует «myusr» как схему URL-адреса из-за «:», я думаю (?).

C:\ProgFiles\Python27>get-pip.py --proxy myusr:[email protected]:80
Downloading/unpacking pip
Cleaning up...
Exception:
Traceback (most recent call last):
  File "c:\users\sg0219~1\appdata\local\temp\tmpxwg_en\pip.zip\pip\basecommand.py", line 122, in main
    status = self.run(options, args)
  File "c:\users\sg0219~1\appdata\local\temp\tmpxwg_en\pip.zip\pip\commands\install.py", line 278, in run
    requirement_set.prepare_files(finder, force_root_egg_info=self.bundle, bundle=self.bundle)
  File "c:\users\sg0219~1\appdata\local\temp\tmpxwg_en\pip.zip\pip\req.py", line 1177, in prepare_files
    url = finder.find_requirement(req_to_install, upgrade=self.upgrade)
  File "c:\users\sg0219~1\appdata\local\temp\tmpxwg_en\pip.zip\pip\index.py", line 194, in find_requirement
    page = self._get_page(main_index_url, req)
  File "c:\users\sg0219~1\appdata\local\temp\tmpxwg_en\pip.zip\pip\index.py", line 568, in _get_page
    session=self.session,
  File "c:\users\sg0219~1\appdata\local\temp\tmpxwg_en\pip.zip\pip\index.py", line 670, in get_page
    resp = session.get(url, headers={"Accept": "text/html"})
  File "c:\users\sg0219~1\appdata\local\temp\tmpxwg_en\pip.zip\pip\_vendor\requests\sessions.py", line 468, in get
    return self.request('GET', url, **kwargs)
  File "c:\users\sg0219~1\appdata\local\temp\tmpxwg_en\pip.zip\pip\download.py", line 237, in request
    return super(PipSession, self).request(method, url, *args, **kwargs)
  File "c:\users\sg0219~1\appdata\local\temp\tmpxwg_en\pip.zip\pip\_vendor\requests\sessions.py", line 456, in request
    resp = self.send(prep, **send_kwargs)
  File "c:\users\sg0219~1\appdata\local\temp\tmpxwg_en\pip.zip\pip\_vendor\requests\sessions.py", line 559, in send
    r = adapter.send(request, **kwargs)
  File "c:\users\sg0219~1\appdata\local\temp\tmpxwg_en\pip.zip\pip\_vendor\requests\adapters.py", line 305, in send
    conn = self.get_connection(request.url, proxies)
  File "c:\users\sg0219~1\appdata\local\temp\tmpxwg_en\pip.zip\pip\_vendor\requests\adapters.py", line 215, in get_connection
    block=self._pool_block)
  File "c:\users\sg0219~1\appdata\local\temp\tmpxwg_en\pip.zip\pip\_vendor\requests\packages\urllib3\poolmanager.py", line 258, in proxy_fro
m_url
    return ProxyManager(proxy_url=url, **kw)
  File "c:\users\sg0219~1\appdata\local\temp\tmpxwg_en\pip.zip\pip\_vendor\requests\packages\urllib3\poolmanager.py", line 214, in __init__
    'Not supported proxy scheme %s' % self.proxy.scheme
AssertionError: Not supported proxy scheme myusr

Storing debug log for failure in C:\Users\myusr\pip\pip.log

C:\ProgFiles\Python27>

Когда я запускаю команду без имени пользователя и пароля, она работает нормально, но прокси-сервер отклоняет запрос, говоря, что ему нужна аутентификация («407 authenticationrequired»).

C:\ProgFiles\Python27>get-pip.py --proxy 111.222.333.444:80
Downloading/unpacking pip
  Cannot fetch index base URL https://pypi.python.org/simple/
  Could not find any downloads that satisfy the requirement pip
Cleaning up...
No distributions at all found for pip
Storing debug log for failure in C:\Users\sg0219898\pip\pip.log

C:\ProgFiles\Python27>cat C:\Users\sg0219898\pip\pip.log
------------------------------------------------------------
C:\ProgFiles\Python27\get-pip.py run on 09/29/14 16:23:26
Downloading/unpacking pip
  Getting page https://pypi.python.org/simple/pip/
  Could not fetch URL https://pypi.python.org/simple/pip/: connection error: ('Cannot connect to proxy.', error('Tunnel connection failed: 407 authenticationrequired',))
  Will skip URL https://pypi.python.org/simple/pip/ when looking for download links for pip
  Getting page https://pypi.python.org/simple/
  Could not fetch URL https://pypi.python.org/simple/: connection error: ('Cannot connect to proxy.', error('Tunnel connection failed: 407 authenticationrequired',))
  Will skip URL https://pypi.python.org/simple/ when looking for download links for pip
  Cannot fetch index base URL https://pypi.python.org/simple/
  URLs to search for versions for pip:
  * https://pypi.python.org/simple/pip/
  Getting page https://pypi.python.org/simple/pip/
  Could not fetch URL https://pypi.python.org/simple/pip/: connection error: ('Cannot connect to proxy.', error('Tunnel connection failed: 407 authenticationrequired',))
  Will skip URL https://pypi.python.org/simple/pip/ when looking for download links for pip
  Could not find any downloads that satisfy the requirement pip
Cleaning up...
  Removing temporary dir c:\users\sg0219~1\appdata\local\temp\pip_build_SG0219898...
No distributions at all found for pip
Exception information:
Traceback (most recent call last):
  File "c:\users\sg0219~1\appdata\local\temp\tmp36ynxd\pip.zip\pip\basecommand.py", line 122, in main
    status = self.run(options, args)
  File "c:\users\sg0219~1\appdata\local\temp\tmp36ynxd\pip.zip\pip\commands\install.py", line 278, in run
    requirement_set.prepare_files(finder, force_root_egg_info=self.bundle, bundle=self.bundle)
  File "c:\users\sg0219~1\appdata\local\temp\tmp36ynxd\pip.zip\pip\req.py", line 1177, in prepare_files
    url = finder.find_requirement(req_to_install, upgrade=self.upgrade)
  File "c:\users\sg0219~1\appdata\local\temp\tmp36ynxd\pip.zip\pip\index.py", line 277, in find_requirement
    raise DistributionNotFound('No distributions at all found for %s' % req)
DistributionNotFound: No distributions at all found for pip

C:\ProgFiles\Python27>

Я бегло просмотрел urllib3\poolmanager.py, и он не кажется иметь какое-либо отношение к имени пользователя/паролю.


person Kashyap    schedule 29.09.2014    source источник
comment
Похоже, это может быть связано с github.com/kennethreitz/requests/issues/2247.   -  person shazow    schedule 30.09.2014
comment
Это не так. Пожалуйста, смотрите ответ ниже   -  person Ian Stapleton Cordasco    schedule 30.09.2014


Ответы (7)


Это жалуется на схему для URL-адреса (который urlparse понимает как myusr), чтобы обойти это, вместо этого вы должны делать:

get-pip.py --proxy http://myusr:[email protected]:80
person Ian Stapleton Cordasco    schedule 30.09.2014
comment
Я решил это, удалив свой https_proxy, например unset https_proxy. Мой http_proxy все еще там. - person Noel Pure; 09.01.2020

Это связано с тем, что для сценария требуются переменные среды http_proxy или https_proxy, содержащие схему в URL-адресе. Установите переменные среды

 export http_proxy="http://<hostname>:<port>"
 export https_proxy="https://<hostname>:<port>"

перед запуском "python get-pip.py"

person Junger    schedule 14.03.2017
comment
У меня это не сработало, но с опцией --proxy сработало. - person dokaspar; 03.10.2017
comment
Это сработало для меня. Я получал ту же ошибку, что и OP, и использовал переменные среды прокси, которые не содержали http/https. Использование опции --proxy у меня не сработало, но это могло быть связано с тем, что мои переменные среды все еще существовали. - person JGC; 14.11.2017

Используйте 1_

После Python 3.6 при использовании прокси изменилось значение параметра прокси в requests.get(url=url, headers=headers, proxies=...).

До того, как 3.6 включает, proxies={ 'https': '127.0.0.1:8080'} или proxies={'http': '127.0.0.1:8080'} нормально, но этот тип словаря не подходит для Python 3.7 и выше.

В Python3.7 и выше необходимо добавить http:// или https:// перед ip:port, то есть proxies={'http':'http://127.0.0.1:8080'} или proxies={'https':'https://127.0.0.1:8080'}

person Hao Feng    schedule 17.11.2020

import requests
proxy = {
'http' : 'http://138.197.222.35:80',
'https' : 'http://1138.197.222.35:8080'
}

r = requests.get('http://httpbin.org/ip', proxies=proxy)
print (r)

Добавьте «http://» и «https://» к вашему IP-адресу.
У меня была эта проблема при работе с Linux, Windows отлично работала только с ip.

person 1UC1F3R616    schedule 27.04.2020

Для упомянутой вами проблемы это зависит от того, как настроена аутентификация прокси-сервера. Например, в моей интрасети используется Windows AD, и, вероятно, прокси-сервер использует встроенную аутентификацию Windows. Таким образом, когда я делаю pip install --proxy http://<server-ip>:<port> <module-name>, все работает нормально. Обратите внимание, что мне не нужно было вводить имя пользователя и пароль, вероятно, из-за встроенной аутентификации.

Итак, вам нужно выяснить, какая аутентификация используется вашим прокси-сервером. Вы можете использовать инструмент Fiddler (или любой другой сетевой анализатор), чтобы проверить заголовки WWW-Authenticate в ответе 407, чтобы проверить, какие механизмы аутентификации поддерживает сервер. .

person G-9    schedule 05.05.2017
comment
Как и в OP, мой сервер ожидает пользователя/пароль. В любом случае проблема заключалась в том, на что указывал принятый ответ, отмечая, что это связано с авторизацией как таковой. - person Kashyap; 06.05.2017

Это может быть случай, когда вы используете ";" в ваших паролях. Это невозможно правильно проанализировать, что приводит к возникновению ошибки ProxySchemeUnknown.

person marsilya55    schedule 19.04.2018

Следующие вещи работали для меня:

Шаг 1) Установите HTTPS_PROXY и HTTP_PROXY:

экспортировать HTTPS_PROXY="http://прокси-адрес:8080"

экспорт HTTP_PROXY="http://прокси-адрес:8080"

Шаг 2): Запустите pip с приведенной ниже конфигурацией.

./pip.exe install pyspark --доверенный хост pypi.python.org --доверенный хост files.pythonhosted.org --доверенный хост pypi.org --proxy "адрес прокси:8080"

person G.V. Sridhar    schedule 12.03.2019