Ein Memo, das versucht und fehlerhaft ausgeführt wurde, um das erstellte maschinelle Lernprogramm in einer Windows-Umgebung auszuführen, in der Python nicht installiert ist.
Die Umgebung ist wie folgt
$ pip install pyinstaller
$ pyinstaller main.py --onefile
Damit werden auch die Python-Ausführungsumgebung und zugehörige Bibliotheken in einer exe-Datei zusammengefasst.
Wenn jedoch eine Abhängigkeit besteht, die PyInstaller nicht auflösen kann, gibt die erstellte exe-Datei einen Fehler aus.
Erstellen Sie in diesem Fall ohne die Option "--onefile" und lösen Sie die folgenden zwei Punkte nacheinander.
* .so nicht gefunden
Sie importieren nicht die Binärdateien der externen Bibliotheken, die davon abhängen. Es scheint, dass PyInstaller automatisch importiert, worauf direkt verwiesen wird, aber es scheint, dass nicht berücksichtigt wird, worauf indirekt verwiesen wird. Sie können angeben, dass explizit mit der Option "--add-binary" eingeschlossen werden soll. Beachten Sie, dass die Methode zur Angabe des Pfads etwas Besonderes ist
--add-binary "<Relativer Pfad der SO-Quelldatei>;<Relativer Laufzeitpfad des Zielverzeichnisses>"
Der Cache schien schlecht zu sein, daher wurde er mit der Option "--clean" wie angegeben platziert.
Ebenso wird die externe Bibliothek auch hier nicht importiert. Es scheint, dass derjenige, auf den indirekt im Python-Bibliothekssystem verwiesen wird, entspricht. Sie können es mit verstecktem Import angeben, wenn Sie pyinstaller ausführen. Wiederholen Sie beim Hinzufügen die exe-Konvertierung und fahren Sie fort, bis ModuleNotFoundError verschwindet.
Als ich zum Beispiel ein Textklassifizierungsprogramm mit Tensorflow erstellt habe, sah es so aus.
$ pyinstaller main.py ¥
--hidden-import=tensorflow.python.keras.engine.base_layer_v1 ¥
--hidden-import=tensorflow.python.ops.while_v2 ¥
--hidden-import=tensorflow.python.ops.numpy_ops
Zum Beispiel sieht es so aus.
$ pyinstaller main.py --onefile -y --clean \
--hidden-import=tensorflow.python.keras.engine.base_layer_v1 \
--hidden-import=tensorflow.python.ops.while_v2 \
--hidden-import=tensorflow.python.ops.numpy_ops \
--add-binary "../../../../AppData/Local/Programs/Python/Python36/lib/site-packages/tensorflow/lite/experimental/microfrontend/python/ops/_audio_microfrontend_op.so;tensorflow/lite/experimental/microfrontend/python/ops"