【问题标题】:Error Installing any module using pip, but easy_install works使用 pip 安装任何模块时出错,但 easy_install 有效
【发布时间】:2023-06-18 17:07:02
【问题描述】:

每当我尝试使用 pip 安装任何模块时都会收到此错误,但 easy_install 可以完美运行。我的 Ubuntu 12.04 机器上没有配置代理。 以前还好好的,就是不知道怎么突然不工作了。

这是我在运行 sudo pip install <any_package_name> 时遇到的错误:

Exception:
Traceback (most recent call last):
  File "/tmp/tmpOA61D3/pip.zip/pip/basecommand.py", line 246, in main
    status = self.run(options, args)
  File "/tmp/tmpOA61D3/pip.zip/pip/commands/install.py", line 342, in run
    requirement_set.prepare_files(finder)
  File "/tmp/tmpOA61D3/pip.zip/pip/req/req_set.py", line 345, in prepare_files
    functools.partial(self._prepare_file, finder))
  File "/tmp/tmpOA61D3/pip.zip/pip/req/req_set.py", line 290, in _walk_req_to_install
    more_reqs = handler(req_to_install)
  File "/tmp/tmpOA61D3/pip.zip/pip/req/req_set.py", line 415, in _prepare_file
    req_to_install, finder)
  File "/tmp/tmpOA61D3/pip.zip/pip/req/req_set.py", line 376, in _check_skip_installed
    finder.find_requirement(req_to_install, self.upgrade)
  File "/tmp/tmpOA61D3/pip.zip/pip/index.py", line 425, in find_requirement
    all_versions = self._find_all_versions(req.name)
  File "/tmp/tmpOA61D3/pip.zip/pip/index.py", line 349, in _find_all_versions
    index_locations = self._get_index_urls_locations(project_name)
  File "/tmp/tmpOA61D3/pip.zip/pip/index.py", line 323, in _get_index_urls_locations
    page = self._get_page(main_index_url)
  File "/tmp/tmpOA61D3/pip.zip/pip/index.py", line 789, in _get_page
    return HTMLPage.get_page(link, session=self.session)
  File "/tmp/tmpOA61D3/pip.zip/pip/index.py", line 878, in get_page
    "Cache-Control": "max-age=600",
  File "/tmp/tmpOA61D3/pip.zip/pip/_vendor/requests/sessions.py", line 476, in get
    return self.request('GET', url, **kwargs)
  File "/tmp/tmpOA61D3/pip.zip/pip/download.py", line 367, in request
    return super(PipSession, self).request(method, url, *args, **kwargs)
  File "/tmp/tmpOA61D3/pip.zip/pip/_vendor/requests/sessions.py", line 464, in request
    resp = self.send(prep, **send_kwargs)
  File "/tmp/tmpOA61D3/pip.zip/pip/_vendor/requests/sessions.py", line 576, in send
    r = adapter.send(request, **kwargs)
  File "/tmp/tmpOA61D3/pip.zip/pip/_vendor/cachecontrol/adapter.py", line 46, in send
    resp = super(CacheControlAdapter, self).send(request, **kw)
  File "/tmp/tmpOA61D3/pip.zip/pip/_vendor/requests/adapters.py", line 370, in send
    timeout=timeout
  File "/tmp/tmpOA61D3/pip.zip/pip/_vendor/requests/packages/urllib3/connectionpool.py", line 544, in urlopen
    body=body, headers=headers)
  File "/tmp/tmpOA61D3/pip.zip/pip/_vendor/requests/packages/urllib3/connectionpool.py", line 341, in _make_request
    self._validate_conn(conn)
  File "/tmp/tmpOA61D3/pip.zip/pip/_vendor/requests/packages/urllib3/connectionpool.py", line 762, in _validate_conn
    conn.connect()
  File "/tmp/tmpOA61D3/pip.zip/pip/_vendor/requests/packages/urllib3/connection.py", line 238, in connect
    ssl_version=resolved_ssl_version)
  File "/tmp/tmpOA61D3/pip.zip/pip/_vendor/requests/packages/urllib3/contrib/pyopenssl.py", line 296, in ssl_wrap_socket
    cnx.set_tlsext_host_name(server_hostname)
AttributeError: '_socketobject' object has no attribute 'set_tlsext_host_name'

【问题讨论】:

    标签: python sockets pyopenssl


    【解决方案1】:

    我找到了一个潜在的解决方案here。以下是相关引述:

    “发生这种情况是因为 Ubuntu 12.04(即我的服务器的操作系统)有旧的 pyOpenSSL 库,它不接受属性 'set_tlsext_host_name'。 为了解决这个问题,您需要添加依赖pyOpenSSL >= 0.13。 在 Ubuntu 上更新 pyOpenSSL 使用 pip,您还需要安装 libffi-dev 并通过 apt 删除 python-openssl。"

    $ sudo apt-get purge python-openssl
    $ sudo apt-get install libffi-dev
    $ sudo pip install pyOpenSSL
    

    如果不清楚或者对您不起作用,请告诉我。

    【讨论】:

    • 这也适用于 Centos 6.4 的类似问题。出现同样的SSL相关错误...解决方法是使用yum安装libffi-devel,然后使用easy_install升级pyopenssl。
    最近更新 更多