部署Django项目遇Spacy模型加载错误:找不到en_core_web_sm
解决Vercel部署Django时spacy模型找不到的问题
问题根源
spacy核心包(如spacy==3.1.3)并不附带语言模型,en_core_web_sm是独立的模型包。本地运行正常是因为你之前通过python -m spacy download en_core_web_sm安装过该模型,但部署到Vercel时,requirements.txt未指定安装这个模型,导致环境中缺失文件。
解决步骤
1. 修正requirements.txt,添加匹配版本的模型包
模型版本必须和spacy版本对应(spacy3.1.x对应模型3.1.x),且PyPI上的模型包名是en-core-web-sm(连字符格式),不是代码里的下划线格式。修改后的requirements.txt如下:
asgiref==3.4.1 Django==3.2.8 python-dateutil==2.8.2 six==1.16.0 sqlparse==0.4.2 tzdata==2021.5 gunicorn==20.1.0 spacy==3.1.3 en-core-web-sm==3.1.0
2. 若直接安装模型包报错,用自定义构建脚本
如果Vercel执行requirements.txt时安装模型失败,可在项目根目录创建vercel-build.sh脚本:
#!/bin/bash pip install -r requirements.txt python -m spacy download en_core_web_sm python manage.py collectstatic --noinput
再在vercel.json中指定构建命令:
{ "buildCommand": "./vercel-build.sh" }
这样会先安装依赖,再下载模型,最后完成静态文件收集。
3. 确认代码加载逻辑
你的模型加载代码无需修改:
import spacy nlp = spacy.load("en_core_web_sm")
只要模型安装成功,该写法就能正确找到模型文件。
内容的提问来源于stack exchange,提问作者MS4
相关产品推荐
相关产品推荐

