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

使用PyInstaller打包含spaCy的Python脚本时出现依赖循环错误

解决PyInstaller打包spaCy脚本的无限循环依赖提示问题

问题复现

使用PyInstaller打包依赖spaCy(en_core_web_sm pipeline)的Python脚本后,运行exe时CMD无限循环输出:

"Skipping pipeline package dependencies and setting --no-deps. You don't seem to have the spaCy package itself installed (maybe because you've built from source?), so installing the package dependencies would cause spaCy to be downloaded, which probably isn't what you want. If the pipeline package has other dependencies, you'll have to install them manually."

脚本在PyCharm中运行正常,已验证spaCy、pipeline安装正确,spec文件路径配置无误。

解决方案

1. 修正spec文件的datas配置

将pipeline目录完整复制到打包后的根目录(而非spacy/data子目录),修改Analysis中的datas:

datas=[(r'C:/Users/pryce/AppData/Local/Programs/Python/Python311/Lib/site-packages/en_core_web_sm', 'en_core_web_sm')],

2. 在脚本中手动指定pipeline路径加载

避免spaCy自动查找系统路径,改为根据运行环境动态加载pipeline:

import sys
import os
import spacy

if getattr(sys, 'frozen', False):
    # 打包后的环境,从临时目录加载pipeline
    pipeline_path = os.path.join(sys._MEIPASS, 'en_core_web_sm')
else:
    # 开发环境,直接加载已安装的pipeline
    pipeline_path = 'en_core_web_sm'

nlp = spacy.load(pipeline_path)

3. 补充hiddenimports确保核心模块被打包

更新Analysis中的hiddenimports,包含spaCy的核心子模块:

hiddenimports=['spacy', 'spacy.lang.en', 'en_core_web_sm', 'spacy.pipeline', 'spacy.util', 'spacy.tokens'],

4. 禁用spaCy的自动下载/更新检测

在脚本开头添加环境变量,阻止spaCy触发自动安装逻辑:

import os
os.environ['SPACY_NO_UPDATE_CHECK'] = '1'
os.environ['SPACY_NO_DOWNLOAD'] = '1'

原理说明

打包后spaCy无法识别系统中已安装的依赖,会触发自动下载逻辑,但由于打包环境的隔离性,又会重复检测到"spaCy未安装"的状态,导致无限循环输出提示。通过手动指定pipeline路径、补充必要的隐藏导入、禁用自动下载,即可切断这个循环。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 10:55:21