PythonプログラムをPyInstallerでEXE化する方法

目次
PyInstallerとは?
PyInstallerは、Pythonで作成したプログラムを実行可能な形式(EXEファイル)に変換するためのツールです。特に複数のPythonファイルやライブラリを含むプロジェクトを一つの実行ファイルにまとめることができるため、配布時に非常に便利です。
他のEXE化ツールとの比較
ツール | 複数ファイル対応 | クロスプラットフォーム |
---|---|---|
PyInstaller | ◎ | ◎ |
cx_Freeze | ○ | ○ |
py2exe | △ | ×(Windowsのみ) |
インストールと環境設定
基本インストール
pip install pyinstaller
# インストール確認
pyinstaller --version
環境に応じた注意点
PyInstallerはWindows、macOS、Linuxで使用できますが、各プラットフォームごとに少しずつ動作に違いがある点に注意が必要です。特にWindows用のEXEを他のOSで作成する場合、クロスコンパイルが必要になることがあります。この場合は、Windowsで実行するための仮想マシンやDockerを使ってビルドを行うのが一般的です。
PyInstallerを使った基本的なEXE化手順
単一ファイルのEXE化
PyInstallerを使ってPythonスクリプトをEXE化するための基本的な手順は非常にシンプルです。以下のコマンドを実行するだけで、PythonファイルをEXEファイルに変換できます。
pyinstaller --onefile script.py
--onefile
オプションを使用することで、必要なすべてのファイルを1つのEXEファイルにまとめることができます。このオプションがない場合、複数のファイルに分割された形で出力されます。
複数ファイルや依存関係を含むEXE化
PyInstallerは、外部ライブラリや画像・データファイルなど、スクリプトが依存するファイルも自動的に検出してパッケージ化します。もし特定のファイルを手動で追加する必要がある場合は、--add-data
オプションを使うことで対応可能です。
pyinstaller --onefile --add-data "data.json;." script.py
このコマンドは、data.json
というファイルをEXE化されたプログラムと一緒にパッケージ化します。
EXE化したファイルのカスタマイズ方法
アイコンやリソースファイルの追加
EXE化したファイルにカスタムアイコンを設定するには、--icon
オプションを使用します。例えば、myicon.ico
というアイコンファイルを追加するには以下のようにします。
pyinstaller --onefile --icon=myicon.ico script.py
隠しウィンドウでの実行
GUIアプリケーションを作成する際、コンソールウィンドウを表示せずに実行したい場合は、--noconsole
オプションを使用します。
pyinstaller --onefile --noconsole script.py
これにより、実行時にコンソールウィンドウが開かず、背景でアプリケーションが動作します。
Docker環境でのPyInstaller使用方法
Dockerでの環境構築
Dockerを使用することで、OS環境に依存せず、安定したビルド環境を構築することが可能になります。以下はPythonとPyInstallerを含む基本的なDockerfileです。
FROM python:3.9-slim
RUN pip install pyinstaller
WORKDIR /app
COPY . /app
PyInstallerを使ったEXE化の実例
Docker上でPythonスクリプトをEXE化するには、上記のDockerfileを元にコンテナを構築し、その中でPyInstallerを実行します。
docker build -t pyinstaller-env .
docker run --rm -v $(pwd):/app pyinstaller-env pyinstaller --onefile script.py
それぞれのコマンドとオプションの詳細について説明します。
docker build -t pyinstaller-env .
このコマンドは、Dockerイメージを作成するために使用されます。各オプションの説明は以下の通りです。
docker build
: Dockerfileをもとに新しいDockerイメージをビルド(構築)します。-t pyinstaller-env
: このオプションは、作成したDockerイメージに「pyinstaller-env」という名前(タグ)を付けます。これにより、ビルドしたイメージを後でこの名前で参照できるようになります。.
: ドット(.
)は、現在のディレクトリを指定しています。このディレクトリにあるDockerfileを使用してイメージをビルドすることを意味します。
docker run --rm -v $(pwd):/app pyinstaller-env pyinstaller --onefile script.py
このコマンドは、先ほどビルドしたDockerイメージ(pyinstaller-env
)を実行し、PyInstallerを使ってPythonスクリプトをEXE化します。各オプションの詳細は以下の通りです。
docker run
: Dockerコンテナを実行するためのコマンドです。--rm
: コンテナの実行が終了した際に、そのコンテナを自動的に削除します。これにより、不要なコンテナが残らないようになります。-v $(pwd):/app
: ホストマシンとコンテナの間でディレクトリを共有するための「ボリュームマウント」オプションです。$(pwd)
: ホストマシンの現在のディレクトリを表しています($(pwd)
は、現在のパスを取得するシェルのコマンドです)。/app
: コンテナ内でホストの現在のディレクトリをマウントする場所です。この例では、ホストのディレクトリがコンテナ内の/app
にマウントされます。
pyinstaller-env
: 先ほどビルドしたDockerイメージの名前です。このイメージを使ってコンテナを実行します。pyinstaller --onefile script.py
: PyInstallerのコマンドです。Dockerコンテナ内でこのコマンドが実行され、指定したscript.py
というPythonスクリプトを1つの実行可能ファイル(EXE)にまとめます。--onefile
: PyInstallerが出力するファイルを1つのEXEファイルにまとめるオプションです。
この方法を使うことで、クロスプラットフォームでのビルドや依存関係の管理が容易になります。特に、異なるOS上でのPythonプログラムの配布に有効です。
まとめ
PyInstallerを使うことで、Pythonプログラムを簡単にEXE化し、Python環境のないコンピュータでも実行できるようになります。本記事では、PyInstallerの基本的なインストールから、EXE化の具体的な手順、さらにはDockerを使ったクロスプラットフォームのEXE化手法についても紹介しました。EXE化したプログラムは、配布が容易であり、特にビジネスシーンやクライアント向けのアプリケーションで大きな利便性を発揮します。ぜひ、PyInstallerを活用して、Pythonプログラムの配布をスムーズに進めてみてください。