Python 3.12及以下版本虚拟环境pip安装包遇SSL证书验证失败,3.13版本无异常
我看你遇到的问题挺典型的:系统自带的Python 3.13能正常用pip install,但用venv创建的Python 3.11虚拟环境里,不管是执行pip list还是安装tensorflow都报SSL证书验证失败的错,要么是EOF读取异常,要么是提示证书链里有自签名证书。结合你的情况,大概率是虚拟环境的Python版本(3.11)的SSL配置没跟上,或者网络环境里的代理/防火墙干扰了证书验证,下面给你几个针对性的解决思路:
临时绕过SSL验证(仅用于测试,不建议长期使用)
要是想先快速验证能不能正常下载包,可以在pip命令里直接指定信任PyPI的相关域名:pip install tensorflow --trusted-host pypi.org --trusted-host files.pythonhosted.org这个参数会让pip跳过对这两个域名的SSL证书校验,直接连接下载资源。
配置pip永久信任PyPI域名
不想每次都手动加参数的话,可以给pip配置全局的信任规则:
在Windows系统中,找到你的用户目录(比如C:\Users\你的用户名),新建pip文件夹,然后在里面创建pip.ini文件,写入以下内容:[global] trusted-host = pypi.org files.pythonhosted.org保存后,后续在虚拟环境里用pip就不用再重复加信任参数了。
修复虚拟环境的SSL证书链配置
系统的Python 3.13能正常工作,说明系统的根证书是没问题的,但虚拟环境里的Python 3.11可能没继承这个配置,或者内置的OpenSSL版本太旧,没法处理PyPI的最新证书链:- 先在虚拟环境里检查OpenSSL版本:
python -c "import ssl; print(ssl.OPENSSL_VERSION)" - 如果版本低于1.1.1,建议把虚拟环境的Python升级到3.12(依然在TensorFlow支持的3.9-3.12范围内),新版本Python内置的OpenSSL兼容性更好。
- 要是不想升级Python,可以手动指定系统的根证书路径:
比如用Git自带的根证书(如果装了Git的话,路径一般是C:\Program Files\Git\mingw64\ssl\certs\ca-bundle.crt),然后运行:
或者先设置环境变量再执行安装:pip install tensorflow --cert "C:\Program Files\Git\mingw64\ssl\certs\ca-bundle.crt"set SSL_CERT_FILE=C:\Program Files\Git\mingw64\ssl\certs\ca-bundle.crt pip install tensorflow
- 先在虚拟环境里检查OpenSSL版本:
排查网络代理/防火墙的影响
错误日志里提到“self-signed certificate in certificate chain”,这几乎可以确定是网络里的代理服务器在中间做了流量拦截,用自签名证书加密了请求,导致pip无法验证PyPI的真实证书:- 先试试关闭系统的代理(Windows可以在「设置-网络和Internet-代理」里关闭“自动检测设置”或手动代理),再重新运行pip命令,看是否恢复正常。
- 如果必须使用代理,需要把代理的自签名证书导入到系统的「受信任的根证书颁发机构」里(可以通过
certmgr.msc打开证书管理器操作),或者在pip命令里同时指定代理和证书:pip install tensorflow --proxy http://代理地址:端口 --cert "代理证书文件路径.pem"
备注:内容来源于stack exchange,提问作者CChickii




