首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用PyInstaller创建spaCy的二进制文件

使用PyInstaller创建spaCy的二进制文件
EN

Stack Overflow用户
提问于 2021-03-19 23:20:45
回答 2查看 588关注 0票数 2

我想创建一个包含spaCy的python代码的二进制文件。

代码语言:javascript
复制
# 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=.

在执行二进制文件时,我得到以下错误消息:

代码语言:javascript
复制
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(),我会得到以下错误:

代码语言:javascript
复制
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.
EN

回答 2

Stack Overflow用户

发布于 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发行版中有这个问题,而不是在我的未编译脚本中。

票数 1
EN

Stack Overflow用户

发布于 2021-09-26 00:59:51

我遇到了同样的问题,并通过将空间遗留包复制到编译后的目标目录解决了这个问题。

您也可以通过Pyinstaller将其挂接起来,但我并没有真正尝试过。

我希望我的回答能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66710923

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档