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
相关产品推荐
相关产品推荐

