部署Flask NLP应用至GCP/AWS时遇en-core-web-sm==3.5.0安装错误
解决部署时找不到en-core-web-sm==3.5.0的问题
问题出在这:en-core-web-sm这类spaCy模型的PyPI包名其实是en_core_web_sm(用下划线代替连字符),而且直接在requirements.txt里写版本号,部分部署环境没法识别spaCy模型的特殊安装逻辑,所以才会报找不到版本的错误。
给你几个可行的解决办法:
办法1:修改requirements.txt的写法
把requirements.txt里的en-core-web-sm==3.5.0换成下面任意一种格式:
- 直接用PyPI上的正确包名:
en_core_web_sm==3.5.0 - 或者指定模型的官方下载链接,确保环境能直接拉取:
https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.5.0/en_core_web_sm-3.5.0.tar.gz#egg=en_core_web_sm==3.5.0
办法2:在部署流程里加模型安装命令
如果改requirements.txt还是不行,就在部署的启动脚本或者构建步骤里手动加安装命令:
python -m spacy download en_core_web_sm==3.5.0
比如在Google Cloud App Engine的app.yaml里,可以这么写启动命令:
entrypoint: "pip install https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.5.0/en_core_web_sm-3.5.0.tar.gz && gunicorn main:app"
AWS EC2的话,就在部署脚本里先执行上面的pip安装命令,再启动Flask应用。
办法3:把模型直接打包到项目里
要是上面俩办法都不好使,就把本地已经装好的模型直接复制到项目里,代码里改加载路径就行:
- 本地找到en_core_web_sm的安装目录,Windows一般在
Lib\site-packages\en_core_web_sm,Linux/macOS在lib/python3.9/site-packages/en_core_web_sm - 把整个
en_core_web_sm文件夹复制到你的项目根目录 - Flask代码里修改模型加载的代码:
import spacy nlp = spacy.load("./en_core_web_sm")
这样部署的时候就不用再装模型,直接读本地文件就行。
最后先在本地测试修改后的配置或代码,确保能正常跑,再重新执行部署命令就行。
内容的提问来源于stack exchange,提问作者Kavishka Rajapakshe
相关产品推荐
相关产品推荐

