Python pywt`\u ctw`模块上的Pyinstaller导入错误

Python pywt`\u ctw`模块上的Pyinstaller导入错误,python,pyinstaller,pywt,Python,Pyinstaller,Pywt,使用Pyinstaller编译程序时,Pywt未正确导入\u cwt模块。我验证了\u cwt.py是否存在于我的pywt根目录中(路径上的站点包中),并且\u cwt.pyd是否存在于pywt\\u扩展目录中。我可以成功地从Python导入pywt。下面是一个最小(非)工作示例,用于说明importorror回溯 程序pywt_test.py # -*- coding: utf-8 -*- try: import sys, traceback import pywt p

使用Pyinstaller编译程序时,Pywt未正确导入
\u cwt
模块。我验证了
\u cwt.py
是否存在于我的pywt根目录中(路径上的站点包中),并且
\u cwt.pyd
是否存在于
pywt\\u扩展目录中。我可以成功地从Python导入pywt。下面是一个最小(非)工作示例,用于说明
importorror
回溯

程序
pywt_test.py

# -*- coding: utf-8 -*-
try:
    import sys, traceback
    import pywt
    print pywt.__version__
except ImportError:
    type_, value_, traceback_ = sys.exc_info()
    e_msg = traceback.format_exception(type_, value_, traceback_)
    with open('pywt_error_log.txt','w') as f:
        f.write(''.join(e_msg))
Pyinstaller规范文件
pywt_test.spec

 # -*- mode: python -*-

 block_cipher = None


 a = Analysis(['pywt_test.py'],
         pathex=['C:\\Users\\user', 'C:\\Users\\user'],
         binaries=[],
         datas=[],
         hiddenimports=[],
         hookspath=[],
         runtime_hooks=[],
         excludes=[],
         win_no_prefer_redirects=False,
         win_private_assemblies=False,
         cipher=block_cipher)
 pyz = PYZ(a.pure, a.zipped_data,
         cipher=block_cipher)
 exe = EXE(pyz,
      a.scripts,
      a.binaries,
      a.zipfiles,
      a.datas,
      name='pywt_test',
      debug=False,
      strip=False,
      upx=False,
      console=True)
Pyinstall编译命令:
pyinstaller pywt\u test.spec

运行命令:
pywt_test.exe

pywt\u error\u log.txt的内容:

Traceback (most recent call last):
  File "pywt_test.py", line 10, in <module>
  File "c:\users\user\appdata\local\temp\pip-build-3zvqo7\pyinstaller\PyInstaller\loader\pyimod03_importers.py", line 389, in load_module
  File "site-packages\pywt\__init__.py", line 16, in <module>
  File "c:\users\user\appdata\local\temp\pip-build-3zvqo7\pyinstaller\PyInstaller\loader\pyimod03_importers.py", line 546, in load_module
  File "pywt\_extensions\_pywt.pyx", line 1, in init pywt._extensions._pywt (pywt\_extensions\_pywt.c:32588)
 ImportError: No module named _cwt
回溯(最近一次呼叫最后一次):
文件“pywt_test.py”,第10行,在
加载模块中的文件“c:\users\user\appdata\local\temp\pip-build-3zvqo7\pyinstaller\pyinstaller\loader\pyimod03\u importers.py”,第389行
文件“site packages\pywt\\uuuuu init\uuuuuuu.py”,第16行,在
加载模块中的文件“c:\users\user\appdata\local\temp\pip-build-3zvqo7\pyinstaller\pyinstaller\loader\pyimod03\u importers.py”,第546行
文件“pywt\\u extensions\\u pywt.pyx”,第1行,在init pywt.\u extensions.\u pywt(pywt\\u extensions\\u pywt.c:32588)中
ImportError:没有名为_cwt的模块
我尝试将
\u cwt
添加到pathex、HiddeImports等中。没有任何更改错误

如何使用Pyinstaller加载
\u cwt
,以及整个pywt包

版本,供参考:

  • Pywt:0.5.1
  • Pyinstaller:3.2.1
  • Python:Windows 7上的2.7.12 64位64位(Anaconda)

只需将其添加到隐藏导入:

 ...
 hiddenimports=['pywt._extensions._cwt'],
 ...
正如wedesoft提到的,添加隐藏导入是有效的。为了避免将来出现此类错误,您可以添加一个文件

“\PyInstaller\hooks\hook pywt.py”

使用字符串:

hiddenimports=['pywt.\u extensions.\u cwt']


我只是简单地获取了一个像“\PyInstaller\hooks\hook patsy.py”这样的现有文件,将hiddenimports行更改为上面的一行,并保存为hook-pywt.py。在您更新PyInstaller之前,这应该可以正常工作。

我没有这样的文件。我有一个名为py pyinstaller的文件夹,但其中有一个名为portfile的文件。@kylefoley76-可能是pyinstaller存在安装问题?您遵循安装()了吗?