Pythonのプログラムは通常テキストファイルに書かれたスクリプトファイルをPythonコマンドで読み込ませて処理を実行します。
このスクリプトファイルをpyinstallerを使えばWindows上で動作するEXEファイルにすることができます。
この記事ではpyinstallerの使い方を解説します。
pyinstallerの使い方
PythonのスクリプトファイルをWindowsで動作するEXEファイルにするにはpyinstallerを使うのが最も簡単な方法の1つです。
pyinstallerのインストール
pyinstallerは使う前に1度だけインストールする必要があります。
pyinstallerはpipコマンドを使ってインストールします。
pip install pyinstaller
pyinstallerを使ったスクリプトファイルのEXE化
pyinstallerのインストールが完了したら実際にスクリプトファイルをEXE化します。
EXE化するPythonのスクリプトファイルは以下の簡単なものにします。
print( "Hello Python!!" )
出はこれを実際にpyinstallerでEXE化してみます。
EXE化するにはスクリプトファイルがあるフォルダーに移動して「pyinstaller pythonファイル名」で実行します。
今回はスクリプトファイル名を「hello.py」にしてあるので
pyinstaller hello.py
になります。
実行前のフォルダーの中身は
C:\tmp\python>dir ドライブ C のボリューム ラベルがありません。 C:\tmp\python のディレクトリ 2021/01/29 13:28 <DIR> . 2021/01/29 13:28 <DIR> .. 2021/01/29 13:29 33 hello.py
になっています。
上記の状態で、pyinstallerを実行すると
C:\tmp\python>dir ドライブ C のボリューム ラベルがありません。 C:\tmp\python のディレクトリ 2021/01/29 13:42 <DIR> . 2021/01/29 13:42 <DIR> .. 2021/01/29 13:42 <DIR> build 2021/01/29 13:42 <DIR> dist 2021/01/29 13:40 29 hello.py 2021/01/29 13:42 1,001 hello.spec 2021/01/29 13:42 <DIR> __pycache__ 2 個のファイル 1,030 バイト
とフォルダーにいくつかのフォルダーとファイルができました。
このdistフォルダーにあるhelloディレクトリの中にあるhello.exeが今回作成されたEXEファイルです。
C:\tmp\python\dist\hello>dir ドライブ C のボリューム ラベルがありません。 C:\tmp\python\dist\hello のディレクトリ 2021/01/29 13:42 <DIR> . 2021/01/29 13:42 <DIR> .. 2021/01/29 13:42 787,739 base_library.zip 2021/01/29 13:42 1,452,403 hello.exe 2021/01/29 13:42 1,493 hello.exe.manifest 2021/01/21 14:30 3,381,792 libcrypto-1_1.dll 2021/01/21 14:30 686,112 libssl-1_1.dll 2021/01/21 14:30 199,184 pyexpat.pyd 2021/01/21 14:30 3,750,928 python37.dll 2021/01/21 14:30 26,640 select.pyd 2021/01/21 14:30 1,072,656 unicodedata.pyd 2021/01/21 14:30 89,752 VCRUNTIME140.dll 2021/01/21 14:30 89,104 _bz2.pyd 2021/01/21 14:30 38,928 _hashlib.pyd 2021/01/21 14:30 257,040 _lzma.pyd 2021/01/21 14:30 75,792 _socket.pyd 2021/01/21 14:30 124,432 _ssl.pyd 15 個のファイル 12,033,995 バイト
実行すると
C:\tmp\python\dist\hello>hello.exe Hello Python!! C:\tmp\python\dist\hello>
と実行されます。
pyinstallerで単一のEXEファイルを生成する
pyinstallerでオプションなしでEXEファイルを生成するとたくさんのフォルダーやファイルが作成されます。
これらはEXEファイルが動作するのに必要なファイルなので一緒に管理する必要があります。
これはあまりにも面倒。
ということでpyinstallerで単一のEXEファイルを生成してみます。
EXEファイルの単一化
単一のEXEファイルを生成するにはpyinstallerのonefileオプションを使います。
pyinstaller hello.py --onefile --noconsole
今回はdistフォルダーにhello.exeだけが作成されました。
C:\tmp\python\dist>dir ドライブ C のボリューム ラベルがありません。 C:\tmp\python\dist のディレクトリ 2021/01/29 13:54 <DIR> . 2021/01/29 13:54 <DIR> .. 2021/01/29 13:54 5,567,825 hello.exe 1 個のファイル 5,567,825 バイト
このEXEはPythonがインストールされていないWindowsパソコンでも起動すれば動作します。
EXEファイルのスリム化
それにしてもたった1行print文があるだけのスクリプトファイルをpyinstallerでEXE化したファイルが5,567,825バイトは、あまりにも大きすぎますね。
これをスリム化します。
実はEXEファイルが大きくなる原因の1つはPythonにインストールしたモジュールの数にも原因があります。
そこでpythonのvenvを使って仮想環境を作って、必要なモジュール(今回はなし)だけでの環境でEXE化してみます。
pythonのvenvについては以下の記事を参照してください。
仮想環境を作ったらそこでpyinstallerを実行してEXE化してみます。
(projectA) C:\tmp\python\dist>dir ドライブ C のボリューム ラベルがありません。 C:\tmp\python\dist のディレクトリ 2021/01/29 14:03 <DIR> . 2021/01/29 14:03 <DIR> .. 2021/01/29 14:03 5,565,789 hello.exe 1 個のファイル 5,565,789 バイト (projectA) C:\tmp\python\dist>
と若干ですが小さくなりました。(;^ω^)
まとめ
Pythonのスクリプト(プログラム)をWindowsで動作するEXEファイル化するにはpyinstallerを使うと簡単に行うことができます。