【问题标题】:Packaging SpaCy Model with Pyinstaller: E050 Can't find model使用 Pyinstaller 打包 SpaCy 模型:E050 找不到模型
【发布时间】:2021-07-25 00:33:30
【问题描述】:

我正在使用 Pyinstaller 打包我的 python spacy 代码。我正在使用 de_core_news_sm 并通过 pip 安装它。 正常脚本按预期执行,但一旦使用 pyinstaller 打包它就找不到模型[E050] Can't find model 'de_core_news_sm'. It doesn't seem to be a Python package or a valid path to a data directory. 我为每个钩子获取了一个文件:

from PyInstaller.utils.hooks import collect_all

# ----------------------------- blis -----------------------------
data = collect_all('blis')
datas = data[0]
binaries = data[1]
hiddenimports = data[2]
from PyInstaller.utils.hooks import collect_all

# ----------------------------- cymen -----------------------------
data = collect_all('cymem')
datas = data[0]
binaries = data[1]
hiddenimports = data[2]
from PyInstaller.utils.hooks import collect_data_files
datas = collect_data_files("de_core_news_sm")
from PyInstaller.utils.hooks import collect_all

# ----------------------------- preshed -----------------------------
data = collect_all('preshed')
datas = data[0]
binaries = data[1]
hiddenimports = data[2]
from PyInstaller.utils.hooks import collect_all

# ----------------------------- SPACY -----------------------------
data = collect_all('spacy')
datas = data[0]
binaries = data[1]
hiddenimports = data[2]
from PyInstaller.utils.hooks import collect_all

# ----------------------------- thinc -----------------------------
data = collect_all('thinc')
datas = data[0]
binaries = data[1]
hiddenimports = data[2]

我使用以下 pyinstaller 命令:

pyinstaller script.py --hidden-import cmath --hidden-import srsly.msgpack.util

在这篇文章[1]中:Can't find SpaCy model when packaging with PyInstaller

这是从模块中添加数据文件的解决方案。那么我必须如何更改我的 script.py 运行时文件中的代码以及我必须如何更改挂钩文件?

顺便说一句,我在我的虚拟环境中使用:spacy 3.0.6、pyinstaller 4.3 和 python 3.8.0。

谢谢!

【问题讨论】:

    标签: python-3.x pyinstaller spacy-3


    【解决方案1】:

    将它添加到我的运行时脚本可以解决问题。我没有将其作为模块加载,而是从路径中加载我的模型

    from pathlib import Path
    bundle_dir = Path(__file__).parent.absolute()
    source_nlp = spacy.load(bundle_dir / "de_core_news_sm")
    

    以及收集所有de_core_news_sm数据的钩子文件

    from PyInstaller.utils.hooks import collect_data_files
    datas = collect_data_files("de_core_news_sm")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-11
      • 2020-01-23
      • 1970-01-01
      • 2020-06-14
      • 1970-01-01
      • 2023-03-08
      • 2020-02-03
      • 2020-04-18
      相关资源
      最近更新 更多