【问题标题】:Python pip install requires server_hostnamePython pip install 需要 server_hostname
【发布时间】:2015-04-02 12:07:15
【问题描述】:

我在 linux 上完成了 pip 的安装,pip list 命令有效。但是在使用pip install 命令时出现以下错误:

Traceback (most recent call last):
  File "/usr/local/lib/python2.7/site-packages/pip-6.0.7-py2.7.egg/pip/basecommand.py", line 232, in main
    status = self.run(options, args)
  File "/usr/local/lib/python2.7/site-packages/pip-6.0.7-py2.7.egg/pip/commands/install.py", line 339, in run
    requirement_set.prepare_files(finder)
  File "/usr/local/lib/python2.7/site-packages/pip-6.0.7-py2.7.egg/pip/req/req_set.py", line 333, in prepare_files
    upgrade=self.upgrade,
  File "/usr/local/lib/python2.7/site-packages/pip-6.0.7-py2.7.egg/pip/index.py", line 305, in find_requirement
    page = self._get_page(main_index_url, req)
  File "/usr/local/lib/python2.7/site-packages/pip-6.0.7-py2.7.egg/pip/index.py", line 783, in _get_page
    return HTMLPage.get_page(link, req, session=self.session)
  File "/usr/local/lib/python2.7/site-packages/pip-6.0.7-py2.7.egg/pip/index.py", line 872, in get_page
    "Cache-Control": "max-age=600",
  File "/usr/local/lib/python2.7/site-packages/pip-6.0.7-py2.7.egg/pip/_vendor/requests/sessions.py", line 473, in get
    return self.request('GET', url, **kwargs)
  File "/usr/local/lib/python2.7/site-packages/pip-6.0.7-py2.7.egg/pip/download.py", line 365, in request
    return super(PipSession, self).request(method, url, *args, **kwargs)
  File "/usr/local/lib/python2.7/site-packages/pip-6.0.7-py2.7.egg/pip/_vendor/requests/sessions.py", line 461, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/local/lib/python2.7/site-packages/pip-6.0.7-py2.7.egg/pip/_vendor/requests/sessions.py", line 573, in send
    r = adapter.send(request, **kwargs)
  File "/usr/local/lib/python2.7/site-packages/pip-6.0.7-py2.7.egg/pip/_vendor/cachecontrol/adapter.py", line 43, in send
    resp = super(CacheControlAdapter, self).send(request, **kw)
  File "/usr/local/lib/python2.7/site-packages/pip-6.0.7-py2.7.egg/pip/_vendor/requests/adapters.py", line 370, in send
    timeout=timeout
  File "/usr/local/lib/python2.7/site-packages/pip-6.0.7-py2.7.egg/pip/_vendor/requests/packages/urllib3/connectionpool.py", line 518, in urlopen
    body=body, headers=headers)
  File "/usr/local/lib/python2.7/site-packages/pip-6.0.7-py2.7.egg/pip/_vendor/requests/packages/urllib3/connectionpool.py", line 322, in _make_request
    self._validate_conn(conn)
  File "/usr/local/lib/python2.7/site-packages/pip-6.0.7-py2.7.egg/pip/_vendor/requests/packages/urllib3/connectionpool.py", line 727, in _validate_conn
    conn.connect()
  File "/usr/local/lib/python2.7/site-packages/pip-6.0.7-py2.7.egg/pip/_vendor/requests/packages/urllib3/connection.py", line 238, in connect
    ssl_version=resolved_ssl_version)
  File "/usr/local/lib/python2.7/site-packages/pip-6.0.7-py2.7.egg/pip/_vendor/requests/packages/urllib3/util/ssl_.py", line 254, in ssl_wrap_socket
    return context.wrap_socket(sock)
  File "/usr/local/lib/python2.7/ssl.py", line 350, in wrap_socket
    _context=self)
  File "/usr/local/lib/python2.7/ssl.py", line 537, in __init__
    raise ValueError("check_hostname requires server_hostname")
ValueError: check_hostname requires server_hostname

我该如何解决这个问题?

【问题讨论】:

  • 我看到其他人有同样的问题;它似乎与 OpenSSL 库版本有关。还没有解决方案。
  • 我不确定您是否拥有 Python 2.7.9 或其他版本,这会对 issue 22921 进行更改。您能否更新您的问题以向我们提供完整回溯(从Traceback 向下的行)向我们展示错误可能源自何处?
  • 我遇到了同样的问题,@MartijnPieters,所以我为你添加了完整的回溯。我正在使用 Python 2.7.9。
  • 解决了。嗯..当它引起我更新 openssl 的版本时。但错误仍然引起。然后我将 pip 重新安装到旧版本,问题就消失了。我不知道为什么。也许解决方案是安装 oler pip 或新版本的 pip 仅支持新版本的 openssl? .
  • @Mryoun: pip 包括requests project,而后者又使用urllib3 library。您的旧版本 pip 使用了没有问题的那些软件包的不同版本。

标签: python openssl pip


【解决方案1】:

pip 6.1.0 已发布,修复了此问题。您可以通过以下方式升级:

pip --trusted-host pypi.python.org install -U pip

自行升级。


原答案

这是由 Python 2.7.9 中的更改引起的,urllib3 需要考虑这一点。有关该项目,请参阅 issue #543。您的 OpenSSL 库不支持 SNI,这意味着 urllib3 不会将主机名传递给 SSL 套接字包装器,但 Python 2.7.9 期望将主机名传递给其他用途。

urllib3requests 间接使用(参见requests issue 2435),而pip 又使用了pip

我开了一个ticket to track this from pip's perspective

项目维护人员已修复基本问题,并等待新版本。如果您不耐烦,可以安装pip 的当前开发版本:

pip install --trusted-host=github.com -U https://github.com/pypa/pip/archive/develop.zip

这将安装 pip-6.1.0.dev0,当 6.1.0 完全发布后,您可以使用 pip install -U pip 再次升级以从 PyPI 获取最终版本。

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,发现在我的情况下可以避免(pip 6.0.8),如下所示

    pip --trusted-host pypi.python.org install <thing>
    

    【讨论】:

    • 这也适用于安装 pip 本身:python2.7 get-pip.py --trusted-host pypi.python.org --user
    【解决方案3】:

    与urllib3有关。 您可以使用 urllib3 版本 1.25.8 解决它。 手动下载该版本的 urllib3 并安装。

    即使你安装了 thia 版本,pip 仍然会使用它自己的版本。所以你必须删除它并替换它。

    通常,安装的模块在 PythonXX/Lib/site-packages

    1. 删除PythonXX/Lib/site-packages/pip/_vendor中的urllib3

    2. 将“PythonXX/Lib/site-packages/urllib3”移动到“PythonXX/Lib/site-packages/pip/_vendor”。

    【讨论】:

      【解决方案4】:

      我遇到了这个问题,上面的方法都试过了,还是不行。我终于发现是因为我打开了VPN。当我关闭VPN时,我可以成功下载包。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-08-21
        • 2017-03-16
        • 2020-03-08
        • 1970-01-01
        • 2021-06-27
        • 2016-04-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多