问题现象
源码运行正常,打包成 exe 后双击闪退,命令行里运行提示找不到某个第三方模块。
原因分析
动态 import、插件式加载或隐式依赖不会被静态分析发现,打包时没被收集进去。判断时先分清是 PyInstaller 打包缺模块 本身的配置问题,还是上游调用、运行环境带进来的差异;前者改配置就能收口,后者要沿着请求链路一层层往上找,处理顺序不能颠倒。先在出问题的机器上复现一次,把报错原文和发生时间记下来,再对着日志定位。
处理步骤
- 用 hidden-import 显式声明缺失模块
- 把包目录用 add-data 一起带上
- 打包后先命令行运行看完整报错
对应的命令或配置片段如下,可直接复制:
pyinstaller -F main.py --hidden-import=openpyxl --hidden-import=pandas \ --add-data "config;config" --noconfirm
排查时把每一步的输出留下来,后面再遇到同类问题,对照日志就能判断是哪一层先出错的。改动前把原配置备份一份,出问题时能马上回退,比现场找原因省时间。
验证结果
在干净的机器上运行 exe,功能完整且不再提示缺模块,才算打包成功。