如何让pyinstaller以--onefile选项打包时支持python-certifi-win32
问题根因
python-certifi-win32的自动补丁逻辑依赖Python启动时加载的sitecustomize启动模块触发补丁注入,而PyInstaller打包后的运行环境默认不会加载该启动模块,因此即使你添加了--hidden-import导入了模块,补丁也没有被实际执行,就会出现和未安装该包一致的SSL证书报错。
可行解决方案
方案1:手动触发补丁(优先推荐)
在你脚本的最开头位置,所有其他导入语句(尤其是certifi、requests、Tableau相关依赖的导入)之前,添加以下两行代码,显式触发补丁注入:
import python_certifi_win32 python_certifi_win32.wincert.inject_patch()
修改后先直接运行源码确认功能正常,再重新执行PyInstaller打包命令即可,无需额外添加--hidden-import参数,PyInstaller会自动识别你显式导入的依赖。
方案2:兼容特殊场景的备选方案
如果方案1执行后依然报错,可以手动把企业内部信任的根证书导出为PEM格式,打包时通过PyInstaller的--add-binary参数把证书文件打包到执行文件中,同时在代码中指定requests/Tableau REST API调用时的verify参数指向该证书路径即可。
内容的提问来源于stack exchange,提问作者Dan0175
相关产品推荐
相关产品推荐

