pip,代理身份验证和“不支持的代理方案”

时间:2014-09-29 21:31:17

标签: python pip urllib pypi urllib3

尝试在新的python安装上安装pip。我遇到了代理错误。看起来像get-pipurllib3 ??

中的错误

问题是我是否必须经历设置CNTLM as described here的痛苦或是否有捷径?

get-pip.py documentation表示使用--proxy="[user:passwd@]proxy.server:port"选项指定代理和相关身份验证。但似乎pip传递了整个事物,因为urllib3将“myusr”解释为url方案,因为':'我猜(?)。

C:\ProgFiles\Python27>get-pip.py --proxy myusr:mypswd@111.222.333.444: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>

当我运行没有usrname和密码的命令时,它工作正常,但代理拒绝请求它需要身份验证(“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,它似乎与用户名/密码无关。

6 个答案:

答案 0 :(得分:13)

这是抱怨网址的方案(urlparse理解为myusr),解决你应该做的事情:

get-pip.py --proxy http://myusr:mypswd@111.222.333.444:80

答案 1 :(得分:2)

这是因为脚本需要环境变量http_proxy或https_proxy包含URL中的方案。设置环境变量

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

在运行&#34; python get-pip.py&#34;

之前

答案 2 :(得分:1)

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)

在ip后面附加“ http://”和“ https://”。
我在使用linux时遇到了这个问题,windows单独使用ip即可正常工作。

答案 3 :(得分:1)

使用pip install xxx --proxy=https://xx.xx.xx.xx:xxxx

在Python 3.6之后,使用代理时,requests.get(url=url, headers=headers, proxies=...)中的proxy的参数值已更改。

在包含3.6之前,可以使用proxies={ 'https': '127.0.0.1:8080'}proxies={'http': '127.0.0.1:8080'},但是这种类型的字典不适用于Python 3.7及更高版本。

在Python3.7及更高版本中,您必须在ip:port前面添加http://https://,即proxies={'http':'http://127.0.0.1:8080'}proxies={'https':'https://127.0.0.1:8080'}

答案 4 :(得分:0)

对于您提到的问题,这取决于如何设置代理服务器身份验证。 例如,我的Intranet使用Windows AD,可能代理服务器使用的是Windows Integrated身份验证。因此,当我pip install --proxy http://<server-ip>:<port> <module-name>时,它工作正常。请注意,我没有输入用户名和&amp;密码,可能是由于集成了身份验证。

因此,您需要找出您的代理服务器正在使用的身份验证。您可以使用Fiddler(或任何其他网络分析器)工具检查407响应中的WWW-Authenticate标头,以检查auth mechs服务器支持。

答案 5 :(得分:0)

当您使用“;”时可能会出现这种情况在你的密码。无法正确解析这会导致引发ProxySchemeUnknown错误。