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

PyInstaller打包exe时报importlib.metadata.PackageNotFoundError: regex错误求助

根因说明

报错本质不是缺少regex依赖包,是transformers运行时需要通过importlib.metadata读取regex的版本元数据做校验,PyInstaller默认打包流程不会自动包含第三方包的.dist-info元数据目录,导致版本校验时无法找到对应信息触发报错。

解决方法

下面按操作复杂度从低到高给出可落地方案:

  • 方案1:打包参数直接指定收集元数据(推荐,无需修改代码或hook)
    执行打包命令时新增--collect-metadata regex参数,完整命令示例:
    pyinstaller --onefile --collect-metadata regex chatbot2.py
    
    如果后续运行时还出现其他同类依赖的元数据报错,继续追加--collect-metadata 对应包名参数即可。
  • 方案2:临时跳过版本校验(适合快速测试)
    找到Python环境下的transformers/utils/versions.py文件,定位到require_version函数,注释掉版本校验的执行逻辑,固定返回成功,直接跳过元数据读取步骤即可。
  • 方案3:完善hook配置(适合多次打包复用)
    你之前添加的hook未生效是因为没有配置元数据收集逻辑,修改hook-transformers.py文件加入以下内容:
    from PyInstaller.utils.hooks import collect_all, get_package_paths
    import os
    
    # 全量收集transformers的依赖、数据、隐藏导入
    datas, binaries, hiddenimports = collect_all('transformers')
    
    # 额外收集regex的元数据目录
    regex_base_path = get_package_paths('regex')[0]
    regex_parent_dir = os.path.dirname(regex_base_path)
    for dir_name in os.listdir(regex_parent_dir):
        if dir_name.startswith('regex-') and dir_name.endswith('.dist-info'):
            regex_dist_path = os.path.join(regex_parent_dir, dir_name)
            datas.append((regex_dist_path, dir_name))
            break
    
    打包时追加参数--additional-hooks-dir 你的hook文件存放目录即可。
注意事项
  • 你当前使用的是开发版PyInstaller 5.0.dev0,本身存在未修复的兼容性缺陷,可先降级到稳定版测试:
    pip install pyinstaller==4.10
    
  • 确认执行打包命令的PyInstaller和安装regex、transformers的Python环境为同一个,避免多环境冲突导致依赖未安装到对应环境。

内容的提问来源于stack exchange,提问作者Alina V.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 17:27:01