初投稿ですので書き方は不慣れです
アドバイスありましたらよろしくお願いします。
<要約>
scikit-learn==0.24.1 python 3.8.8 の環境下で作成したプログラムを
pyinstaller==4.3 でEXE化しようとしました。
すると、warningで
sklearn.neighbors.typedefs が not foundと が出ていました。
この改善は、
Lib\site-packages_pyinstaller_hooks_contrib\hooks\stdhooks\hook-sklearn.metrics.cluster.py
を訂正する事で改善しました。
<状況>
-
scikit-learn==0.24.1 python 3.8.8 の環境下で作成したプログラムを
pyinstaller==4.3 でEXE化しようとしました。
すると、warningで
sklearn.neighbors.typedefs が not foundと が出ていました。 -
また、exe化に成功してもプログラムが動かない状況となりました。
-
ライブラリーからsklearn.neighborsのフォルダー内にtypedefsを探したところ、
それは存在しなくて_typedefsならありました。
<推定原因>
Lib\site-packages_pyinstaller_hooks_contrib\hooks\stdhooks\hook-sklearn.metrics.cluster.py
のプログラムを見ると
iddenimports = []
if is_module_satisfies("sklearn >= 0.22"):
# 0.22 and later
のsklearn >= 0.22となっています。
これが、scikit-learn >= 0.22 の誤りであると推定されます。
<原因の根拠>、
上記の本来 if文でTrue判定にならなければいけない所が、Falseとなっていた事が原因可能性
print (is_module_satisfies("sklearn >= 0.22"))
False と表示
print (is_module_satisfies("scikit-learn >= 0.22"))
True と表示
<改善内容>
<改善前>
iddenimports = []
if is_module_satisfies("sklearn >= 0.22"):
# 0.22 and later
<改善後>
iddenimports = []
if is_module_satisfies("scikit-learn >= 0.22"):
# 0.22 and later
<結果>
warningでsklearn.neighbors.typedefs が not foundと が出力されなくなりました。
<コメント>
まだ、exeファイルは起動せず
37263 INFO: Matplotlib backend "GTK3Agg": ignored
backend Gtk3Agg requires cairo
と出力されています。
次はこの確認です。
"GTK3Agg": ignored は関係ありませんでした。
起動しなかったのは、ModuleNotFoundError: No module named 'sklearn.utils._weight_vector'
が原因でした。
<解決方法> hidden-importで対応する
pyinstaller ****.py --hidden-import=sklearn.utils._weight_vector