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

Python代码正常但PyInstaller打包后重启exe报模块缺失错误

问题描述

本地运行Python代码正常,经PyInstaller打包为exe文件后,首次运行可正常生成报告;但重启应用(支持用户导入下一个文件)时,程序崩溃并抛出如下异常:

Traceback (most recent call last):
  File "Ish.py", line 1, in <module>
  File "PyInstaller\loader\pyimod02_importers.py", line 378, in exec_module
  File "ReportGenerator.py", line 1, in <module>
  File "PyInstaller\loader\pyimod02_importers.py", line 378, in exec_module
  File "fpdf\__init__.py", line 22, in <module>
  File "PyInstaller\loader\pyimod02_importers.py", line 378, in exec_module
  File "fpdf\fpdf.py", line 97, in <module>
  File "PyInstaller\loader\pyimod02_importers.py", line 378, in exec_module
  File "fpdf\image_parsing.py", line 25, in <module>
  File "PyInstaller\loader\pyimod02_importers.py", line 378, in exec_module
  File "fpdf\svg.py", line 38, in <module>
  File "PyInstaller\loader\pyimod02_importers.py", line 378, in exec_module
  File "fpdf\output.py", line 35, in <module>
  File "PyInstaller\loader\pyimod02_importers.py", line 378, in exec_module
  File "fontTools\subset\__init__.py", line 8, in <module>
  File "PyInstaller\loader\pyimod02_importers.py", line 378, in exec_module
  File "fontTools\ttLib\tables\otTables.py", line 19, in <module>
  File "PyInstaller\loader\pyimod02_importers.py", line 378, in exec_module
  File "fontTools\pens\boundsPen.py", line 2, in <module>
ModuleNotFoundError: No module named 'fontTools.misc.bezierTools'

已尝试的操作:

  • 在.spec文件中添加隐式导入配置:
a = Analysis(
    ['Ish.py'],
    pathex=[],
    binaries=[],
    datas=[('logo.ico', '.')],
    hiddenimports=['fontTools.misc.bezierTools', 'fontTools.subset', 'fontTools.ttLib', 'fontTools.pens.boundsPen'],
    hookspath=[],
    hooksconfig={},
    runtime_hooks=[],
    excludes=[],
    noarchive=False,
    optimize=0,
)
pyz = PYZ(a.pure)

exe = EXE(
    pyz,
    a.scripts,
    a.binaries,
    a.datas,
    [],
    name='Threat Intellisense',
    debug=False,
    bootloader_ignore_signals=False,
    strip=False,
    upx=True,
    upx_exclude=[],
    runtime_tmpdir=None,
    console=False,
    disable_windowed_traceback=False,
    argv_emulation=False,
    target_arch=None,
    codesign_identity=None,
    entitlements_file=None,
    icon=['logo.ico'],
)
  • 使用--add-data参数引入fonttools目录,问题仍未解决。
解决方案
  1. 锁定fontTools兼容版本
    部分fontTools版本的模块结构有调整,可能导致依赖收集不全。执行以下命令安装稳定兼容版本:

    pip install fonttools==4.38.0
    

    安装完成后重新打包测试。

  2. 修改hiddenimports为完整包导入
    将.spec文件中的hiddenimports改为直接导入整个fontTools包,让PyInstaller自动收集所有子模块:

    hiddenimports=['fontTools'],
    
  3. 禁用UPX压缩
    UPX压缩可能破坏部分模块的结构,导致二次运行时加载失败。修改.spec文件中的UPX配置:

    upx=False,
    
  4. 指定固定临时目录
    单文件打包时,PyInstaller会在系统临时目录解压文件,二次运行时可能出现文件被清理的情况。在.spec文件中指定固定临时目录:

    runtime_tmpdir='./app_temp',
    

    确保该目录有读写权限,避免依赖文件丢失。

  5. 手动补全所有相关子模块
    如果上述方法无效,直接列出fontTools的所有关联子模块:

    hiddenimports=[
        'fontTools.misc.bezierTools',
        'fontTools.misc',
        'fontTools.pens',
        'fontTools.ttLib',
        'fontTools.subset',
        'fontTools.ttLib.tables.otTables'
    ],
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 14:17:34