使用Pyinstaller打包空间模型:E050找不到模型



我正在使用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';使用PyInstaller 包装时找不到SpaCy型号

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

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

谢谢!

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

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")

最新更新