【发布时间】:2021-07-17 13:27:23
【问题描述】:
我正在使用 PyInstaller 将 python 脚本打包成 .exe。该脚本使用 spacy 加载以下模型:en_core_web_sm。我已经运行python -m spacy download en_core_web_sm 将模型下载到本地。问题是当 PyInstaller 尝试打包我的脚本时,它找不到模型。我收到以下错误: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. 我想这可能意味着我需要在我的 python 脚本中运行下载命令以确保它具有模型,但如果我让我的脚本下载模型,它只会说明要求已经很满足了。我还有一个处理引入隐藏导入的钩子文件,并且应该也引入模型:
from PyInstaller.utils.hooks import collect_all, collect_data_files
datas = []
datas.extend(collect_data_files('en_core_web_sm'))
# ----------------------------- SPACY -----------------------------
data = collect_all('spacy')
datas.extend(data[0])
binaries = data[1]
hiddenimports = data[2]
# ----------------------------- THINC -----------------------------
data = collect_all('thinc')
datas.extend(data[0])
binaries += data[1]
hiddenimports += data[2]
# ----------------------------- CYMEM -----------------------------
data = collect_all('cymem')
datas.extend(data[0])
binaries += data[1]
hiddenimports += data[2]
# ----------------------------- PRESHED -----------------------------
data = collect_all('preshed')
datas.extend(data[0])
binaries += data[1]
hiddenimports += data[2]
# ----------------------------- BLIS -----------------------------
data = collect_all('blis')
datas.extend(data[0])
binaries += data[1]
hiddenimports += data[2]
# ----------------------------- STDNUM -----------------------------
data = collect_all('stdnum')
datas.extend(data[0])
binaries += data[1]
hiddenimports += data[2]
# ----------------------------- OTHER -------------------------------
hiddenimports += ['srsly.msgpack.util']
我使用以下代码下载模型,然后用 PyInstaller 打包脚本:
os.system('python -m spacy download en_core_web_sm')
PyInstaller.__main__.run([path_to_script, '--onefile', '--additional-hooks-dir=.'])
hook-spacy.py 脚本与 PyInstaller 正在打包的脚本位于同一目录中。
如果我在本地运行脚本,所有这些都有效。它会找到应有的模型。如果我尝试使用 PyInstaller 打包脚本并尝试运行 .exe,我只会收到此错误。
我正在使用 Python v3.8.7、PyInstaller v4.2 和 spacy v3.0.3 与 en_core_web_sm v3.0.0
【问题讨论】:
-
另见这个问题(和好的答案):stackoverflow.com/questions/67354667/…
标签: python pyinstaller spacy