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

使用PyInstaller打包Kivy应用为EXE时遇多类错误求助

解决Kivy + PyInstaller打包EXE的运行错误

打包失败的核心问题是资源文件遗漏和依赖路径配置错误,以下是修正后的完整.spec文件及针对性解决方案:

修正后的.spec文件

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

from kivy_deps import sdl2, glew
import os
from kivy import kivy_data_dir
import dtale

block_cipher = None

# 定义需要打包的静态资源
datas = [
    # 打包Kivy核心资源(解决default.png加载失败)
    (kivy_data_dir, 'kivy_install/data'),
    # 打包dtale多语言资源(解决translations路径找不到)
    (os.path.join(os.path.dirname(dtale.__file__), 'translations'), 'dtale/translations'),
]

a = Analysis(
    ['../tübitak/main.py'],
    pathex=[os.path.abspath('../tübitak')],  # 添加主脚本所在目录到搜索路径
    binaries=[],
    datas=datas,
    hiddenimports=[
        'dtale',
        'dtale.translations',
        'dtale.charts.utils',
        'dtale.column_analysis',
        'dtale.column_builders',
        'dtale.views',
        'dtale.app'
    ],  # 补充dtale动态导入的模块
    hookspath=[],
    hooksconfig={},
    runtime_hooks=[],
    excludes=['kivy_deps.angle'],  # 排除angle依赖,避免路径冲突
    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='touchtracer',
    debug=False,
    bootloader_ignore_signals=False,
    strip=False,
    upx=True,
    console=True,
    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,
    *[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)],
    strip=False,
    upx=True,
    upx_exclude=[],
    name='touchtracer',
)

关键修改点说明

1. 补充缺失的静态资源

  • Kivy运行依赖自带的图片、GLSL着色器等资源,通过kivy_data_dir获取官方资源目录,打包后映射到kivy_install/data路径,解决Unable to load image <...default.png>错误。
  • dtale的translations是多语言静态文件夹,手动指定源路径和目标路径,解决FileNotFoundError: ...dtale/translations错误。

2. 修正模块搜索路径

将主脚本所在目录添加到pathex,确保PyInstaller能正确识别本地模块,避免路径解析异常。

3. 补充隐式导入模块

dtale部分模块采用动态导入,PyInstaller无法自动检测,手动添加到hiddenimports,防止运行时出现模块找不到的报错。

4. 排除冲突依赖

如果使用glew作为GL后端,排除kivy_deps.angle可避免路径初始化错误(即TypeError: expected str...not NoneType),两者无需同时打包。

额外注意事项

  • 优先使用os.path.join拼接路径,避免Windows与Linux的路径格式冲突。
  • 打包前确保Kivy、PyInstaller、dtale均为兼容版本(如Kivy 2.1.0搭配PyInstaller 5.x)。
  • 若仍有资源缺失,可开启debug=True查看详细日志,定位遗漏的资源文件。

内容的提问来源于stack exchange,提问作者Taha Koray Aslan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 12:40:35