pythonをpyinstallerで実行ファイル化する際の試行錯誤

概要

統計検定の勉強以外の初投稿。

最近仕事でpythonのコードを実行ファイルで渡す必要が出てきたので調べたところ、pyinstallerというライブラリを知り、使ってみた。

いくつかエラーがでて試行錯誤したので記録に残しておく。

 

インストール

condaでインストールした。いくつかの記事を見たところ、condaで入れると容量が大きくなるらしいのでpipなどで入れたほうが良かったかも。

 

再起エラー

maximum recursion depth exceeded while calling a Python object

というエラーが出る。これは以下の方法で解消した。再帰の上限を勝手に設定しただけなので良いのか不明だが、一応動いた。

 

①specファイルを作成

pyinstaller hoge.py --onefile --windowed

を実行、これだけだとエラー、.specファイルができる。

 

②specファイルを修正してコンパイル

 

specファイルの一番上に下記のコードを追加

import sys

sys.setrecursionlimit(20000)

その後specファイルを指定してコンパイル

pyinstaller hoge.spec --onefile --windowed

 これでコンパイルコマンドプロンプトから実行できた。

 動作も元のpythonコードと同様だった。ただ実行時間がpythonだと数秒、実行ファイルだと1分位とかなり長くなる。あと何故かトレンドマイクロのプロセスのCPU使用率が高くなる。

 

謎エラー

その後いくつかコードを修正し実行すると、以下のようなエラーが出た。

 fatal error detected failed to execute script pyinstaller

 

これだけだと原因がよくわからないのでコードを変更してエラー箇所を確認すると、以下の部分を加えることでエラーが発生していた。

from sklearn.discriminant_analysis import LinearDiscriminantAnalysis

 

pyinstaller sklearn などのキーワードでググるといくつか関連記事を発見。以下の記事を参考に解決できた。

 

 

teratail.com

 

 

しかし別のエラーが発生。

 this application failed to start because no qt platform plugin could be initialized 

 エラー文でググるといろいろ出てきて、以下の記事が参考になった。

 

qiita.com

 

 

最終的にやったこと

 

- conda install -c anaconda pyqt

- C:\Users\<username>\envs\<environmentname>\Library\plugins\platformsをexeの入ったフォルダの/dist以下にコピーする。

- C:\Users\<username>\Anaconda\lib\site-packages\PyQt5内のdllを/dist以下にコピーする。

 

所感

使う分には楽だけど、結構挙動が怪しい。一応今はコンパイル・実行で動作するけど、これ以降もなにか追加・修正したときに別の問題が起きそう。

実行にも時間かかるしなにか別の使いやすいものが出ると良いな~。