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

PyInstaller打包含PyQt5、transformers的项目为exe时提示tqdm缺失如何解决

解决方案

核心原因

transformers 库会通过 importlib.metadata 检查依赖包的版本元数据,PyInstaller 默认不会将 Python 包的版本元数据(*.dist-info 目录)打包到 exe 中,即使 tqdm 代码已经被打包,版本校验不通过仍会报错。

操作步骤

  1. 修改打包用的 .spec 配置文件
    在文件最开头添加如下代码,用于自动获取依赖包的元数据路径:
import os
from importlib.metadata import distribution

def get_package_metadata(pkg_name):
    dist = distribution(pkg_name)
    dist_info_dir = f"{dist.name}-{dist.version}.dist-info"
    return (dist.locate_file(dist_info_dir), dist_info_dir)
  1. 修改 Analysis 配置段
  • 补全 hiddenimports 列表,添加缺失的依赖项,避免后续同类报错
  • 在 datas 列表中添加依赖包的元数据条目
    修改后的配置示例:
a = Analysis(['App.py'],
             pathex=[],
             binaries=[],
             datas=[
                ('./resources/images/logo.png', '.'), 
                ('./resources/model/config.json', '.'), 
                ('./resources/model/pytorch_model.bin', '.'), 
                ('./resources/model/special_tokens_map.json', '.'), 
                ('./resources/model/tokenizer.json', '.'), 
                ('./resources/model/tokenizer_config.json', '.'), 
                ('./resources/model/vocab.txt', '.'),
                # 新增依赖包元数据配置
                get_package_metadata('tqdm'),
                get_package_metadata('transformers'),
                get_package_metadata('datasets'),
                get_package_metadata('tokenizers'),
                get_package_metadata('packaging')
            ],
             # 补全隐式导入依赖
             hiddenimports=['tqdm', 'packaging', 'regex', 'requests', 'sacremoses', 'tokenizers', 'datasets.utils._filelock'],
             hookspath=[],
             hooksconfig={},
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
  1. 清理缓存重新打包
    执行打包命令时添加 --clean 参数清理旧缓存,避免缓存影响:
pyinstaller --clean App.spec

备选临时方案

如果不想修改 spec 配置,可以在代码最开头、导入 transformers 之前添加环境变量跳过版本校验:

import os
# 禁用transformers版本检查
os.environ['TRANSFORMERS_SKIP_VERSION_CHECK'] = '1'
os.environ['TRANSFORMERS_NO_ADVISORY_WARNINGS'] = '1'

from PyQt5.QtCore import QThread, QObject, pyqtSignal
from transformers import AutoTokenizer, AutoModelForQuestionAnswering, pipeline

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 07:54:03