使用PyInstaller打包后运行exe报No module named kivymd.effects错误如何解决
问题根因
PyInstaller打包时不会自动递归打包kivymd的所有子模块,仅在hiddenimports中添加顶层kivymd不会引入kivymd.effects这类嵌套子模块,因此触发运行时导入报错。
解决方案
方案1:补充缺失的子模块到hiddenimports
修改你的main.spec文件中hiddenimports配置项,补充报错涉及的模块:
hiddenimports=[ "kivymd", "kivymd.effects", "kivymd.effects.stiffscroll", "kivymd.effects.stiffscroll.StiffScrollEffect" ]
如果后续运行仍报其他kivymd子模块缺失,直接将报错提示的模块路径按上述格式追加到列表中即可。
方案2:全量导入kivymd包(更稳妥)
如果不想挨个补录子模块,可以直接在spec中配置打包整个kivymd包的所有资源:
- 在
main.spec的a = Analysis(...)代码段之后,添加如下内容:
from kivymd import path as kivymd_path kivymd_datas = Tree(kivymd_path, prefix="kivymd")
- 将上面定义的
kivymd_datas追加到打包配置的datas列表中:
- 如果是单目录打包,加到
COLLECT调用的参数列表里:COLLECT(exe, a.binaries, a.datas, kivymd_datas, ...) - 如果是单文件打包,加到
EXE调用的参数列表里:EXE(pyz, a.scripts, a.binaries, a.datas, kivymd_datas, ...)
重新打包
修改完spec文件后,使用spec作为配置源执行打包命令:
pyinstaller main.spec
重新生成的exe即可正常运行。
内容的提问来源于stack exchange,提问作者fyunusa
相关产品推荐
相关产品推荐

