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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/26109264/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-19 00:06:20  来源:igfitidea点击:

pip, proxy authentication and "Not supported proxy scheme"

pythonpipurllibpypiurllib3

提问by Kashyap

Trying to install pip on a new python installation. I am stuck with proxy errors. Looks like a bug in get-pipor urllib3??

尝试在新的 python 安装上安装 pip。我被代理错误困住了。看起来像一个错误get-pipurllib3??

Question is do I have to go through the pain of setting up CNTLM as described hereor is there a shortcut?

问题是我是否必须像这里描述的那样经历设置CNTLM的痛苦,还是有捷径?

get-pip.py documentationsays use --proxy="[user:passwd@]proxy.server:port"option to specify proxy and relevant authentication. But seems like pip passes on the whole thing as it is to urllib3which interprets "myusr" as the url scheme, because of the ':' I guess (?).

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>

When I run the command without the usrname and password it works fine, but proxy rejects the request saying it needs authentication ("407 authenticationrequired").

当我在没有 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>

I had a brief look at urllib3\poolmanager.pyand it doesn't seem to have anything to do with username/passwords.

我看了一眼,urllib3\poolmanager.py它似乎与用户名/密码没有任何关系。

采纳答案by Ian Stapleton Cordasco

This is complaining about the scheme for the URL (which urlparseis understanding to be myusr), to work around that you should instead be doing:

这是在抱怨 URL 的方案(urlparse理解为myusr),以解决您应该做的事情:

get-pip.py --proxy http://myusr:[email protected]:80

回答by Junger

This is because the script requires the environment variables http_proxy or https_proxy contains the scheme in the URL. Set the environment variables

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

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

before run the "python get-pip.py"

在运行“python get-pip.py”之前

回答by G-9

For the problem you have mentioned, it depends on how the proxy server authentication has been set up. For example, my intranet uses Windows AD and probably the proxy server is using Windows Integrated auth. Thus when I do pip install --proxy http://<server-ip>:<port> <module-name>, it works fine. Note that I did not have to type in username & password ,likely due to integrated auth.

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

So, you'll need to find out the authentication being used by your proxy server.You can use Fiddler(or any other network analyzer) tool to check the WWW-Authenticate headers in the 407 response, to check what auth mechs the server supports.

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

回答by marsilya55

This can be a case when you use ";" in your passwords. This cannot be parsed properly that results in ProxySchemeUnknown error raised.

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

回答by G.V. Sridhar

The below things worked for me :

以下事情对我有用:

Step 1) Set HTTPS_PROXY and HTTP_PROXY:

步骤 1) 设置 HTTPS_PROXY 和 HTTP_PROXY:

export HTTPS_PROXY="http://proxy-address:8080"

导出 HTTPS_PROXY="http://proxy-address:8080"

export HTTP_PROXY="http://proxy-address:8080"

导出 HTTP_PROXY="http://proxy-address:8080"

step 2) : Run pip with below configuration

步骤 2) : 使用以下配置运行 pip

./pip.exe install pyspark --trusted-host pypi.python.org --trusted-host files.pythonhosted.org --trusted-host pypi.org --proxy "proxy-address:8080"

./pip.exe 安装 pyspark --trusted-host pypi.python.org --trusted-host files.pythonhosted.org --trusted-host pypi.org --proxy "proxy-address:8080"

回答by 1UC1F3R616

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)

Append 'http://' and 'https://' with your ips.
I had this issue when working with linux, windows worked fine with ip alone.

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