【问题标题】:Pyinstaller ImportError on pywt `_ctw` modulepywt`_ctw`模块上的Pyinstaller ImportError
【发布时间】:2017-06-19 07:11:03
【问题描述】:

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

程序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_test.spec.

命令运行:pywt_test.exe

pywt_error_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

我尝试将_cwt 添加到 pathex、hiddenimports 等。没有任何改变错误。

如何获取_cwt 和整个 pywt 包以使用 Pyinstaller 加载?

版本,供参考:

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

【问题讨论】:

    标签: python pyinstaller pywt


    【解决方案1】:

    正如 wedesoft 提到的,添加隐藏的导入是有效的。为避免将来出现此类错误,您可以添加一个文件

    '\PyInstaller\hooks\hook-pywt.py'

    用字符串:

    hiddenimports=['pywt._extensions._cwt']

    我只是取了一个现有的文件,如 '\PyInstaller\hooks\hook-patsy.py',将 hiddenimports 行更改为上面的行并保存为 hook-pywt.py。在您更新 PyInstaller 之前,这应该可以工作。

    【讨论】:

    【解决方案2】:

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

     ...
     hiddenimports=['pywt._extensions._cwt'],
     ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-10
      • 1970-01-01
      • 2012-07-10
      • 2014-01-21
      • 2018-04-03
      • 1970-01-01
      • 2016-11-07
      • 2014-10-04
      相关资源
      最近更新 更多