You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pyinstaller打包后请求币安API出现TLS CA证书bundle找不到错误

问题成因
  • PyInstaller默认不会自动收集certifi库的CA证书文件:requests库发起HTTPS请求时默认调用certifi提供的cacert.pem做TLS证书校验,打包为exe后,程序运行时会先解压到系统临时目录下的_MEIXXXX文件夹,如果你打包时没有显式指定把证书文件打入包内,就会在对应路径找不到证书文件触发报错。
  • Python版本升降级破坏了原有依赖匹配:你卸载Python3.10重装3.9.7的操作导致原有certifi、requests库的版本关联和路径配置被重置,旧的打包配置和新环境的依赖路径不匹配。另外你配置的pip global.cert仅对pip安装包时的校验生效,对打包后独立运行的exe完全无效,exe运行不依赖本地Python环境的配置。
  • 币安websocket未触发报错是因为其通信逻辑不依赖requests的证书校验逻辑,要么自带证书、要么跳过了校验,所以不受影响。
解决方案

下面三种方案按优先级选择即可:

  • 方案1:打包时自动收集certifi所有资源(无需修改代码,最便捷)
    直接在打包命令中添加--collect-data certifi参数,PyInstaller会自动把certifi库的所有数据文件(包含cacert.pem)打进包,不需要手动找证书路径,命令示例:
pyinstaller -F main.py --collect-data certifi

如果需要无控制台窗口,添加-w参数即可。

  • 方案2:代码层面全局指定证书路径+打包时添加证书
    首先在main.py的最开头(导入requests之前)添加如下代码:
import os
import sys

# 自动适配打包运行/本地开发两种场景
if getattr(sys, '_MEIPASS', False):
    # 打包后exe运行时的临时解压目录
    ca_path = os.path.join(sys._MEIPASS, 'cacert.pem')
else:
    # 本地开发时调用certifi的证书路径
    import certifi
    ca_path = certifi.where()
# 给requests全局设置CA证书路径
os.environ['REQUESTS_CA_BUNDLE'] = ca_path

然后打包时通过--add-data参数把证书打入包,先执行命令获取本地证书路径:

python -c "import certifi; print(certifi.where())"

拿到路径后替换下方命令中的你的证书路径:

pyinstaller -F main.py --add-data "你的证书路径;."
  • 方案3:不需要重新打包的临时解决方案
    如果你不想重新打包exe,直接把cacert.pem文件复制到exe同级目录即可,运行时会自动在同级目录查找证书。

内容的提问来源于stack exchange,提问作者Notmyname

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 08:06:04