PyInstaller打包Kivy项目生成的exe运行闪退后消失如何解决?
Kivy单文件打包后运行闪退问题解决方案
问题原因
PyInstaller默认的单文件打包规则不会自动识别并打包Kivy框架自带的核心资源(包含默认纹理图片、SDL2运行配套资源等),程序运行时临时解压目录缺失必要文件,触发资源加载失败导致启动崩溃。
解决方案
方案一:修改spec配置文件打包(推荐)
- 先安装全Kivy的运行依赖包:
pip install kivy_deps.sdl2 kivy_deps.glew kivy_deps.angle
- 生成初始spec配置文件:
pyi-makespec --onefile main.py
- 编辑生成的
main.spec文件:- 在文件最顶部添加导入语句:
from kivy_deps import sdl2, glew- 找到
datas = []配置项,添加Kivy核心资源路径映射,替换为你本地Python环境中Kivy的data目录实际路径:
datas = [ ("C:/你的Python安装路径/Lib/site-packages/kivy/data", "kivy/data"), # 如果你自己的项目有自定义图片、音频等资源,也在这里按同样格式添加路径映射 ]- 找到
EXE配置段,在参数列表末尾添加SDL2、glew的依赖资源引入:
exe = EXE( # 原有其他参数保持不变 *[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)], ) - 基于修改后的spec文件执行打包:
pyinstaller main.spec
方案二:临时验证用非单文件打包
如果需要先确认是否是单文件资源缺失导致的问题,可以先打非单文件版本测试:
pyinstaller main.py
运行dist/main目录下的main.exe,如果能正常启动,就可以确认是单文件打包的资源映射问题,再按方案一修改配置即可。
注意事项
打包前先删除之前生成的build、dist文件夹和旧的.spec文件,避免缓存影响打包结果。
内容的提问来源于stack exchange,提问作者Davide Tamagnini
相关产品推荐
相关产品推荐

