しまぞうブログ

プログラミングと資産運用

【PyInstaller】Pythonプログラムをexe化する【py2exe】

以前に文字認識をするPythonプログラムを作成しました。

shimazoh.hatenablog.com

これにGUIを実装して、PCオンチの私の奥さんに使ってもらおうと思ったのですが、pyファイルを実行してもらうのはなかなか厳しいです…

そこでプログラムを実行ファイルにして簡単に使えるようにしました。
本記事はその一連の手順をメモしたものです。

作業環境

  • Windows10
  • Anaconda 4.10(scoopでインストール)
  • Python 3.8

実行ファイル(.exe)への変換

調べてみるとpyファイルをexeに変換するには、PyInstallerpy2exeのいずれかを使うようです。

それぞれの特徴は以下の通りです。

メリットデメリット
PyInstaller簡単・安定実行ファイルの容量が大きい
動作が重い
py2exe実行ファイルの容量が小さい
動作が軽い
作業が煩雑

ひとまず簡単ということなので、PyInstallerを使用します。

PyInstallerについては以下のサイトを参考にしました。

上記サイトにも書いてありますが、anacondaで不要なモジュールを入れていると、ファイルが肥大化しやすいです。

今回は不要なモジュールが入らないように、イチから環境を構築しなおしてexe化しました。
しかし、出来上がったファイルは250MBオーバー…

手間をかけるなら最初からpy2exeを使えばよかったかもしれません。

エラーへの対処

PyInstallerでexe化しただけでは、プログラムが起動しませんでした。

以下2つのエラーが出ていました。

Tesseract を使用している場合に出るエラー

Tesseractを使用している場合、変換したexeを実行すると、下記サイトにあるようにエラーが発生します。

exe化するときにtesseract関連のデータが足りないようですね…

上記サイトを見て、tesseract.exeと.traineddataさえあればいいのかなと思って試してみましたが、エラーは出たままでした。

結局、私の環境では「(環境名)\Libraty\bin」を丸々コピーしてexe化したら、エラーが消えました。
何が必要だったのか正確にはわからずじまいです…

Qtに関するエラー

PyQt(PySide)を使用している場合、下記サイトの3つ目のエラーが発生するようです。

これはサイトに書かれている通り、(環境名)\Libraty\plugins\platforms をdlist内にコピーしたら解決しました。

おわりに

簡単にexe化できるかと思ったら、エラーの対処が大変でした…
出来上がったexeもサイズが大きく、起動も時間がかかり、使い心地は微妙です…

anacondaを使っている場合は実行ファイルが重くなってしまうので、少し大変そうですがpy2exeを使った方が良いと思います。

また、GUIツールでexeにすることを考えるなら、PythonよりもC#などを使えないか検討してみた方が良さそうです。