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

如何在PyInstaller SPEC文件中正确配置PyTables二进制文件收集?

问题描述

更新PyInstaller至最新版本后,打包包含PyTables的Python脚本失败,报错:

RuntimeError: Blosc2 library not found. I looked for "libblosc2.dll, C:\Users\USER\AppData\Local\Temp_MEI10642\tables\libblosc2.dll, None"

根据相关GitHub帖子提示,需要添加tables的二进制文件。已有SPEC文件,尝试两种配置均未解决:

  • Case1:设置binaries=[('C:\\Python39\\bin\\libblosc2.dll', 'BINARY')],仍报相同错误
  • Case2:设置binaries=[('C:\\Python39\\bin\\libblosc2.dll', '.')],导致加载器循环无法启动

需要知道如何在SPEC文件中正确实现--collect-binaries=tables的效果。

系统信息:PyInstaller 6.3.0,Python 3.9.7,Windows 10 19044 SP0,tables 3.9.2

解决方案

方法1:使用PyInstaller内置函数自动收集二进制文件

直接在SPEC文件中调用PyInstaller提供的collect_binaries函数,可自动收集tables依赖的所有二进制文件,完全等价于命令行--collect-binaries=tables的效果。修改后的SPEC文件示例:

from PyInstaller.utils.hooks import collect_binaries

a = Analysis(
    ['你的脚本文件名.py'],
    pathex=[],
    binaries=collect_binaries('tables'),  # 替换原有的binaries配置
    datas=[],
    hiddenimports=[],
    hookspath=[],
    hooksconfig={},
    runtime_hooks=[],
    excludes=[],
    noarchive=False,
)
pyz = PYZ(a.pure)

exe = EXE(
    pyz,
    a.scripts,
    a.binaries,
    a.datas,
    [],
    name='你的程序名称',
    debug=False,
    bootloader_ignore_signals=False,
    strip=False,
    upx=True,
    upx_exclude=[],
    runtime_tmpdir=None,
    console=True,
    disable_windowed_traceback=False,
    argv_emulation=False,
    target_arch=None,
    codesign_identity=None,
    entitlements_file=None,
)

方法2:手动指定正确的输出路径

若不想使用自动收集,需将libblosc2.dll放到PyTables预期的路径——即tables子目录下(对应报错中的临时目录路径)。修改SPEC的binaries配置:

binaries=[('C:\\Python39\\bin\\libblosc2.dll', 'tables')]

打包后,libblosc2.dll会被放置到程序临时目录的tables子文件夹中,与PyTables的查找路径匹配,可解决库未找到的问题。

之前配置失败的原因

  • Case1中的'BINARY'是自定义目录,PyTables不会在此路径下查找依赖库,因此报错依旧
  • Case2中的.会将dll放到程序根目录,可能与其他依赖冲突,引发加载循环

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 05:12:19