使用pyinstaller创建可执行文件时找不到C:\ nltk_data

时间:2018-10-30 05:39:13

标签: python-3.x nltk hook executable pyinstaller

我正在尝试使用pyinstaller创建可执行的python文件,但是在加载钩子时,它显示了这样的错误,

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 :(得分:1)

This answer为我工作...它修改了hook-nltk.py中的代码,使其仅包含路径(如果存在)。

hook-nltk.py可以在hooks文件夹中的PyInstaller位置(类似于<'python的安装路径\\ Lib \ site-packages \ PyInstaller \ hooks)中找到

答案 1 :(得分:0)

我解决了编辑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版本发出警告。

答案 2 :(得分:0)

我已经在这个问题上工作了几天,而且也没有头发。由于某些原因,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在路径的数据列表中循环存在一个更深层的问题,但是此解决方案只能作为补丁来使用。

相关问题