BioErrorLog Tech Blog

試行錯誤の記録

Pygameのexeファイルを作成する | PyInstaller

PygameスクリプトをPyinstallerを用いてexe化する方法の備忘録です。

はじめに

おはよう。@bioerrorlogです。

Pygameで簡単なゲームを自作してみました。

初心者がPythonでゼロからゲームを作ってみた | デザインから実装まで - 生物系がゼロから始めるTech Blog

せっかく作ったのだからどこかでゲーム実行ファイルを配布しようと思い、itch.ioにゲームを登録しました。

ゲームを配布するには、ソースコードからゲーム実行ファイル(exeファイル)を作成する必要があります。

そこで今回は、PygameスクリプトをPyInstallerを用いてexe化するやり方を残します。

環境

Windows10で作業しました。

各バージョン情報は以下です。

Python 3.7.6
pygame 2.0.1
pyinstaller 4.2

PyInstaller でPygameのexeファイルを作成する

PyInstaller でPygameのexeファイルを作成するには、以下の手順を踏みます。

  1. PyInstallerのインストール
  2. exeファイルの作成
  3. ゲームアセット依存関係の解決

以下、ひとつひとつ説明します。

1. Pyinstallerのインストール

まずは、Pyinstallerをpipインストールします

pip install pyinstaller

終わったら、バージョンを確認してPyinstallerが正常にインストールされていることを確認します。

$ pyinstaller --version
4.2

無事バージョンが表示されれば、インストール完了です。

2. exeファイルの作成

続いて、Pygameプロジェクトのソースコードからexeファイルを作成します。

今回は、私のPygameプロジェクトを例にexe化してみます。

GitHub - bioerrorlog/CellForRest_Pygame: My first project - Clicker game in Python.

# Pygameプロジェクトを手元にclone
git clone https://github.com/bioerrorlog/CellForRest_Pygame.git
cd CellForRest_Pygame/game/

このPygameプロジェクトは、以下のようなフォルダ構成になっています。

.
├── CellForRest.py
└── data

CellForRest.pyがメインの実行ファイルで、dataフォルダの中に、画像などのゲームアセットファイルが格納されています。

これらを、以下のPyInstallerコマンドでexe化します。

pyinstaller CellForRest.py --onefile --noconsole

--onefileオプションと--noconsoleオプションは、必要に応じて付与してください。 それぞれ以下の処理が行われます。

  • --onefile
    関連ファイルを1つにまとめてexe化する

  • --noconsole
    exeファイル実行時にコンソールを非表示にする

上記コマンドを実行すると、もともとのディレクトリに以下のようなフォルダが生成されます。

.
├── build
├── CellForRest.py
├── CellForRest.spec
├── data
├── dist
└── __pycache__

生成されたフォルダの中のdistフォルダの中に、exeファイルが作成されています。

└── dist
    └── CellForRest.exe


[関連記事]
www.bioerrorlog.work

3. ゲームアセット依存関係の解決

最後に、exeファイルとゲームアセットフォルダの依存関係を解決します。

もともと、メインスクリプトCellForRest.pyと同階層にゲームアセットフォルダdataを配置していたので、生成したexeファイルでも同様の依存関係を保持する必要があります。

つまり今回の例だと、dataフォルダをdistフォルダ内にコピーします。

└── dist
    ├── data # コピーしてくる
    └── CellForRest.exe

これで、exeファイルCellForRest.exeを実行すれば、ゲームが起動するようになりました。

ゲームを配布するときは、このdistフォルダの中身(dataフォルダとCellForRest.exe)をzipする形になります。

おわりに

今回は、Pyinstallerを用いてPygameのexeファイルを作成する方法を書きました。

私の場合、exeファイルとゲームアセットフォルダの依存関係を保持する必要があることを知らなかったため、しばらくexeファイルが上手く実行できずに苦労してしまいました。

同じ境遇の誰かの参考になれば幸いです。

[関連記事]
www.bioerrorlog.work

www.bioerrorlog.work

参考

Making an Executable from a Pygame Game (PyInstaller) - YouTube

PyInstaller Manual — PyInstaller 4.2 documentation

Using PyInstaller — PyInstaller 4.2 documentation

pyinstaller · PyPI