PyInstaller打包Kivy出现‘NoneType’无load_module属性报错如何修复
报错原因
该报错是旧版本Kivy的导入逻辑与PyInstaller冻结环境的导入器不兼容导致:PyInstaller的自定义导入器没有实现对应find_module方法,调用后返回None,调用load_module就触发空指针错误。
修复方案
- 方案1:升级依赖版本(优先推荐)
直接将Kivy升级到2.1.0及以上版本,该版本官方已经适配了PyInstaller的导入逻辑,无需额外修改即可正常打包。如果同时将PyInstaller升级到5.0及以上版本,兼容性会更好。 - 方案2:添加隐藏导入配置
如果项目无法升级Kivy版本,打包时添加--hidden-import参数补全Kivy的核心模块导入即可:
如果你使用spec文件打包,直接将上述模块添加到pyinstaller --hidden-import kivy.core.window --hidden-import kivy.core.image --hidden-import kivy.core.text --hidden-import kivy.core.audio 你的入口文件.pyhiddenimports列表中即可。 - 方案3:修改Kivy源码兼容
如果前两种方案都不适用,找到报错的kivy\__init__.py文件,将触发报错的行:
替换为如下兼容代码:mod = importer.find_module(modname).load_module(modname)found_importer = importer.find_module(modname) if found_importer: mod = found_importer.load_module(modname) else: import importlib mod = importlib.import_module(modname)
验证提示
修复后优先使用--onedir(文件夹)模式打包测试,确认运行无报错后再使用--onefile(单文件)模式打包,避免其他依赖缺失干扰问题排查。
内容的提问来源于stack exchange,提问作者yoav s
相关产品推荐
相关产品推荐

