无法在Digital Ocean Functions部署Spacy/Python模块求助
解决Digital Ocean Functions部署Spacy后找不到模块的问题
1. 确认项目结构合规
Digital Ocean Functions要求每个函数必须放在单独的子目录中,requirements.txt需要和main.py放在同一函数目录下,而非项目根目录。正确的典型结构如下:
my-spacy-function/ ├── packages/ │ └── my-package/ │ └── spacy-test/ │ ├── main.py │ └── requirements.txt
如果你的requirements.txt在根目录,DO的部署工具不会识别并安装依赖。
2. 使用远程构建避免环境差异
本地环境的依赖包可能和DO Functions的运行环境(如特定Python版本、系统架构)不兼容,尤其是blis、cymem这类含C扩展的包。部署时添加--remote-build参数,让DO在云端环境中安装依赖:
doctl serverless deploy . --remote-build
3. 指定匹配的Python运行时
检查DO Functions支持的Python版本(当前支持3.8、3.9、3.10),确保本地开发版本和云端一致。在函数目录下创建function.yml文件,明确指定运行时:
runtime: python:3.9
4. 检查依赖安装日志
部署完成后,触发函数获取激活ID,然后查看详细日志,确认依赖是否真的安装成功:
# 触发函数(假设函数路径为/my-package/spacy-test) doctl serverless functions invoke /my-package/spacy-test # 查看日志,替换<activation-id>为返回的ID doctl serverless activations logs <activation-id>
日志中如果有依赖安装失败的信息,针对性调整requirements.txt(比如移除pkg_resources==0.0.0这类无效依赖)。
5. 简化Spacy模型安装方式
直接在requirements.txt中引用模型whl可能存在网络问题,可改为在main.py中初始化时下载模型(注意:首次运行会耗时较长):
import spacy def main(arg): # 首次运行自动下载模型 if not spacy.util.is_package("en_core_web_sm"): spacy.cli.download("en_core_web_sm") nlp = spacy.load("en_core_web_sm") return {"body": 'test'}
或者提前将模型文件打包到函数目录中,配合spacy.load加载本地模型。
内容的提问来源于stack exchange,提问作者user3195845
相关产品推荐
相关产品推荐

