PyInstallerでアイコンを設定する方法(Pillow)
はじめに
PyInstaller は、pythonスクリプトを実行可能ファイル(.exeファイル)に変換するツールです。
インストールに関しては、次の記事を参考にしてください👇

変換する時に、アイコンファイルを指定して設定することができますので、その方法をご紹介します。
開発環境
OS : Windows 11 Pro
Python:3.13.2
使用ライブラリ:PyInstaller(6.12.0)、Pillow(11.1.0)
使用方法
pyinstaller --onefile --icon=favicon.ico .\myscript.py
pyinstaller -F -i favicon.ico .\myscript.py
オプションの [-i] または [–icon] を使用してアイコンファイルを指定することで、アイコンを設定することができます。
また、以下のように公式ドキュメントに記載されています。
プラットフォーム形式ではないイメージ ファイル (Windows では ico、Mac では icns) が入力された場合、PyInstaller は Pillow を使用してアイコンを正しい形式に変換しようとします (Pillow がインストールされている場合)。
https://pyinstaller.org/en/stable/usage.html#cmdoption-i
そのため、Pillow を使用した方法で作成してみます。
Pillow インストール
pipを利用してインストールします。
Windowsのコマンドプロンプトを起動して、実行します。
pip を最新バージョンに更新。
pip install --upgrade pip
Pillow のインストール。既にインストールされている場合は、最新バージョンに更新。
pip install --upgrade Pillow
Pythonスクリプト用意
今回サンプルスクリプトとして以下のようなスクリプトを用意します。
10秒間現在時刻をコンソールウィンドウに表示します。
# ---------------------------------------------------------------------------
# PyInstallerでアイコンを設定する方法(Pillow)
# https://www.farmsoft.jp/2489
# ---------------------------------------------------------------------------
import datetime
import time
print('Hello World!!')
print('')
print('現在時刻を10秒間表示します。')
for i in range(10):
dt_now = datetime.datetime.now()
print('\r%s' % dt_now.strftime('%Y年%m月%d日 %H:%M:%S'), end='')
time.sleep(1)
アイコンファイル用意
アイコンにする画像ファイル PNG(.png)を用意します。
(アイコンには背景が透過されている画像ファイルが良いと思いますので、PNG を選んでいます。)
試してみる人は、こちらを保存してご利用ください➡️

Windows標準の「フォト」アプリなどで、1:1の正方形にしておきます。
サイズは、exeファイル作成時に調整されるため、「128×128ピクセル」以上であれば問題ないと思いますが、正方形にしておかないと作成した時に歪なアイコンになってしまいます。

この画像を exeファイル にする Pythonスクリプトファイル と同じフォルダに配置しておきます。
実行可能ファイル変換
コマンドプロンプトを起動し、以下のコマンド実行することでアイコン付きの exeファイル を作成することができます。
pyinstaller --onefile --icon=favicon.png .\myscript.py

(注)2回目以降実施する場合で、同じ名称の画像ファイルの中身を修正しただけでは、exeファイル を生成してくれません。その場合は、前回生成した exeファイル を削除すると、新しく生成してくれます。
アイコンが正しく表示されない場合の対処法
アイコンを修正して exeファイル を再生成していると、アイコンが正しく更新されていない場合があります。
Windows内部でキャッシュしていると考えられますが、その時の対処法として私の環境で効果のあったものを紹介します。
ファイル名変更
一番手っ取り早い方法です。
生成した exeファイル を今まで使用していない名称に変更すると、キャッシュの画像ではなく正しくアイコン画像を読み込んでくれます。
アイコンキャッシュ削除
「C:\Users\*****\AppData\Local」にある [IconCache.db] を削除してPCを再起動させます。
(隠しファイルのため、フォルダオプションで表示する設定にしていないと見えません。)
再起動後、新しくアイコン情報を読み込んで [IconCache.db] を生成します。
その他
「ie4uinit.exe -ClearIconCache」や「ie4uinit.exe -show」のコマンドを実行することが紹介されているサイトが多いですが、私の環境では効果があったのかよくわかりませんでした。
おわりに
Pythonスクリプト で手軽に作成したプログラムが、ちゃんとしたアプリみたいになってかっこよくなりますね。
これで他人に配布するのも見た目が良くなります。
コメント