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

PyInstaller打包调用requests的自定义包可执行文件缺失TLS CA证书报错

问题成因

这个报错是PyInstaller依赖扫描逻辑与Python 3.10导入机制变动不兼容共同导致的,和你是否直接在入口脚本导入requests直接相关,具体逻辑如下:

  1. requests库的TLS证书校验依赖certifi包提供的cacert.pem资源文件,PyInstaller打包时需要主动识别到certifi依赖,才会把对应的资源文件打包进最终的可执行程序。
  2. 当你把逻辑封装到自定义包,入口脚本仅导入自定义包、没有直接导入requests时,适配Python 3.9及更早版本的PyInstaller,无法识别Python 3.10调整后的深层导入元数据,会漏掉对requests下层依赖certifi的资源收集,最终打包出的程序运行时,自然不会在临时目录生成certifi文件夹和对应的pem文件,触发路径无效报错。
  3. 你把自定义包逻辑直接写在入口脚本、或者入口脚本直接导入requests时,PyInstaller的浅层扫描就能直接识别到requests依赖,连带完成certifi资源的收集,所以运行正常。
  4. 降级到Python 3.9后问题自动解决,是因为Python 3.9的导入元数据结构和旧版PyInstaller的扫描逻辑完全适配,就算是自定义包下层导入的requests,也能被正确识别到完整依赖链。
不降级Python 3.10的修复方案

如果你需要继续使用Python 3.10,任选以下一种方案即可解决问题:

  • 在入口脚本的顶部添加一行import certifi,无需调用相关功能,仅需导入即可让PyInstaller识别到该依赖,完成资源收集
  • 打包时手动添加certifi资源参数,命令示例如下(注意替换为你本地实际的cacert.pem路径):
PyInstaller -F --add-binary "C:\Python310\Lib\site-packages\certifi\cacert.pem;certifi/" api_interaction_script.py
  • 升级PyInstaller到4.7及以上版本,该版本开始正式适配Python 3.10的导入机制,可正确识别深层依赖的资源文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:54:04