4 votes

Pyinstaller ImportError sur le module `_ctw` de pywt

Pywt n'importe pas _cwt correctement lorsque le programme est compilé avec Pyinstaller. J'ai vérifié que _cwt.py est présent dans mon pywt Root (dans site-packages sur le chemin) et _cwt.pyd est dans la pywt\_extensions dir. Je peux importer avec succès pywt depuis Python. Vous trouverez ci-dessous un exemple minimum (non) fonctionnel pour illustrer le processus d'importation de pywt. ImportError traceback.

Programme 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))

Fichier spec de 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)

Commande de compilation Pyinstall : pyinstaller pywt_test.spec .

La commande a été exécutée : pywt_test.exe

Contenu de 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

J'ai essayé d'ajouter _cwt au pathex, aux importations cachées, etc. Rien ne change l'erreur.

Comment puis-je obtenir _cwt et l'ensemble du paquetage pywt, à charger avec Pyinstaller ?

Versions, pour référence :

  • Pywt : 0.5.1
  • Pyinstaller : 3.2.1
  • Python : 2.7.12 64bit sur Windows 7 64bit (Anaconda)

7voto

wedesoft Points 426

Il suffit de l'ajouter aux importations cachées :

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

2voto

Ivan Zhovannik Points 123

En wedesoft mentionné, l'ajout d'importations cachées fonctionne. Pour éviter de telles erreurs à l'avenir, vous pouvez ajouter un fichier

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

avec la chaîne de caractères :

hiddenimports=['pywt._extensions._cwt']

J'ai simplement pris un fichier existant comme ' \PyInstaller\hooks\hook -patsy.py', remplacez la ligne hiddenimports par celle ci-dessus et sauvegardez sous hook-pywt.py. Cela devrait fonctionner jusqu'à ce que vous mettiez à jour votre PyInstaller.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X