You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python3.11.2下执行pipenv install --verbose触发cert相关AttributeError问题求助

Python3.11.2下执行pipenv install --verbose触发cert相关AttributeError问题求助

看起来你在Python 3.11.2环境下用pipenv install --verbose安装依赖时碰到了证书相关的AttributeError,切换到Python 3.9就能正常运行,而且已经安装了certifi但问题依旧,确实挺让人头疼的!

先把你遇到的错误日志贴出来方便排查:

Traceback (most recent call last):
  File "/Users/DUMMYNAME/.pyenv/versions/3.11.2/lib/python3.11/site-packages/pipenv/resolver.py", line 466, in <module>
    main()
  File "/Users/DUMMYNAME/.pyenv/versions/3.11.2/lib/python3.11/site-packages/pipenv/resolver.py", line 452, in main
    _main(
  File "/Users/DUMMYNAME/.pyenv/versions/3.11.2/lib/python3.11/site-packages/pipenv/resolver.py", line 436, in _main
    resolve_packages(
  File "/Users/DUMMYNAME/.pyenv/versions/3.11.2/lib/python3.11/site-packages/pipenv/resolver.py", line 400, in resolve_packages
    results, resolver = resolve_deps(
                        ^^^^^^^^^^^^^
  File "/Users/DUMMYNAME/.pyenv/versions/3.11.2/lib/python3.11/site-packages/pipenv/utils/resolver.py", line 968, in resolve_deps
    results, hashes, internal_resolver = actually_resolve_deps(
                                         ^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/DUMMYNAME/.pyenv/versions/3.11.2/lib/python3.11/site-packages/pipenv/utils/resolver.py", line 736, in actually_resolve_deps
    hashes = resolver.resolve_hashes
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/DUMMYNAME/.pyenv/versions/3.11.2/lib/python3.11/site-packages/pipenv/utils/resolver.py", line 616, in resolve_hashes
    self.hashes = self.collect_hashes(ireq)
                        ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/DUMMYNAME/.pyenv/versions/3.11.2/lib/python3.11/site-packages/pipenv/utils/resolver.py", line 587, in collect_hashes
    hashes = self.project.get_hashes_from_pypi(ireq, source)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/DUMMYNAME/.pyenv/versions/3.11.2/lib/python3.11/site-packages/pipenv/project.py", line 278, in get_hashes_from_pypi
    r = session.get(pkg_url, timeout=self.s.PIPENV_REQUESTS_TIMEOUT)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/DUMMYNAME/.pyenv/versions/3.11.2/lib/python3.11/site-packages/pipenv/patched/pip/_vendor/requests/sessions.py", line 602, in get
    return self.request("GET", url, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/DUMMYNAME/.pyenv/versions/3.11.2/lib/python3.11/site-packages/pipenv/patched/pip/_internal/network/session.py", line 522, in request
    return super().request(method, url, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/DUMMYNAME/.pyenv/versions/3.11.2/lib/python3.11/site-packages/pipenv/patched/pip/_vendor/requests/sessions.py", line 589, in request
    resp = self.send(prep, **send_kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/DUMMYNAME/.pyenv/versions/3.11.2/lib/python3.11/site-packages/pipenv/patched/pip/_vendor/requests/sessions.py", line 703, in send
    r = adapter.send(request, **kwargs)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/DUMMYNAME/.pyenv/versions/3.11.2/lib/python3.11/site-packages/pipenv/patched/pip/_vendor/cachecontrol/adapter.py", line 76, in send
    resp = super().send(request, stream, timeout, verify, cert, proxies)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/DUMMYNAME/.pyenv/versions/3.11.2/lib/python3.11/site-packages/pipenv/patched/pip/_vendor/requests/adapters.py", line 667, in send
    resp = conn.urlopen(
           ^^^^^^^^^^^^^
  File "/Users/DUMMYNAME/.pyenv/versions/3.11.2/lib/python3.11/site-packages/pipenv/patched/pip/_vendor/urllib3/connectionpool.py", line 716, in urlopen
    httplib_response = self._make_request(
                       ^^^^^^^^^^^^^^^^^^^
  File "/Users/DUMMYNAME/.pyenv/versions/3.11.2/lib/python3.11/site-packages/pipenv/patched/pip/_vendor/urllib3/connectionpool.py", line 404, in _make_request
    self._validate_conn(conn)
  File "/Users/DUMMYNAME/.pyenv/versions/3.11.2/lib/python3.11/site-packages/pipenv/patched/pip/_vendor/urllib3/connectionpool.py", line 1061, in _validate_conn
    conn.connect()
  File "/Users/DUMMYNAME/.pyenv/versions/3.11.2/lib/python3.11/site-packages/pipenv/patched/pip/_vendor/urllib3/connection.py", line 462, in connect
    if not cert.get("subjectAltName", ()):
           ^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'get'

针对这个问题,我整理了几个可行的解决方向,你可以逐一尝试:

  • 升级Pipenv到最新版本:这个错误大概率是旧版Pipenv和Python 3.11存在兼容性bug,对证书的处理逻辑有问题。执行命令升级:

    pip install --upgrade pipenv
    

    升级完成后再重新运行pipenv install --verbose试试。

  • 手动指定certifi的证书路径:有时候系统证书配置和Python的certifi包不匹配,导致证书加载失败。先找到certifi证书文件的位置:

    python3.11 -c "import certifi; print(certifi.where())"
    

    然后设置环境变量指向该路径,再执行安装命令:

    export REQUESTS_CA_BUNDLE=/刚才输出的证书完整路径
    pipenv install --verbose
    
  • 临时跳过证书验证(仅测试用):如果上面的方法都无效,可以临时跳过证书验证来确认是否是证书问题导致的,但这个方法不安全,不要在生产环境使用:

    PIPENV_SKIP_VERIFY=1 pipenv install --verbose
    
  • 重新安装Python 3.11.2:有可能是你通过pyenv安装的Python 3.11.2本身证书文件损坏了,尝试重新安装:

    pyenv uninstall 3.11.2
    pyenv install 3.11.2
    

    安装完成后重新创建虚拟环境,再尝试安装依赖。

备注:内容来源于stack exchange,提问作者Khalid Bakry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 17:54:33