#はじめに
Pillow を利用した実行ファイルを生成する際に出たエラーとその対処法について書いておこうと思います.
#やりたいこと
Pillow を利用したコードについて,Pyinstaller を用いて実行ファイルを生成します.
#問題点
import PIL を行い PIL.Image 関数を利用しようとすると,開発環境上では上手く実行できたのですが,Pyinstaller を利用して生成した実行ファイルを使うと プログラムが停止します.
新しいバージョンの Python だと Pillow はデフォルトで入っているようですが, Pyinstaller と Numpy の互換性の問題があり,Pyinstaller やその他のモジュールは古いバージョンを利用しているため手動で入れる必要があります.
#流れ
そこで私の行った対処についてまとめておきます.内容はあまりまとまっていないですし,細かな検証も行っていません.私の行った対処と動いた環境だけまとめておきます.
まず,普段通り pyinstaller (ファイル名).py --clean --noconsole --onefile によって生成した実行ファイルを起動すると,途中でプログラムが停止しました.
そこで,エラー内容を確認するためにコンソール表示するため, pyinstaller (ファイル名).py --onefile を実行しました.すると,AttributeError: module 'PIL' has no attribute 'Image' というエラーが出ました.(エラーの内容はもう少し長い)
もしかしたら Pillow のバージョンの問題かなと思い,他のモジュールと同時期辺りに利用されていたバージョンにダウングレードしましたが,上手く動きませんでした.
そこで,今度はモジュールのインポート文を import PIL.Image という書き方にかえ,内容も import PIL.Image as PillowImage へ変更しました.しかし,今度も開発環境では上手くいくのですが,Pyinstaller によるファイル生成時に Cannot find existing PyQt5 plugin directories というエラーが出ました.
そこで,下記リンクを参考にディレクトリを作り,pyinstaller (ファイル名).py --clean --noconsole --onefile --hidden-import="PIL.Image" のコマンドを利用して実行ファイルを生成したところ正しく動作するようになりました.
https://qiita.com/tatsuruM/items/cd657f25022c93d0284f
#環境
pillow は anaconda で提供されていないので pip install を利用する必要があります.
#利用したPython
Python = 3.7.10
#パッケージの管理
pip install Pyinstaller==3.4 (記事作成時の最新版は 4.3)
pip install pytoshop (記事作成時の最新版は 1.2.1)
pip install opencv-python==4.0.1.24 (記事作成時の最新版は 4.5.2.54)
pip install mkl==2018.0.0 (記事作成時の最新版は 2021.3.0)
pip install six (記事作成時の最新版は 1.16.0)
pip install pytoshop (記事作成時の最新版は 1.2.1)
pip install pillow==7.2.0 (記事作成時の最新版は 8.4.0)
これ以外に含まれているモジュールは,全て以前書いた記事と同様です.
https://qiita.com/bellvine/items/d42b05c3cbdd823dc77a