You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确生成无控制台窗口的KivyMD应用.exe文件?

问题描述

我尝试用PyInstaller打包KivyMD程序,测试代码如下:

from kivymd.app import MDApp
from kivymd.uix.label import MDLabel
from kivymd.uix.screen import Screen
 
class Demo(MDApp):
    def build(self):
        self.screen = Screen()
         
        self.l1 = MDLabel(
            text = "My Label"
        )

        self.screen.add_widget(self.l1)
        return self.screen 
 
if __name__ == "__main__":
    Demo().run()

使用的main.spec文件内容:

# -*- mode: python ; coding: utf-8 -*-
import os
from kivy_deps import sdl2, glew
block_cipher = None
from kivymd import hooks_path as kivymd_hooks_path

current_path = os.path.abspath('.')
icon_path = os.path.join(current_path, 'imagens', 'icone.ico')

a = Analysis(['main.py'],
             pathex=[current_path],
             binaries=[],
             datas=[],
             hiddenimports=[],
             hookspath=[kivymd_hooks_path],
             runtime_hooks=[],
             excludes=[],
             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,
          [],
          *[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)],
          name='Eaton',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          upx_exclude=[],
          runtime_tmpdir=None,
          icon=icon_path,
          console=False )

遇到的问题:设置console=True时,打包的exe能正常运行;但设置console=False时,程序启动报错。

解决方案

1. 排查图标路径问题

console=False时,程序不会输出控制台日志,若图标文件不存在或路径错误,会直接崩溃。先临时注释掉icon=icon_path这一行,重新打包测试,确认是否是图标导致的问题。

2. 添加必要的隐藏导入

PyInstaller可能无法自动检测到KivyMD的部分依赖模块,手动补充到hiddenimports:

hiddenimports=['kivymd.uix.label', 'kivymd.uix.screen', 'kivy.uix.screenmanager'],

3. 启用窗口模式错误提示

在EXE配置中添加disable_windowed_traceback=False,这样即使关闭控制台,程序崩溃时也会弹出错误提示窗口,方便定位问题:

exe = EXE(pyz,
          # 保留原有参数
          console=False,
          disable_windowed_traceback=False )

4. 修改Kivy配置,强制窗口模式

在main.py开头添加Kivy配置修改,避免程序依赖控制台输出:

from kivy.config import Config
Config.set('kivy', 'log_level', 'error')
Config.set('kivy', 'console', '0')

# 后续原有代码不变
from kivymd.app import MDApp
...

5. 禁用UPX压缩(可选)

UPX压缩可能损坏KivyMD的二进制依赖,暂时关闭upx=True,测试是否能正常运行。

6. 重新打包

修改完成后,执行命令重新打包:

pyinstaller main.spec

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 05:27:24