我想创建一个包含spaCy的python代码的二进制文件。
# main.py
import spacy
import en_core_web_sm
def main() -> None:
nlp = spacy.load("en_core_web_sm")
# nlp = en_core_web_sm.load()
doc = nlp("This is an example")
print([(w.text, w.pos_) for w in doc])
if __name__ == "__main__":
main()除了我的代码之外,我还创建了两个PyInstaller-hook,如here所述
为了创建二进制文件,我使用以下命令pyinstaller main.py --additional-hooks-dir=.。
在执行二进制文件时,我得到以下错误消息:
Traceback (most recent call last):
File "main.py", line 19, in <module>
main()
File "main.py", line 12, in main
nlp = spacy.load("en_core_web_sm")
File "spacy/__init__.py", line 47, in load
File "spacy/util.py", line 329, in load_model
OSError: [E050] Can't find model 'en_core_web_sm'. It doesn't seem to be a Python package or a valid path to a data directory.如果我使用nlp = spacy.load("en_core_web_sm")加载spacy模型,而不是使用nlp = en_core_web_sm.load(),我会得到以下错误:
Traceback (most recent call last):
File "main.py", line 19, in <module>
main()
File "main.py", line 13, in main
nlp = en_core_web_sm.load()
File "en_core_web_sm/__init__.py", line 10, in load
File "spacy/util.py", line 514, in load_model_from_init_py
File "spacy/util.py", line 389, in load_model_from_path
File "spacy/util.py", line 426, in load_model_from_config
File "spacy/language.py", line 1662, in from_config
File "spacy/language.py", line 768, in add_pipe
File "spacy/language.py", line 659, in create_pipe
File "thinc/config.py", line 722, in resolve
File "thinc/config.py", line 771, in _make
File "thinc/config.py", line 826, in _fill
File "thinc/config.py", line 825, in _fill
File "thinc/config.py", line 1016, in make_promise_schema
File "spacy/util.py", line 137, in get
catalogue.RegistryError: [E893] Could not find function 'spacy.Tok2Vec.v1' in function registry 'architectures'. If you're using a custom function, make sure the code is available. If the function is provided by a third-party package, e.g. spacy-transformers, make sure the package is installed in your environment.发布于 2021-03-21 03:09:30
我也有同样的问题。在您上面发布的错误消息之后,您是否看到"Available names:...“消息?此消息表明spacy.Tok2Vec.v2可用,但v1不可用。我能够在dist\en_core_web_sm\en_core_web_sm-3.0.0\config.cfg)上编辑en_core_web_sm的配置文件,并更改spacy.Tok2Vec.v1 -> spacy.Tok2Vec.v2的所有引用。我也必须为spacy.MaxoutWindowEncoder.v1这样做。这对我来说仍然是一个谜,为什么我只在pyinstaller发行版中有这个问题,而不是在我的未编译脚本中。
发布于 2021-09-26 00:59:51
我遇到了同样的问题,并通过将空间遗留包复制到编译后的目标目录解决了这个问题。
您也可以通过Pyinstaller将其挂接起来,但我并没有真正尝试过。
我希望我的回答能有所帮助。
https://stackoverflow.com/questions/66710923
复制相似问题