【发布时间】:2019-12-03 14:12:04
【问题描述】:
我的目录结构如下:
- project
- server.py
- test-model (dir)
我的脚本如下所示:
@app.route("/spacy/entities", methods=['GET', 'POST'])
def spacy_entities():
import spacy
nlp = spacy.load('test-model') // also tried './test-model'
找不到模型“测试模型”。它似乎不是快捷链接、Python 包或数据目录的有效路径。
我在 vagrant 中运行这个脚本。
vagrant@homestead:~/Code/sideprojects/project$ pwd
/home/vagrant/Code/sideprojects/project
我尝试过的事情:
1. os.path.realpath('.') -> /home/vagrant/Code
2. os.path.realpath(__file__) -> /home/vagrant/Code/server.py
3. os.path.dirname(os.path.realpath(__file__)) -> /home/vagrant/Code
但它应该是 /home/vagrant/Code/sideprojects/project 以便它可以找到“测试模型”。我做错了什么?
(我试图避免放置硬编码路径)
编辑:我试过了:
path = os.path.dirname(os.path.realpath(__file__)) + '/sideprojects/project'
nlp = spacy.load(path + "/test-model")
找不到模型“/home/vagrant/Code/sideprojects/project/test-model”。它似乎不是快捷链接、Python 包或数据目录的有效路径。
完整的错误是:
文件“server.py”,第 40 行,在 spacy_entities nlp = spacy.load(路径 + "/goal1") 文件“/home/vagrant/.local/lib/python3.6/site-packages/spacy/init.py”,第 30 行,加载中 return util.load_model(name, **overrides) 文件“/home/vagrant/.local/lib/python3.6/site-packages/spacy/util.py”,第 169 行,在 load_model 引发 IOError(Errors.E050.format(name=name))
OSError: [E050] 找不到模型“/home/vagrant/Code/sideprojects/project/test-model”。它似乎不是快捷链接、Python 包或数据目录的有效路径。
【问题讨论】:
-
如果你正在运行 server.py 来运行烧瓶服务器,那么它应该可以工作,否则给出来自项目基础根目录的路径,例如,
spacy.load('project/test-model') -
但是我会错过
/sideprojects部分,如果我最终输入'sideprojects/project/test-model',不是吗?有什么方法可以说getpath(./test-model')之类的吗?目前我以python3 server.py运行它,但最终我想与 nohup 一起使用,并且我不希望它在未来变得混乱/硬编码(或者即使我将它部署到服务器) -
在这种情况下,编写一个加载 spacy 模型的函数并返回加载的 nlp 对象并在这条路线上调用该对象,我简单来说,编写一个函数来完美地加载 ner 模型与您的项目架构,然后在路由中调用该对象,如
nlp = load_model() -
@temmo 我添加了一个编辑,但即使使用(部分)硬编码路径仍然无法使其工作。顺便说一句,我是 python 菜鸟 - 你能指导我理解你的意思吗?
-
非常感谢!我让它工作了。如果您添加答案,我可以接受它