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.
相关产品推荐
相关产品推荐

