Mit PyInstaller gebündelter Code kann kein lokal installiertes vtk-Modul importieren: ModuleNotFoundError

Nov 20 2020

Ich habe versucht, pyinstaller auf die einfache Datei vtest.py anzuwenden

import vtk

print('Hello World')

auf Windows. Ich kann den Befehl ausführen

py vtest.py

ohne Problem. Aber wenn ich versuche, mit dem Befehl eine Exe zu generieren

pyinstaller vtest.py --onefile

Ich erhalte die Fehlermeldung, wenn ich versuche, die ausführbare Datei auszuführen

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

Ich habe versucht, die Hook-Datei wie hier beschrieben zu ändern , aber kein Glück.

Antworten

1 KroshkaKartoshka Nov 20 2020 at 05:09

Pyinstaller kann diesen Import nicht erkennen und hängt ihn daher nicht an das Bundle an. Dies geschieht aufgrund weniger einfacher Importe in die Bibliotheken.

Es gibt mehr als eine Lösung:

  • Fügen Sie überall in Ihrem Code eine importAnweisung für jedes fehlende Modul hinzu. Da das Hinzufügen eines neuen Moduls dazu führen kann, dass neue Module importiert werden, benötigen Sie möglicherweise mehrere Iterationen.

  • Fügen Sie dem hiddenimportsArgument in der Spezifikationsdatei oder im Konsolenbefehl dieselbe Liste von Modulen hinzu . Dieser Prozess kann auch iterativ sein.

Ein weiterer Grund für fehlende Module ist, dass PyInstaller sie als Systemmodule behandelt, da sie in Verzeichnissen wie gespeichert sind /usr/lib. Sie können überprüfen, ob dies der Fall ist, indem Sie das Modul importieren und ausdrucken .__file__.