虚拟环境中urllib.request.urlopen证书验证失败,IPython正常求原因
问题根本原因分析
虚拟环境与全局Python的CA证书配置不共享
虚拟环境默认不会继承全局Python的CA证书存储配置,而你使用的IPython如果是全局安装的,会调用系统或全局Python的可信CA证书集合。注意你代码里写的是http://,但目标网站可能自动跳转到了HTTPS协议,此时虚拟环境中的urllib找不到可信证书,就触发了[SSL: CERTIFICATE_VERIFY_FAILED]错误。Python版本或SSL模块行为差异
如果全局IPython使用的Python版本,和虚拟环境内的Python版本不同,两者的SSL模块对证书验证的默认逻辑、证书存储路径可能存在差异。部分旧版本Python的虚拟环境可能存在证书路径配置缺失的问题。环境变量未继承
全局环境中可能配置了REQUESTS_CA_BUNDLE、SSL_CERT_FILE这类指定自定义CA证书的环境变量,但虚拟环境启动时没有继承这些变量,导致urllib无法获取验证所需的证书文件。
快速验证方法
在虚拟环境和IPython中分别执行以下代码,对比输出的证书路径是否一致:
import ssl print(ssl.get_default_verify_paths())
内容的提问来源于stack exchange,提问作者dpnt1510
相关产品推荐
相关产品推荐

