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

使用PyInstaller打包Kivy程序遇无限Trace日志及递归错误

解决Kivy程序PyInstaller打包递归错误及无限日志问题

打包Kivy官方示例程序时,PyInstaller过程中出现无限循环的Trace日志,生成的exe运行时报maximum recursion depth exceeded和AttributeError: 'NoneType' object has no attribute 'write'错误,环境为PyInstaller 5.11.0、Python 3.8.3。


步骤1:修改主程序,禁用Kivy调试日志

在main2.py开头添加日志配置,避免打包时的无限日志输出:

import logging
logging.basicConfig(level=logging.WARNING)
from kivy.logger import Logger
Logger.setLevel(logging.WARNING)

# 原代码继续
from random import random
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.button import Button
from kivy.graphics import Color, Ellipse, Line

# ... 剩余原代码保持不变

步骤2:修改.spec文件,添加必要配置

编辑生成的main2.spec,调整以下关键配置:

  • 添加Kivy依赖的隐藏导入项
  • 指定Kivy官方PyInstaller钩子路径
  • 关闭UPX压缩(部分Kivy二进制文件与UPX不兼容)

修改后的完整.spec文件:

# -*- mode: python ; coding: utf-8 -*-

block_cipher = None

a = Analysis(
    ['main2.py'],
    pathex=[],
    binaries=[],
    datas=[],
    hiddenimports=['kivy.deps.sdl2', 'kivy.deps.glew', 'kivy.deps.angle', 'kivy.graphics'],
    hookspath=['site-packages/kivy/tools/packaging/pyinstaller_hooks'],
    hooksconfig={},
    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,
    [],
    exclude_binaries=True,
    name='main2',
    debug=False,
    bootloader_ignore_signals=False,
    strip=False,
    upx=False,
    console=False,
    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,
    strip=False,
    upx=False,
    upx_exclude=[],
    name='main2',
)

步骤3:重新打包

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

pyinstaller main2.spec

额外说明

  • 如果hookspath路径找不到,替换为本地Python环境中Kivy钩子的实际路径,通常为Lib\site-packages\kivy\tools\packaging\pyinstaller_hooks(Windows环境)
  • 关闭UPX是因为部分Kivy依赖的二进制库被压缩后会触发运行时错误
  • 禁用调试日志可直接解决打包过程中的无限递归日志输出,同时消除运行时的logging模块递归异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 09:33:17