使用Geopy Nominatim时遭遇SSLCertVerificationError问题求助
解决Nominatim地理编码时的SSL证书验证失败问题
在Windows系统的Anaconda环境(Python 3.9.13)中,调用Nominatim的geocode()方法时出现以下错误:
[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1129)
这是因为Anaconda自带的SSL证书存储未包含目标服务器的有效证书,或者网络中存在自签名代理证书导致验证失败。以下是几种可行的解决方法:
方法1:指定有效CA证书路径
Anaconda自带了CA证书文件,可在初始化Nominatim时指定该证书路径,让请求使用正确的证书链验证:
from geopy.geocoders import Nominatim import ssl # 替换为你的Anaconda安装路径 anaconda_cert_path = r"C:\Users\你的用户名\anaconda3\Library\ssl\cacert.pem" ssl_ctx = ssl.create_default_context(cafile=anaconda_cert_path) nom = Nominatim(user_agent="test", ssl_context=ssl_ctx) nom.geocode("3995 23rd St, San Francisco, CA 94114")
如果已安装certifi库,也可以用它自动获取系统/环境的有效证书路径:
from geopy.geocoders import Nominatim import ssl import certifi ssl_ctx = ssl.create_default_context(cafile=certifi.where()) nom = Nominatim(user_agent="test", ssl_context=ssl_ctx) nom.geocode("3995 23rd St, San Francisco, CA 94114")
方法2:临时禁用SSL验证(仅测试场景)
如果只是临时测试代码,可临时关闭SSL验证(不推荐生产环境使用,存在安全风险):
from geopy.geocoders import Nominatim import ssl ssl_ctx = ssl.create_default_context() ssl_ctx.check_hostname = False ssl_ctx.verify_mode = ssl.CERT_NONE nom = Nominatim(user_agent="test", ssl_context=ssl_ctx) nom.geocode("3995 23rd St, San Francisco, CA 94114")
方法3:更新Anaconda的CA证书
打开Anaconda Prompt,执行以下命令更新环境中的CA证书,修复证书存储问题:
conda update certifi
更新完成后重新运行代码,验证问题是否解决。
内容的提问来源于stack exchange,提问作者cole_gerlovich
相关产品推荐
相关产品推荐

