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

Kivy+PyInstaller打包exe报错:'NoneType'无'load_module'属性

Kivy打包EXE后运行报错:AttributeError: 'NoneType' object has no attribute 'load_module'

报错信息

Traceback (most recent call last):
   File "main.py", line 12, in <module>
     from kivy.app import App
   File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
   File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
   File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
   File "PyInstaller\loader\pyimod02_importers.py", line 499, in exec_module
   File "kivy\__init__.py", line 317, in <module>
 AttributeError: 'NoneType' object has no attribute 'load_module'
[21476] Failed to execute script 'main' due to unhandled exception!

相关代码与配置

main.py关键代码

from kivy.app import App  # 第12行

class MyMainApp(App):
    def build(self):
        self.title = "MyTitle"
        self.default_font = "Lato-Regular"
        return kv

当前使用的main.spec

# -*- mode: python ; coding: utf-8 -*-
import os
from kivy_deps import sdl2, glew

block_cipher = None

added_files = [
         ( 'my.kv', '.' ),
         ]

a = Analysis(
    ['main.py'],
    pathex=[],
    binaries=[],
    datas=[],
    hiddenimports=[],
    hookspath=[],
    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='main',
    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, Tree('.'),
    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='main',
)

已尝试的无效操作

  • 重新生成单文件/单目录模式的.spec文件
  • 在.spec中添加"kivy.app"至hiddenimports
  • 降级PyInstaller版本

解决方案

1. 修复.spec中的datas配置

定义的added_files未在Analysis的datas参数中引用,导致kv文件未被打包,可能引发Kivy初始化异常。修改Analysis部分:

a = Analysis(
    ['main.py'],
    pathex=[],
    binaries=[],
    datas=added_files,  # 引用added_files
    hiddenimports=[],
    hookspath=[],
    hooksconfig={},
    runtime_hooks=[],
    excludes=[],
    win_no_prefer_redirects=False,
    win_private_assemblies=False,
    cipher=block_cipher,
    noarchive=False,
)

2. 添加Kivy核心隐式导入

扩展hiddenimports,加入Kivy运行必需的核心模块:

hiddenimports=['kivy.uix.widget', 'kivy.graphics', 'kivy.lang', 'kivy.config', 'kivy.app'],

3. 禁用UPX压缩

UPX压缩可能损坏Kivy的二进制依赖,在EXE和COLLECT段将upx=True改为upx=False:

exe = EXE(
    # 其他参数保留
    upx=False,
    # 其他参数保留
)
coll = COLLECT(
    # 其他参数保留
    upx=False,
    # 其他参数保留
)

4. 启用noarchive模式

在Analysis中设置noarchive=True,避免Kivy模块被打包进PYZ文件引发导入冲突:

a = Analysis(
    # 其他参数保留
    noarchive=True,
    # 其他参数保留
)

5. 匹配Kivy与PyInstaller版本兼容性

确保两者版本适配,推荐组合:

  • Kivy 2.1.0 + PyInstaller 5.6.2
  • Kivy 2.2.0 + PyInstaller 5.10.1

执行命令重新安装指定版本:

pip install kivy==2.1.0 pyinstaller==5.6.2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 03:25:26