Ошибка после компиляции файлов python в exe (модуль pymorthy)
Собрал парсер xlsx с целью проведения морфологического анализа фраз.
Для корректной работы морфологического анализатора pymorphy2 установил python3.8.
При запуске напрямую через Pycharm парсер и анализатор работает корректно.
Но после компиляции в exe-файл, и запуске exe-шника, падаю с ошибкой:
"Can't find a dictionary for language 'ru'. Installed languages: []. Try installing pymorphy2-dicts-ru package."
В виртуальном окружении модуль pymorphy2-dicts-ru установлен.
Компилирую exe-файл через auto-py-to-exe.
Пробовал ставить pymorphy3 и дополнительно pymorphy3-dicts-ru: ошибки после сборки в exe-файл не уходят.
Компилирую ехе-файл командой:
pyinstaller -F --hidden-import pymorphy3-dicts-ru main.py
получаю ошибку:
Traceback (most recent call last):
File "main.py", line 6, in <module>
File "pymorphy3\analyzer.py", line 200, in __init__
File "pymorphy3\analyzer.py", line 280, in choose_dictionary_path
File "pymorphy3\analyzer.py", line 141, in lang_dict_path
ValueError: Can't find a dictionary for language 'ru'. Installed languages: []. Try installing pymorphy3-dicts-ru package.
[12080] Failed to execute script 'main' due to unhandled exception!
Ответы (2 шт):
Здесь есть возможное решение проблемы
вместо --hidden-import предлагается использовать '--add-data '../site-packges/pymorhy2-dicts-ru/data'
В самом коде программы перед импортом pymorphy2 необходимо вписать примерно следующее:
if getattr(sys, 'frozen', False) and hasattr(sys, '_MEIPASS'):
os.environ["PYMORPHY2_DICT_PATH"] = str(pathlib.Path(sys._MEIPASS).joinpath('pymorphy2_dicts_ru/data'))
В файле analyzer.py также написано:
Alternatively (e.g. if you have your own precompiled dictionaries),
either create ``PYMORPHY2_DICT_PATH`` environment variable
with a path to dictionaries, or pass ``path`` argument
to :class:`pymorphy2.MorphAnalyzer` constructor::
>>> morph = pymorphy2.MorphAnalyzer(path='/path/to/dictionaries') # doctest: +SKIP
Вот этого достаточно, и не надо ничего другого, в том числе не надо --add-data:
morph = pymorphy2.MorphAnalyzer(path='/path/to/dictionaries')
