Le code fourni avec PyInstaller ne peut pas importer un module vtk installé localement: ModuleNotFoundError
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
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
import
instruction 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'
hiddenimports
argument 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__
.