Un mémo qui a été essayé et a échoué pour exécuter le programme d'apprentissage automatique créé dans un environnement Windows où Python n'est pas installé.
L'environnement est le suivant
$ pip install pyinstaller
$ pyinstaller main.py --onefile
Avec cela, l'environnement d'exécution Python et les bibliothèques associées sont également combinés dans un seul fichier exe.
Cependant, s'il existe des dépendances que PyInstaller ne peut pas résoudre, le fichier exe créé générera une erreur.
Dans ce cas, construisez sans utiliser l'option --onefile
et résolvez les deux points suivants un par un.
* .so not found
Vous n'importez pas les binaires des bibliothèques externes qui en dépendent. Il semble que PyInstaller importe automatiquement ce qui est directement référencé, mais il semble qu'il ne considère pas ce qui est indirectement référencé.
Vous pouvez spécifier d'inclure explicitement avec l'option --add-binary
.
Notez que la méthode de spécification du chemin est spéciale
--add-binary "<Chemin relatif du fichier SO source>;<Chemin d'exécution relatif du répertoire de destination>"
Le cache semblait être mauvais, donc avec l'option --clean
, il était placé comme spécifié.
ModuleNotFoundError
De même, la bibliothèque externe n'est pas importée ici non plus. Il semble que celui qui est indirectement référencé dans le système de bibliothèque Python corresponde. Vous pouvez le spécifier avec importation cachée lors de l'exécution de pyinstaller. Lors de l'ajout, répétez la conversion exe et continuez jusqu'à ce que ModuleNotFoundError disparaisse.
Par exemple, lorsque j'ai créé un programme de classification de texte en utilisant tensorflow, cela ressemblait à ceci.
$ 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
Par exemple, cela ressemble à ceci.
$ 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"
Recommended Posts