尝试在新的python安装上安装pip。我遇到了代理错误。看起来像get-pip
或urllib3
??
问题是我是否必须经历设置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
,它似乎与用户名/密码无关。
答案 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错误。