PythonのスクリプトをPyinstallerでexe化する方法
通常Pythonスクリプトを実行するにはPythonをインストールして環境構築をする必要がありますが、exe化することによって環境構築無しでも実行することができるようになります。
Pythonスクリプトをexe化するためのライブラリにはPyinstaller、py2exe、Nuitkaなどがあります。今回はPyinstallerを使ったexe化を説明していきます。
Pythonスクリプトのexeファイル化とは
exeファイルとは開発言語に依存することなくプログラムを実行できるようにしたもので、主にWindows環境で使用されます。
Pythonスクリプトもexe化することでWindows環境で実行できるファイルにすることができます。
Pythonスクリプトexe化のメリットとデメリット
Pythonをexe化することには、以下のようなメリットとデメリットがあります。
Pythonをexe化することのメリット
Pythonスクリプトをexe化することで、Python環境の構築をしなくてもプログラムを実行できます。
つまりexeファイルで配布すれば使用する人はPythonやライブラリをインストールする必要が無いため、プログラムの配布が容易になります。
またexeファイルはマシン語(バイナリデータ)になっていますので、中身のコードを読解することは困難です。
Pythonをexe化することのデメリット
Pythonスクリプトをexe化するとファイルサイズが大きくなる場合があります。
また、バイナリデータなのでexeファイルを直接修正することが出来ません。
Pyinstallerを使ってファイルをexe化しよう
Pythonスクリプトをexe化するライブラリはいくつかありますが、今回はメジャーなライブラリである「Pyinstaller」を使いexe化をしていきます。
Pyinstallerのインストール
Pythonインストール済みの環境にPyinstallerをインストールします。
下記のpipコマンドにてインストールします。
pip install pyinstaller
Pyinstallerを使ったexe化の方法
Pyinstallerの使い方を説明していきます。
まず最初に使用にあたっての注意点です。
- 64bit OS環境で作成したexeファイルは32bitOSで利用不可。
- 32bit OS環境で作成したexeファイルは32bit/64bitの両方で利用できる。
- Pythonが3.7以上のバージョン(2022年11月現在の最新)を利用していること。
- Pyinstallerがサポートされているか事前に公式サイトでの確認を推奨します。(https://pyinstaller.org/en/stable/)
pyinstallerの基本的な実行コマンドは下記の通りです。
pyinstaller Pythonスクリプト名
例としてexe化したいPythonスクリプトをtest.pyとし、C:\python_envを作業フォルダとします。
以下のように進めてみましょう。
- コマンドプロンプトにて作業フォルダに移動
- Pyinstallerでexeファイルに変換を実行
cd C:\python_env
pyinstaller test.py
成功すると下記のように「completed successfully」というメッセージが表示されます。
14719 INFO: Building COLLECT COLLECT-00.toc completed successfully.
完了すると作業フォルダにbuildとdistというフォルダが作成されます。
distフォルダの中にexeファイルがあります。(今回の場合はtest.exe)
これがPythonスクリプトをexe化したものです。
Pyinstallerを使う際のポイント
Pyinstallerでは以下のオプションを使用することができます。
--onefile :関連するファイルを1つにまとめてexeファイルを作成します。
pyinstaller test.py --onefile
--noconsole :コンソール(コマンドプロンプト)を表示しません。
pyinstaller test.py --noconsole
--icon:exeファイルのアイコンを変更できます。
(exe化するスクリプトと同一ディレクトリに*.icoファイルを置いておくと簡単です)
pyinstaller test.py --icon=test.ico
上記以外にもたくさんのオプションがありますので詳しくは公式サイトもご確認ください。
(https://pyinstaller.org/en/stable/)
exe化したファイルを実行してみよう
今回は以下のスクリプト(sample.py)を実際にexe化してみましょう。
今回用意したsample.pyは現在時刻を表示するGUIアプリになっています。
exe化する前に動作確認をしてみましょう。
ウィンドウが立ち上がり「開始」と表示された後、時刻が表示される仕様です。
sample.py
import time
from tkinter import ttk, Tk
def update():
label.configure(text=time.strftime('%H:%M:%S'))
label.after(1000, update)
app = Tk()
app.title("Sample")
app.geometry("300x100")
app["bg"] = "white"
clock = ttk.Style()
clock.configure('TLabel', background='blue', foreground='white')
label = ttk.Label(app, text="開始", font=('arial', 50))
label.pack(expand=True)
label.after(1000, update)
app.mainloop()
下記コマンドを実行しexe化します。今回はオプションを使いファイルを一つにまとめ、
コンソール(黒い画面)を表示しないようにします。
pyinstaller sample.py --onefile --noconsole
buildとdistというフォルダが作成されdistフォルダ内にsample.exeが作成されていると思います。
sample.exeを実行してみましょう。
exe化前と同じ動作が確認できれば成功です。
可能であればPython環境が無いパソコンでも確認してみましょう。