【初心者向け】 Python KivyのGUIアプリをExe化する方法

まくまく
まくまく
PythonのGUIアプリ作成ライブラリ kivyで作成したGUIアプリをExeファイル化してみようと思います。

先日アップした「Python Kivy スライダーの使い方 グラフをリアルタイムで更新する方法」で作成したものをExeファイル化します。

KivyのウインドウにMatplotlibのグラフを表示して、スライダーでグラフのプロットをグリグリと動かすプログラムです。

今回は、Windows11搭載パソコンでexeファイルを作成します。出来上がったexeファイルは、Windows11でもWindows10でも動作しますが100%ではありません。環境により動作しない場合もあります。



Pyinstallerを使ってExe化

Exeファイルを作るのは、(最もよく使われている?)「Pyinstaller」を使用します。

pipのアップデート

まずはライブラリをインストールする前にpipのアップデートを実施しておきます。

pip install --upgrade pip

または、

python -m pip install --upgrade pip

環境によってコマンドが異なります。

Pyinstallerをインストール

以下のコマンドでPyinstallerをインストールします。

pip install pyinstaller 

カレントフォルダでコマンドプロントを起動


pyファイルとkvファイルを保存しているフォルダに移動します。


アドレスバーに「cmd」と入力してEnterを押すとコマンドプロンプトが立ち上がるので、以下のコマンドを実行します。
※「kivyslider.py」のところにファイル名を入れてください。

pyinstaller kivyslider.py --onefile --noconsole


コマンドを実行すると、このようなフォルダ&ファイルが作成されます。この中のdistフォルダの中にexeがファイルがあります。


distフォルダの中にexeファイルが出来ていることが確認されました。

しかし、このままではexeファイルは実行できません。specファイルの編集、kvファイルのコピーが必要になります。

pyinstallerのコマンドは、アプリケーションフォルダから単にコマンドプロンプトを立ち上げるだけでなく、カレントフォルダへ移動して実行する必要があります。カレントフォルダへの移動方法は他にもありますが、上記記載の目的のフォルダで「cmd」を入力するのが便利です。
PandasやNumpyを使用していない場合は、「pyinstaller kivyslider.py –onefile –noconsole –exclude pandas –numpy」というように記載することでexeファイルのサイズが小さくなる場合がありますが、まずは気にしないでexeファイルを作成&動作確認を優先した方が良いと思います。



specファイルの編集


フォルダに作られたspecファイル、今回であれば「kivyslider.spec」を編集します。


specファイルはエディターソフトで編集することができます。上の画像はVisual Studio Codeで表示したものです。

変更前のspecファイル

# -*- mode: python ; coding: utf-8 -*-


block_cipher = None


a = Analysis(['kivyslider.py'],
             pathex=[],
             binaries=[],
             datas=[],
             hiddenimports=[],
             hookspath=[],
             hooksconfig={},
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)

exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,  
          [],
          name='kivyslider',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          upx_exclude=[],
          runtime_tmpdir=None,
          console=False,
          disable_windowed_traceback=False,
          target_arch=None,
          codesign_identity=None,
          entitlements_file=None )

変更後のspecファイル

# -*- mode: python ; coding: utf-8 -*-

from kivy_deps import sdl2, glew
block_cipher = None


a = Analysis(['kivyslider.py'],
             pathex=[],
             binaries=[],
             datas=[],
             hiddenimports=[],
             hookspath=[],
             hooksconfig={},
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)

exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,  
          *[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)],
          name='kivyslider',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          upx_exclude=[],
          runtime_tmpdir=None,
          console=False,
          disable_windowed_traceback=False,
          target_arch=None,
          codesign_identity=None,
          entitlements_file=None )

coll = COLLECT(exe, Tree('.'),
               a.binaries,
               a.zipfiles,
               a.datas,
               *[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)],
               strip=False,
               upx=True,
               name='main')

変更箇所は、

3行目「from kivy_deps import sdl2, glew」追加
28行目「*[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)],」追加
42行目〜49行目「coll = COLLECT(exe, Tree(‘.’)〜」49行目まで追加

変更できたら保存してspecファイルを閉じます。

specファイルがあるカレントフォルダからコマンドプロンプトを立ち上げ、以下のコマンドを実行します。
※「kivyslider.spec」のところにファイル名を入れてください。

pyinstaller kivyslider.spec

kvファイルをコピー


kvファイルをdistフォルダ(exeファイルと同じフォルダ)にコピーします。

exeファイルの実行


exeファイルをダブルクリックするとkivyで作成したGUIアプリが立ち上がりました。

exeファイルは、kivyとmatplotlibを使用した50行くらいのプログラムで、80MB程度のファイルサイズになります。起動に3秒ほどかかります。

kvファイルをexeファイルと同じフォルダに置いておかないと「kvファイルがないです」というメッセージがでて立ち上げることができません。他のパソコンで動作させるときもexeファイルとkvファイルはセットにしておく必要があります。(pyファイルとkvファイルを分けている場合)

kivy関連の記事はこちらにまとめています。>>>Python kivy 使い方まとめ

タイトルとURLをコピーしました