如何配置Python使用与wget相同的SSL证书?
解决Detectron2/Requests SSL证书验证失败但wget可正常下载的问题
问题描述
使用Detectron2下载权重文件时触发SSL证书验证失败错误,用requests库直接下载同一文件也失败,但通过wget命令却能正常完成下载。
相关代码及报错:
Detectron2代码:
from detectron2.config import get_cfg from detectron2.engine import DefaultTrainer cfg = get_cfg() cfg.merge_from_file(model_zoo.get_config_file("COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml")) cfg.MODEL.WEIGHTS = model_zoo.get_checkpoint_url("COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml") default_trainer = DefaultTrainer(cfg)
报错信息:
URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1091)>
requests测试代码:
import requests response = requests.get('https://dl.fbaipublicfiles.com/detectron2/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x/137849600/model_final_f10217.pkl')
可正常运行的wget命令:
wget https://dl.fbaipublicfiles.com/detectron2/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x/137849600/model_final_f10217.pkl
解决方案
1. 让Python使用系统证书(推荐)
wget默认使用系统的CA证书存储,而Python(尤其是requests/urllib)可能未正确加载,可通过设置环境变量强制Python使用系统证书:
- Linux:
export REQUESTS_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt # 之后运行你的Python脚本 - macOS:
export REQUESTS_CA_BUNDLE=/usr/local/etc/openssl/cert.pem # 之后运行你的Python脚本 - Windows:
set REQUESTS_CA_BUNDLE=C:\Windows\System32\certificates\root\ca.pem # 之后运行你的Python脚本
2. 手动指定证书文件或使用本地权重
- 如果知道wget使用的具体证书文件路径,可在requests中直接指定:
import requests response = requests.get('https://dl.fbaipublicfiles.com/detectron2/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x/137849600/model_final_f10217.pkl', verify='/path/to/wget/cert.pem') - 对于Detectron2,更简单的方式是先用wget下载好权重文件,然后修改配置指向本地文件:
cfg.MODEL.WEIGHTS = "/path/to/your/downloaded/model_final_f10217.pkl"
3. 临时绕过SSL验证(仅测试用,不推荐生产环境)
如果只是临时测试,可关闭SSL验证,但存在安全风险:
- requests中关闭验证:
response = requests.get('https://dl.fbaipublicfiles.com/detectron2/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x/137849600/model_final_f10217.pkl', verify=False) - 全局关闭Python的SSL验证(设置环境变量):
export PYTHONHTTPSVERIFY=0 # 之后运行Detectron2脚本
内容的提问来源于stack exchange,提问作者user3731622
相关产品推荐
相关产品推荐

