urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate
最近一个项目把 python 从 3.9 升级到3.11, 于是把 3.9 删除, 使用 brew install python@3.11
, 其它都正常, 就是使用 requests
访问各个https 地址的时候, 就报错:
Failed to send a request to Slack API server: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1006)>
因为出错的是访问 slack api(其实跟访问那个url没关系), 所以找到了这个帖子: https://github.com/slackapi/bolt-python/issues/673.
可是里面提到的 Certificates.command
对于我的安装路径根本就不存在. 于是怀疑 brew
安装有问题, 重新安装, 没看到任何错误, 运行程序还少一样的错.
最终根据一篇帖子的描述, 找到了答案.
启动python, 运行下面的脚本:
supra@host tools % python -V
Python 3.11.9
supra@host tools % python
Python 3.11.9 (main, Apr 2 2024, 08:25:04) [Clang 15.0.0 (clang-1500.3.9.4)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import _ssl; _ssl.get_default_verify_paths()
('SSL_CERT_FILE', '/usr/local/etc/openssl@3/cert.pem', 'SSL_CERT_DIR', '/usr/local/etc/openssl@3/certs')
可以看到它用的证书在/usr/local/etc/openssl@3/cert.pem
, 发现这个是一个软链接, 链接到 ../ca-certificates/cert.pem
, 可是这个文件夹都不存在.
于是新建这个文件夹, 并且把正确的证书放到那里, 然后就工作了.
如果你仅仅是想安装某个模块, 可以先忽略这个证书,如果你真的信任源的话:
pip install --trusted-host mirrors.tuna.tsinghua.edu.cn -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple transformers