更改 pyinstaller 可执行文件的 Stanza 模型目录
Changing Stanza model directory for pyinstaller executable
我有一个应用程序可以使用自然语言处理来分析文本以查找关键字。
我创建了一个可执行文件,它在我的电脑上运行良好。
我已将其发送给朋友,但在他的电脑中出现错误:
Traceback (most recent call last):
File "Main.py", line 15, in <module>
File "Menu.py", line 349, in main_menu
File "Menu.py", line 262, in analyse_text_menu
File "Menu.py", line 178, in analyse_text_function
File "AnalyseText\ProcessText.py", line 232, in process_text
File "AnalyseText\ProcessText.py", line 166, in generate_keyword_complete_list
File "AnalyseText\ProcessText.py", line 135, in lemmatize_text
File "stanza\pipeline\core.py", line 88, in _init_
stanza.pipeline.core.ResourcesFileNotFoundError: Resources file not found at: C:\Users\jpovoas\stanza_resources\resources.json Try to download the model again.
[26408] Failed to execute script 'Main' due to unhandled exception!
它正在他计算机的文件夹中寻找 resources.json
。即使我已经添加 stanza
作为 pyinstaller 的隐藏导入。
我使用的是另一种语言的模型,而不是默认的英语模型。该模型位于用户文件夹内的文件夹中。
问题是,我不希望最终用户必须单独下载模型。
我在创建可执行文件时设法将模型文件夹包含在 --add-data C:\Users\Laila\stanza_resources\pt;Stanza"
中。
它仍然会在 stanza_resources
文件夹中寻找模型的 json 文件,该文件夹应该位于使用该程序的任何人的用户文件夹中。
如何告诉节在生成的可执行文件夹中查找模型?
我可以只在脚本中添加 stanza.download("language")
吗?如果是这样,我该如何更改节的模型下载文件夹?我希望将它下载到与可执行文件位于同一目录内的文件夹中。我该怎么做?
您可以尝试下载那个 JSON 文件。
这是相同的片段。
import urllib.request
json_url = "http://LINK_TO_YOUR_JSON/resources.json"
urllib.request.urlretrieve(json_url, "./resources.json")
编辑:可以通过执行以下操作更改模型下载的位置:
stanza.download("pt", model_dir=...)
虽然这对我来说不是理想的解决方案,因为我想避免再次下载模型。
我通过在制作管道时将值传递给 model_dir
参数来解决它:
npl = stanza.Pipeline(lang='Pt', model_dir='.\Stanza')
在名为 Stanza 的文件夹中,我放置了模型文件夹(在本例中为“pt”)和 resources.json 文件。
我有一个应用程序可以使用自然语言处理来分析文本以查找关键字。
我创建了一个可执行文件,它在我的电脑上运行良好。
我已将其发送给朋友,但在他的电脑中出现错误:
Traceback (most recent call last):
File "Main.py", line 15, in <module>
File "Menu.py", line 349, in main_menu
File "Menu.py", line 262, in analyse_text_menu
File "Menu.py", line 178, in analyse_text_function
File "AnalyseText\ProcessText.py", line 232, in process_text
File "AnalyseText\ProcessText.py", line 166, in generate_keyword_complete_list
File "AnalyseText\ProcessText.py", line 135, in lemmatize_text
File "stanza\pipeline\core.py", line 88, in _init_
stanza.pipeline.core.ResourcesFileNotFoundError: Resources file not found at: C:\Users\jpovoas\stanza_resources\resources.json Try to download the model again.
[26408] Failed to execute script 'Main' due to unhandled exception!
它正在他计算机的文件夹中寻找 resources.json
。即使我已经添加 stanza
作为 pyinstaller 的隐藏导入。
我使用的是另一种语言的模型,而不是默认的英语模型。该模型位于用户文件夹内的文件夹中。
问题是,我不希望最终用户必须单独下载模型。
我在创建可执行文件时设法将模型文件夹包含在 --add-data C:\Users\Laila\stanza_resources\pt;Stanza"
中。
它仍然会在 stanza_resources
文件夹中寻找模型的 json 文件,该文件夹应该位于使用该程序的任何人的用户文件夹中。
如何告诉节在生成的可执行文件夹中查找模型?
我可以只在脚本中添加 stanza.download("language")
吗?如果是这样,我该如何更改节的模型下载文件夹?我希望将它下载到与可执行文件位于同一目录内的文件夹中。我该怎么做?
您可以尝试下载那个 JSON 文件。
这是相同的片段。
import urllib.request
json_url = "http://LINK_TO_YOUR_JSON/resources.json"
urllib.request.urlretrieve(json_url, "./resources.json")
编辑:可以通过执行以下操作更改模型下载的位置:
stanza.download("pt", model_dir=...)
虽然这对我来说不是理想的解决方案,因为我想避免再次下载模型。
我通过在制作管道时将值传递给 model_dir
参数来解决它:
npl = stanza.Pipeline(lang='Pt', model_dir='.\Stanza')
在名为 Stanza 的文件夹中,我放置了模型文件夹(在本例中为“pt”)和 resources.json 文件。