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

使用PyInstaller打包含spaCy模型的Qt应用时遇错误求助

解决PyInstaller打包spaCy zh_core_web_trf模型的报错问题

问题背景

Python 3.10.13 + .venv环境开发Qt应用,加载zh_core_web_trf模型在VSCode中运行正常,但PyInstaller打包后报错。已尝试切换环境、添加.spec隐藏导入、修改模型加载方式,问题未解决。

可行解决方案

1. 硬编码模型本地路径

PyInstaller无法自动解析spaCy模型的动态加载路径,直接将模型文件复制到打包后的程序目录,代码中指定绝对路径:

import spacy
from pathlib import Path

# 模型放在打包后程序同目录的models/zh_core_web_trf下
model_dir = Path(__file__).parent / "models" / "zh_core_web_trf"
nlp = spacy.load(model_dir)

2. 完善.spec文件配置

在生成的.spec文件中添加两项关键配置:

  • 添加模型资源到打包目录:
    将本地环境中的模型目录映射到打包后的目录:
    datas=[
        ("/your/venv/path/lib/python3.10/site-packages/zh_core_web_trf", "zh_core_web_trf"),
    ]
    
  • 补充隐藏导入项:
    zh_core_web_trf依赖的transformers相关模块容易被PyInstaller遗漏,添加到hiddenimports:
    hiddenimports=[
        "transformers",
        "transformers.models.bert",
        "transformers.models.bert.tokenization_bert",
        "transformers.models.bert.modeling_bert",
        "transformers.models.bert.configuration_bert",
        "spacy_transformers",
        "spacy_transformers.pipeline",
        "spacy_transformers.util",
        "thinc",
        "thinc.layers",
    ]
    

3. 禁用UPX压缩

Transformer模型权重文件较大,UPX压缩会导致文件损坏,打包时使用--noupx参数:

pyinstaller --noupx --noconsole your_qt_script.py

4. 验证模型文件完整性

打包前确认zh_core_web_trf目录下的meta.json、config.cfg、model-last文件夹完整。若通过pip安装模型,可执行spacy link zh_core_web_trf zh_core_web_trf确保模型链接正常。

额外提示

  • 打包时必须激活目标.venv环境,避免混用系统Python或其他环境的依赖。
  • 清理venv环境中无用的包,减少打包冗余,降低冲突概率。

内容的提问来源于stack exchange,提问作者黑桐谷歌

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 12:21:14