pyinstaller
でpythonアプリのexe化したときに起きた問題などの対処を書き溜めていく。
exe化したアプリが起動できない
プロンプト表示ありでexe化してアプリを起動ようとしたけど起動できず以下のようなエラー。
エラーメッセージ。
Traceback (most recent call last): File "site-packages\PyInstaller\loader\rthooks\pyi_rth_pkgres.py", line 13, in <module> File "c:\users\wanta\anaconda3\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 623, in exec_module exec(bytecode, module.__dict__) File "site-packages\pkg_resources\__init__.py", line 86, in <module> ModuleNotFoundError: No module named 'pkg_resources.py2_warn' [15508] Failed to execute script pyi_rth_pkgres
インストールしているpyinstallerに問題がある可能性があるとか。
pip
でインストールした場合の問題か。
一旦アンインストールしてGitHubからインストールし直す。
・アンインストール
pip uninstall pyinstaller
・インストール
pip install https://github.com/pyinstaller/pyinstaller/archive/develop.zip
上記のようにインストールしなおして再度実行したら
アップデートとかでも解消するのだろうか(未検証)
No module named 'sklearn'
exe化したアプリは起動できるが、処理実行がうまくいかず以下のエラー。
開発環境(VSCode)では実行できたが、exe化したアプリでは実行できない状況。
Exception in Tkinter callback Traceback (most recent call last): File "tkinter\__init__.py", line 1705, in __call__ File "iris_front.py", line 32, in calculation File "iris_front.py", line 18, in estimate File "iris_estimated.py", line 6, in estimate File "joblib\numpy_pickle.py", line 605, in load File "joblib\numpy_pickle.py", line 529, in _unpickle File "pickle.py", line 1088, in load File "pickle.py", line 1385, in load_stack_global File "pickle.py", line 1426, in find_class ModuleNotFoundError: No module named 'sklearn'
一つは単純にexe化する環境にモジュールが入っていない可能性。
その場合は環境に、普通にインストールする。
pip install scikit-learn
もう一つはpyファイル(コード)にimportを記述する必要がある場合。
私の場合はこちらだった。
コード中に機械学習ライブラリを使用している処理のファイルに明示的にimportが記述されていないとダメらしい。
必要に応じてsklearn
以外にも必要なものを記述する。
・記述例
import sklearn from sklearn.model_selection import train_test_split