Kivy开发的Python GUI程序转EXE失败求助:PyInstaller、cx_Freeze均报错
解决cx_Freeze打包Kivy应用的模块缺失与编译问题
看来你在用cx_Freeze打包Kivy 2.0.0rc4 + Python 3.8的GUI应用时,碰到了两个核心问题:一是cx_Freeze没自动包含Kivy的隐藏子模块kivy.weakmethod,二是Kivy的Cython编译组件(比如kivy._clock)没被正确打包。我帮你梳理下针对性的解决方案:
1. 编写适配Kivy的cx_Freeze配置文件
cx_Freeze默认不会自动识别Kivy的所有内部依赖,所以你需要手动在setup.py里指定要包含的模块和资源。以下是经过验证的配置示例:
import sys from cx_Freeze import setup, Executable import kivy # 锁定Kivy版本,避免环境不一致 kivy.require('2.0.0rc4') # 替换成你的主脚本文件名 MAIN_SCRIPT = "jarv.py" # Windows下GUI应用需要隐藏控制台窗口 base = "Win32GUI" if sys.platform == "win32" else None executables = [Executable(MAIN_SCRIPT, base=base)] setup( name="你的应用名称", version="1.0", description="你的Kivy应用描述", executables=executables, options={ "build_exe": { # 手动添加缺失的Kivy核心模块 "includes": [ "kivy", "kivy._clock", "kivy.weakmethod", "kivy.clock", "kivy.uix.boxlayout", "kivy.uix.layout" ], # 自动包含Kivy的Cython编译二进制文件和资源 "include_files": kivy.deps.cython.get_include_files(), # 排除不必要的模块,减小包体积 "excludes": ["tkinter", "unittest", "numpy"], } } )
2. 确保Kivy是预编译版本
报错里提到Unable to import kivy._clock,大概率是你安装的Kivy是源码版且没编译Cython部分。建议卸载现有版本,换成官方预编译的wheel包:
pip uninstall kivy -y pip install kivy[base]==2.0.0rc4 --no-index --find-links https://kivy.org/downloads/packages/simple/
3. 执行打包命令
在命令行切换到setup.py所在目录,运行:
python setup.py build
打包完成后,可执行文件会在build目录下的exe.win-amd64-3.8(或对应平台的文件夹)里。
额外小贴士
- 如果后续还出现其他模块缺失的报错,直接把对应的模块名添加到
includes列表里就行; - 打包前一定要先本地运行
python jarv.py确认应用本身能正常启动,排除代码逻辑问题; - 确保你的Python环境是64位的,和报错里的
exe.win-amd64-3.8对应,避免位数不匹配导致的奇怪问题。
内容的提问来源于stack exchange,提问作者Ethan Rodrigues




