SEワンタンの独学備忘録

IT関連の独学した内容や資格試験に対する取り組みの備忘録

【pyinstaller】pyinstallerエラー対応とか書き溜め

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

上記のようにインストールしなおして再度実行したら

アップデートとかでも解消するのだろうか(未検証)

参考:Pyinstallerによるpyスクリプトのexe化 - Qiita

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