使用PyInstaller打包Kivy应用为EXE时遇多类错误求助
解决Kivy + PyInstaller打包EXE的运行错误
打包失败的核心问题是资源文件遗漏和依赖路径配置错误,以下是修正后的完整.spec文件及针对性解决方案:
修正后的.spec文件
# -*- mode: python ; coding: utf-8 -*- from kivy_deps import sdl2, glew import os from kivy import kivy_data_dir import dtale block_cipher = None # 定义需要打包的静态资源 datas = [ # 打包Kivy核心资源(解决default.png加载失败) (kivy_data_dir, 'kivy_install/data'), # 打包dtale多语言资源(解决translations路径找不到) (os.path.join(os.path.dirname(dtale.__file__), 'translations'), 'dtale/translations'), ] a = Analysis( ['../tübitak/main.py'], pathex=[os.path.abspath('../tübitak')], # 添加主脚本所在目录到搜索路径 binaries=[], datas=datas, hiddenimports=[ 'dtale', 'dtale.translations', 'dtale.charts.utils', 'dtale.column_analysis', 'dtale.column_builders', 'dtale.views', 'dtale.app' ], # 补充dtale动态导入的模块 hookspath=[], hooksconfig={}, runtime_hooks=[], excludes=['kivy_deps.angle'], # 排除angle依赖,避免路径冲突 win_no_prefer_redirects=False, win_private_assemblies=False, cipher=block_cipher, noarchive=False, ) pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) exe = EXE( pyz, a.scripts, [], exclude_binaries=True, name='touchtracer', debug=False, bootloader_ignore_signals=False, strip=False, upx=True, console=True, disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None, ) coll = COLLECT( exe, a.binaries, a.zipfiles, a.datas, *[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)], strip=False, upx=True, upx_exclude=[], name='touchtracer', )
关键修改点说明
1. 补充缺失的静态资源
- Kivy运行依赖自带的图片、GLSL着色器等资源,通过
kivy_data_dir获取官方资源目录,打包后映射到kivy_install/data路径,解决Unable to load image <...default.png>错误。 - dtale的
translations是多语言静态文件夹,手动指定源路径和目标路径,解决FileNotFoundError: ...dtale/translations错误。
2. 修正模块搜索路径
将主脚本所在目录添加到pathex,确保PyInstaller能正确识别本地模块,避免路径解析异常。
3. 补充隐式导入模块
dtale部分模块采用动态导入,PyInstaller无法自动检测,手动添加到hiddenimports,防止运行时出现模块找不到的报错。
4. 排除冲突依赖
如果使用glew作为GL后端,排除kivy_deps.angle可避免路径初始化错误(即TypeError: expected str...not NoneType),两者无需同时打包。
额外注意事项
- 优先使用
os.path.join拼接路径,避免Windows与Linux的路径格式冲突。 - 打包前确保Kivy、PyInstaller、dtale均为兼容版本(如Kivy 2.1.0搭配PyInstaller 5.x)。
- 若仍有资源缺失,可开启
debug=True查看详细日志,定位遗漏的资源文件。
内容的提问来源于stack exchange,提问作者Taha Koray Aslan
相关产品推荐
相关产品推荐

