You need to enable JavaScript to run this app. Kivy应用VSCode运行正常,PyInstaller打包EXE后启动报错如何解决?
优惠活动
大模型
产品
解决方案
定价
更多

Kivy应用VSCode运行正常,PyInstaller打包EXE后启动报错如何解决?

问题根因

  • 代码时序错误:Window.size = (550, 700)被定义在MyLayout类的类属性层级,这段代码会在模块加载阶段就执行,此时Kivy的App实例还未启动,窗口渲染链路未完成初始化。本地开发时依赖加载速度快未触发问题,打包后资源加载延迟,就会出现Window对象还未实例化就调用size属性的AttributeError。
  • 打包遗漏依赖:报错提示SDL2: Unable to load image是因为PyInstaller打包时没有自动收录Kivy依赖的SDL2动态库、图像解码组件,同时你的spec文件中datas配置为空,项目用到的图标、静态图片等资源没有被打包进EXE,运行时资源加载失败导致窗口初始化终止。

解决方案

1. 修正代码执行时序

将Window大小配置移动到类实例化阶段,确保Kivy初始化完成后再执行:

from kivy.core.window import Window

class MyLayout(Widget):
    # 移除类层级的Window.size配置
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        # 放到实例化方法中执行,此时Window已完成初始化
        Window.size = (550, 700)

class LevermannScore(App):
    def build(self):
        return MyLayout()

if __name__ == "__main__":
    LevermannScore().run()

2. 调整spec打包配置

修改你的LevermannApp.spec文件,补全缺失的依赖和资源配置:

# -*- mode: python ; coding: utf-8 -*-
block_cipher = None

a = Analysis(['LevermannApp.py'],
             pathex=['C:\\Users\\Polzi\\Documents\\DEV\\Python-Private'],
             binaries=[],
             # 新增静态资源打包配置,根据你实际用到的资源调整
             datas=[
                 ('icons/*.ico', 'icons'),
                 # 如有kv文件、其他图片资源也在此处添加,例如('*.kv', '.')
             ],
             # 新增Kivy SDL2相关依赖的隐式导入配置
             hiddenimports=[
                 'kivy.core.window.window_sdl2',
                 'kivy.core.image.img_sdl2',
                 'kivy_deps.sdl2',
                 'kivy_deps.glew',
                 'kivy_deps.angle'
             ],
             hookspath=[],
             runtime_hooks=[],
             excludes=['matplotlib'],
             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,
          a.binaries,
          a.zipfiles,
          a.datas,
          [],
          name='LevermannApp',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          # 关闭UPX压缩,避免损坏SDL2动态库
          upx=False,
          upx_exclude=[],
          runtime_tmpdir=None,
          console=True , icon='icons\\levermannApp.ico')

3. 重新执行打包

使用修改后的spec文件执行打包命令:
pyinstaller LevermannApp.spec

如果打包后仍有报错,可临时将spec中EXE配置的debug=False改为debug=True,运行打包后的程序查看更详细的日志排查缺失依赖。


内容的提问来源于stack exchange,提问作者Rapid1898

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 04:09:02