Невозможно найти C: \ nltk_data при создании исполняемого файла с помощью pyinstaller - PullRequest
0 голосов
/ 30 октября 2018

Я пытаюсь создать исполняемый файл Python, используя pyinstaller, но при загрузке хуков он выдает ошибку, подобную этой,

24021 INFO:   Removing import of PySide from module PIL.ImageQt
24021 INFO: Loading module hook "hook-pytz.py"...
24506 INFO: Loading module hook "hook-encodings.py"...
24600 INFO: Loading module hook "hook-pandas.py"...
25037 INFO: Loading module hook "hook-lib2to3.py"...
25131 INFO: Loading module hook "hook-lxml.etree.py"...
25131 INFO: Loading module hook "hook-pycparser.py"...
25396 INFO: Loading module hook "hook-setuptools.py"...
25506 WARNING: Hidden import "setuptools.msvc" not found!
25506 INFO: Loading module hook "hook-distutils.py"...
25521 INFO: Loading module hook "hook-nltk.py"...
Unable to find "C:\nltk_data" when adding binary and data files.

Я попытался скопировать nltk_data из Appdata на диск C. но та же ошибка.

Ответы [ 3 ]

0 голосов
/ 21 июля 2019

Я работал над этим вопросом несколько дней, и у меня не осталось волос. По некоторым причинам nltk и pyinstaller не работают вместе.

Итак, мое первое решение этой проблемы - использовать что-то отличное от nltk, если возможно кодировать решение без nltk.

Если вы должны использовать NLTK, я решил эту проблему, введя путь nltk_data в данные.

  1. Найдите свой путь nltk_data. Моя была в C: \ Users \ имя пользователя \ AppData \ Roaming \ nltk_data

  2. В файле hook-nltk.py (в каталоге pyinstaller) я закомментировал и добавил строки, которые будут выглядеть следующим образом.

    import nltk
    from PyInstaller.utils.hooks import collect_data_files

    datas = collect_data_files('nltk', False)
    '''
    for p in nltk.data.path:
        datas.append((p, "nltk_data"))
    '''
    datas.append(("C:\\Users\\nedhu\\AppData\\Roaming\\nltk_data", "nltk_data"))

    hiddenimports = ["nltk.chunk.named_entity"]

Существует более глубокая проблема с циклом pyinstaller по списку путей к данным, но это решение работает как патч.

0 голосов
/ 05 августа 2019

Этот ответ работал для меня ... он изменяет код в hook-nltk.py, чтобы включить путь только в том случае, если он существует.

hook-nltk.py можно найти в папке PyInstaller в папке ловушек (что-то вроде <'path-to-python-installation'> \ Lib \ site-packages \ PyInstaller \ hooks)

0 голосов
/ 18 июня 2019

Я решил проблемы с редактированием pyinstaller nltk-hook. После долгих исследований я решил оставить это в структуре кода. Я решил свою проблему, комментируя строки: datas=[]

'''for p in nltk.data.path: datas.append((p, "nltk_data"))'''

hiddenimports = ["nltk.chunk.named_entity"]

Более того, вам нужно переименовать файл: pyi_rth__nltk.cpython-36.pyc в pyi_rth_nltk.cpython-36.pyc. Этот файл имеет еще 1 подчеркивание. Предупреждение с версией Python.

...