Ошибка после компиляции файлов 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') 
→ Ссылка