【Python】pyinstallerでpyファイルを配布用にEXE化する方法

/

pythonのpyinstallerでファイルをEXE化する方法

Pythonで記述したプログラムを配布したい場合、そのpyファイルをexe化して配布する方法があります。

exe化することにより、配布先のPCにPythonがインストールされていなくてもexe化されたプログラムを起動することができます。

Pythonでexe化するライブラリはいくつかありますが、今回は一番簡単な「Pyinstaller」を使った方法を解説していきます。

exe化とは

exe化とは、Windows環境における実行形式のファイルにすることです。
実行形式のファイルとは、それ単体で実行できるファイルということです。簡単にいうとダブルクリックすれば起動するファイルです。

exe化することで、プログラムの起動が簡単になり、またPythonがインストールされていなくてもプログラムを起動できるという大きなメリットがあります。

Pyinstallerとは

PyinstallerとはPythonファイルをexe化するためのライブラリです。
他のexe化するライブラリと比べて非常に簡単にexe化できるという特徴があります。

ネットで調べるとPyinstallerを使ったexe化の方法がたくさんあるので、多くの方がPyinstallerを使っていることがわかります。

Pyinstallerは簡単にexe化できる反面、作成したexeファイルの起動が遅いというデメリットがあります。

より起動が高速なexeを作成したい場合は、py2exeやembeddable pythonを使うことをお勧めします。

またexe化のもう1つのデメリットとしては、exeファイルのサイズが非常に大きくなってしまうことがあることです。

ファイルサイズ肥大化を避けるための方法は後述します。

Pyinstallerを使ったexe化の方法

Pyinstallerを使うためには、まずインストールする必要があります。
下記のようにpipコマンドでpyinstallerをインストールします。

pip install pyinstaller

これでpyinstallerを使ってexe化する準備が整いました。

Pythonファイルをexe化するには、まず目的のPythonファイルが存在するディレクトリに移動します。
その後、以下のコマンドを実行します。

pyinstaller ファイル名 -–onefile -–noconsole

上記コマンドではオプションとして、--onefileと—noconsoleを指定しています。

--onefileは生成されるものを1つのファイルにまとめ、--noconsoleはexeファイル実行時にコンソールが表示されないようにします。

ここでのポイント

pyinstaller実行時、onefileとnoconsoleは基本的につけましょう

このコマンドを実行するとPythonファイルが入っているディレクトリに「__pycache__」、「build」、「dist」のフォルダが新たに作成されます。

目的のexeファイルはdistフォルダ内に入っています。
このexeファイルを配布すれば、あなたが作ったプログラムを受け取った相手はクリックするだけで起動できるようになるというわけです。

exeファイル起動時の注意点

exe化したプログラムに関連するファイルがある場合、それらのファイルと階層をそろえる必要があります。

私の場合は、GUI画面のボタンに画像を使っているプログラムが多いので、それらファイルと同じ階層にexeファイルを持っていきます。

アイコンを設定する

pyinstallerではアイコンを設定するためのオプションもあります。

pyinstallerでビルドするときに--iconのオプションを使用します。その際にアイコンで使用する画像icoファイルを指定します。

pyinstaller ファイル名 -–onefile -–noconsole --icon=test.ico

アイコン画像のicoファイルの作成には以下サイトを使うと簡単にicoファイルを作成できます。

favicon.icoを作ろう

アイコンが反映しない場合の対処方法

上記の方法でexeファイルのアイコンは作成されるのですが、Windowsを使っている人の中にはアイコンが反映しない!!という方もいます。
その原因はアイコンキャッシュです。

Windowsを再起動またはアイコンキャッシュを削除することで、希望のアイコンに戻るはずです。

再起動させないでアイコンキャッシュを削除する方法としては、ie4uinit.exeを使います。

エクスプローラーをすべて閉じた後に、「ファイル名を指定して実行」に「ie4uinit.exe -show」を入力して実行するだけです。

Windowsでアイコンキャッシュの削除方法

もしアイコンがうまく表示されなくても焦らずに、上記方法を試してみてください。

exeファイルの肥大化を抑える(軽量化)

pipで多くのモジュール(パッケージ)をインストールしているpythonからpyinstallerでexeファイルを使用すると、ファイルサイズが大きいexeファイルが作成されます。

それはpipでインストールしているモジュールすべてを組み込んでしまうからです。

それを防ぐために仮想化を使用します。仮想環境を構築して、そこには該当プログラムで使用するモジュールのみをインストールします。

そうすることで最小限のモジュールを組み込んだexeファイルが作成されるのです。

仮想環境の作成方法に関しては、以下記事をご参照ください。

インストールしているライブラリが少なければ、--excludeで不必要なライブラリをexeファイルから省くことができます。

pyinstaller ファイル名 --onefile --exclude numpy

numpyやpandasなどはかなり容量があるので、exe化するプログラムに不必要であればexcludeしてexeファイルの軽量化を図ったほうがいいですね。

指定できるオプション一覧

すでにいくつかのオプションについては説明していますが、その他にも様々なオプションがpyinstallerには存在します。

すべてのオプションについては以下サイト(英語)に記載されています。

Using Pyinstaller

よく使われるオプション

--onefile または -F

上記オプションは、出力されるファイルを1つにまとめるためのオプションです。
私はexeファイルを作成するときは、必ずこのオプションを付けます。

--noconsole または -w , --windowed

上記オプションは、作成したexeファイルを起動した際に、コンソールを表示しなくします。

基本的にはこのオプションを付けるのですが、何かしらのバグでコンソールなしだと起動しないアプリを作成したことがあります。
なのでその時は仕方なく、--noconsoleは付けないでexeファイルを作成しました。

その時のアプリは、PDFを画像に変換するためにpdf2imageモジュールの convert_from_pathを使っていて、これが悪さしてコンソール必須になっていました。

未だにこの問題は解決できず。

--clean

上記オプションは、Pyinstallerキャッシュや前回作成されていたディレクトを削除してくれます。

--icon または -i

上記オプションは、作成したアプリにアイコンを設定することができます。

その他のオプション

--onedir または-D

上記オプションは作成されるディレクトリを1つにまとめてくれます。

--name または -n

上記オプションは、exeファイルのファイル名を指定することができます。--nameの後に希望するファイル名を入力して使います。

--help または -h

上記オプションは、ヘルプメッセージを表示します。

--version または -v

プログラムバージョンを表示します。

まとめ

自分で作ったプログラムを配布できるようになると、より一層プログラミングが楽しくなって、やりがいも増えていきます。

ぜひ今回覚えたexe化の方法を使って、友達や会社の人にexe化したPythonプログラムを配布して使用してもらってください。

exe化したアプリとその他画像やファイルを一度で所定の場所に保存できるようにしたい、デスクトップにショートカットを自動的に作成したい、 コントロールパネルの「プログラムと機能」にアプリを登録したい、ということであればインストーラーを作成するのがお勧めです。

下記リンクのWindows用インストーラーを作成するNSISのインストール方法をご覧ください。