我试图在Windows上使用python包usaddress
和pyinstaller。在我构建可执行文件后,我收到了这个我不明白的错误:
Traceback (most recent call last):
File "test_usaddress\main.py", line 1, in <module>
File "c:\users\chq-luisd\appdata\local\continuum\anaconda3\lib\site-packages\P
yInstaller\loader\pyimod03_importers.py", line 631, in exec_module
exec(bytecode, module.__dict__)
File "site-packages\usaddress\__init__.py", line 16, in <module>
File "c:\users\chq-luisd\appdata\local\continuum\anaconda3\lib\site-packages\P
yInstaller\loader\pyimod03_importers.py", line 631, in exec_module
exec(bytecode, module.__dict__)
File "site-packages\pycrfsuite\__init__.py", line 2, in <module>
File "c:\users\chq-luisd\appdata\local\continuum\anaconda3\lib\site-packages\P
yInstaller\loader\pyimod03_importers.py", line 714, in load_module
module = loader.load_module(fullname)
File "pycrfsuite\_pycrfsuite.pyx", line 14, in init pycrfsuite._pycrfsuite
ImportError: cannot import name _dumpparser
[14752] Failed to execute script main
我得到的错误是一个只执行导入并调用usaddress的包。我的main.py文件中唯一的东西是:
import usaddress
if __name__ == '__main__':
addr = '123 Main St. Suite 100 Chicago, IL'
print(usaddress.parse(addr))
我使用
构建可执行文件pyinstaller main.py
我在Windows上使用pyinstaller 3.3运行64位python 3.6.1。 usaddress在没有pyinstaller的情况下工作正常。
答案 0 :(得分:1)
将'pycrfsuite._dumpparser'添加到spec文件中的hiddenimports列表中,以消除该错误。重新编译并重新运行可执行文件后,您将看到有关_logparser的类似错误;还需要将'pycrfsuite._logparser'添加到隐藏的导入中。该.exe现在将运行,但是您会收到关于usaddr.crfsuite的警告。添加元组
('C:\\ProgramData\\Anaconda3\\lib\\site-packages\\usaddress\\usaddr.crfsuite','usaddress')
(将路径替换为系统上usaddr.crfsuite的位置)到规范文件中的数据列表(根据https://pyinstaller.readthedocs.io/en/stable/spec-files.html#using-data-files-from-a-module),
答案 1 :(得分:0)
我遇到了同样的问题,并且能够解决。 __init__.py
程序包中的usaddress
代码中存在错误。您需要进入usaddress
下的dist
软件包,进入__init__.py
。从
MODEL_PATH
MODEL_PATH = os.path.split(os.path.abspath(__file___))[0] + '/' + MODEL_FILE
到
MODEL_PATH = os.path.split(os.path.abspath(__file___))[0] + '\\' + MODEL_FILE