使用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,提问作者黑桐谷歌
相关产品推荐
相关产品推荐

