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.