You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动