PygameスクリプトをPyinstallerを用いてexe化する方法の備忘録です。
はじめに
Pygameで簡単なゲームを自作してみました。
初心者がPythonでゼロからゲームを作ってみた | デザインから実装まで - BioErrorLog 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ファイルを作成するには、以下の手順を踏みます。
- PyInstallerのインストール
- exeファイルの作成
- ゲームアセット依存関係の解決
以下、ひとつひとつ説明します。
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
[関連記事]
“Failed to execute script XX” エラー対処: PyinstallerでPygameをexe化するときの注意点 - BioErrorLog Tech Blog
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ファイルが上手く実行できずに苦労してしまいました。
同じ境遇の誰かの参考になれば幸いです。
[関連記事]