MacOS下Homebrew安装的Python 3.9虚拟环境SSL证书验证失败问题求助
解决Homebrew Python 3.9虚拟环境SSL证书验证失败问题
我之前也碰到过一模一样的情况——用Homebrew装的Python 3.9,建了虚拟环境后一直报urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED],哪怕跑完官方的证书修复脚本也没用。给你几个亲测有效的排查和解决办法:
1. 强制虚拟环境使用certifi的证书文件
有时候修复脚本修改的是系统级Python的证书路径,但虚拟环境并没有自动继承这个配置。你可以手动指定环境变量让虚拟环境的SSL模块用certifi的证书:
- 先在激活的虚拟环境里运行以下命令,找到certifi证书文件的路径:
python -c "import certifi; print(certifi.where())" - 把输出的路径设置为
SSL_CERT_FILE环境变量:export SSL_CERT_FILE=/你的虚拟环境路径/lib/python3.9/site-packages/certifi/cacert.pem - 要是想每次激活虚拟环境都自动生效,把上面的
export命令添加到虚拟环境的bin/activate脚本末尾。
2. 重新创建干净的虚拟环境
有时候旧的虚拟环境可能残留了异常的配置,导致证书修复脚本的改动不生效。试试用Homebrew的Python重新创建虚拟环境:
# 先删除旧的虚拟环境 rm -rf venv # 用Homebrew的Python 3.9创建新环境(M1芯片路径为/opt/homebrew/bin/python3.9,Intel为/usr/local/bin/python3.9) /usr/local/bin/python3.9 -m venv venv # 激活环境后重新安装certifi source venv/bin/activate pip install --upgrade certifi
3. 切换到官方Python包解决问题
如果你尝试官方Python包时遇到pip未安装的错误,可以手动补装pip再处理证书:
- 下载
get-pip.py(用curl命令:curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py) - 用官方Python运行安装pip:
/Library/Frameworks/Python.framework/Versions/3.9/bin/python3.9 get-pip.py - 然后运行官方的
Install Certificates.command脚本,之后基于官方Python创建虚拟环境,大概率能避开Homebrew的证书配置坑。
4. 排查目标网站的证书问题
如果上面的办法都没用,可以先验证是不是特定网站的证书问题:
运行以下代码测试访问Google的HTTPS站点:
import urllib.request urllib.request.urlopen('https://google.com')
- 如果这个能成功,说明是你要访问的目标网站证书不被信任,你可以手动将该网站的根证书添加到certifi的
cacert.pem文件中(不推荐临时关闭验证,风险高)。 - 如果这个也报错,那还是本地证书配置的问题,回到前面的步骤再检查。
内容的提问来源于stack exchange,提问作者jvanulde
相关产品推荐
相关产品推荐

