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

PyInstaller打包后运行报错:无法导入GenerationMixin,求解决方案

解决PyInstaller打包mT5摘要程序的ImportError问题

问题根源

这个错误要么是transformers版本更新后,GenerationMixin的导入路径发生了变化,要么是PyInstaller打包时没把相关模块完整收集,还有可能是模型加载方式存在兼容性问题。

具体解决办法

1. 修正导入路径(针对版本变动)

先确认你使用的transformers版本:

  • 新版本的transformers中,GenerationMixin已经迁移到transformers.generation.utils路径下。如果代码里直接写了from transformers.generation import GenerationMixin,改成:
    from transformers.generation.utils import GenerationMixin
    
  • 要是你通过模型类间接用到这个类,确认mT5模型是否用官方指定的MT5ForConditionalGeneration类加载,这个类的兼容性更强。

2. 让PyInstaller完整打包transformers模块

PyInstaller经常无法自动识别transformers的动态导入模块,需要手动指定:

  • 在打包命令中添加--hidden-import参数,明确补充缺失的模块:
    pyinstaller --hidden-import=transformers.generation.utils --hidden-import=transformers.models.mt5 --hidden-import=transformers.models.mt5.modeling_mt5 --hidden-import=transformers.models.mt5.tokenization_mt5 你的脚本名.py
    
  • 或者创建一个hook-transformers.py文件,内容如下:
    from PyInstaller.utils.hooks import collect_submodules
    
    hiddenimports = collect_submodules('transformers')
    
    然后打包时指定这个hook文件所在的目录:
    pyinstaller --additional-hooks-dir=. 你的脚本名.py
    

3. 更换更兼容的模型加载方式

用torch.load直接加载t5_summary.pt容易出现版本兼容问题,建议改用transformers官方的保存和加载方法:

  • 微调完成后,用save_pretrained保存模型和分词器:
    model.save_pretrained("./fine_tuned_mt5")
    tokenizer.save_pretrained("./fine_tuned_mt5")
    
  • 加载时用from_pretrained方法:
    from transformers import MT5ForConditionalGeneration, MT5Tokenizer
    tokenizer = MT5Tokenizer.from_pretrained("./fine_tuned_mt5")
    model = MT5ForConditionalGeneration.from_pretrained("./fine_tuned_mt5")
    
    这种方式能适配不同版本的transformers,还能避免模型格式不兼容的问题。

4. 锁定transformers版本

如果是版本不匹配导致的问题,把transformers版本固定为你微调模型时使用的版本,比如:

pip install transformers==4.30.2  # 替换成你训练时的具体版本号

然后重新打包,确保打包环境和训练环境的依赖版本完全一致。

内容的提问来源于stack exchange,提问作者Emir-Liu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 01:55:11