Le code fourni avec PyInstaller ne peut pas importer un module vtk installé localement: ModuleNotFoundError

Nov 20 2020

J'ai essayé d'appliquer pyinstaller au simple fichier vtest.py

import vtk

print('Hello World')

sur les fenêtres. Je peux exécuter la commande

py vtest.py

sans problème. Mais quand j'essaye de générer un exe avec la commande

pyinstaller vtest.py --onefile

J'obtiens l'erreur lorsque j'essaye d'exécuter l'exécutable

Traceback (most recent call last):
  File "vtest.py", line 1, in <module>
  File "c:\users\djame\appdata\local\programs\python\python38\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 493, in exec_module
    exec(bytecode, module.__dict__)
  File "vtk.py", line 30, in <module>
  File "importlib\__init__.py", line 127, in import_module
ModuleNotFoundError: No module named 'vtkmodules'
[11448] Failed to execute script vtest

J'ai essayé de changer le fichier hook comme indiqué ici mais pas de chance.

Réponses

1 KroshkaKartoshka Nov 20 2020 at 05:09

Pyinstaller ne peut pas détecter cette importation, donc il ne l'attache pas au bundle. Cela est dû à des importations moins simples dans les bibliothèques.

Il existe plus d'une solution:

  • N'importe où dans votre code, ajoutez une importinstruction pour chaque module manquant. Comme l'ajout d'un nouveau module peut entraîner de nouveaux modules manquants qu'il importe, vous devrez peut-être plusieurs itérations.

  • Ajoutez la même liste de modules à l' hiddenimportsargument dans le fichier de spécifications ou la commande de console. Ce processus peut également être itératif.

Une autre raison pour laquelle les modules manquent est que PyInstaller les traite comme des modules système, car ils sont stockés dans des répertoires comme /usr/lib. Vous pouvez vérifier si c'est votre cas en important le module et en imprimant son fichier .__file__.