Pyinstaller ImportError в модуле `_ctw` pywt

Pywt не импортирует _cwt модуль правильно, когда программа скомпилирована с Pyinstaller. Я подтвердил, что _cwt.py присутствует в моем корне pywt (в пакетах сайта на пути) и _cwt.pyd находится в pywt\_extensions реж. Я могу успешно импортировать Pywt из Python. Ниже приведен минимальный (нерабочий) пример, иллюстрирующий 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: 2.7.12 64-разрядная на Windows 7 64-разрядная (Anaconda)

2 ответа

Просто добавьте его в скрытый импорт:

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

Как упомянул wedesoft, добавление скрытого импорта работает. Чтобы избежать таких ошибок в будущем, вы можете добавить файл

'\PyInstaller\ Крючки \hook-pywt.py'

со строкой:

hiddenimports=['pywt._extensions._cwt']

Я просто взял существующий файл, например '\PyInstaller\hooks\hook-patsy.py', изменил строку hiddenimports на приведенную выше и сохранил как hook-pywt.py. Это должно работать, пока вы не обновите PyInstaller.

Другие вопросы по тегам