1
0

PythonのKivyアプリをexe化する方法

Posted at

はじめに

PyInstallerを使用して、PythonのKivyアプリをexe化する方法を示す。

目次

  1. 環境
  2. フォルダ構成
  3. 手順
  4. 参考文献

環境

PyInstallerの最新版6.8.0では、exeファイルを終了すると、一時フォルダの削除できないワーニングが発生したため、
バージョン指定で5.13.2を使用する。

  • Windows11
  • Python 3.11.6
  • pip 24.0
  • Kivy 2.2.1
  • PyInstaller 5.13.2
  • PowerShell

フォルダ構成

test
├── main.py # スクリプト
├── main.kv # kivyファイル
├── kivy_venv/Lib/site-packages # 仮想環境にインストールしたモジュール
├── main.spec # PyInstallerの設定ファイル
├── dist/main.exe # 作成するexeファイル
└── build/ # exeファイルに関連するもの(未使用)

手順

1. 仮想環境を構築

    python -m venv kivy_venv

2. 仮想環境をアクティブ化

    kivy_venv/Scripts/activate

3. Kivyをインストール

    pip install kivy

4. PyInstallerをインストール

    pip install pyinstaller

5. Pythonのスクリプトを編集

PyInstallerのconsoleオプションを無効にして、exeファイルを作成する場合、exeファイルを実行すると、RecursionErrorが発生する。
そのため、以下の環境変数を設定する。

main.py
if hasattr(sys, "_MEIPASS"):
    os.environ["KIVY_NO_CONSOLELOG"] = "1"

6. PyInstallerでexeファイルを作成

  • --name (exeファイル名):exeファイル名を指定する
  • --onefile:exeファイルを1つにまとめる
  • --noconsole:コンソールへの出力を無効にする
    pyinstaller main.py --name test --onefile  --noconsole

PyInstallerで作成されたspecファイルに以下を追加する。

  • from kivy_deps import sdl2, glew :Kivyの設定
  • *[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)] :Kivyの設定
  • datas[("exeファイルから参照したいファイル", "一時フォルダからのファイルの相対パス")]:一時フォルダに保存されるデータ
    • C:\Users(ユーザー名)\AppData\Local\Temp_MEIxxxxxx の一時フォルダが作成される
main.spec
# -*- mode: python ; coding: utf-8 -*-

from kivy_deps import sdl2, glew #追加

block_cipher = None


a = Analysis(
    ['main.py'], #追加
    pathex=[],
    binaries=[],
    datas=[("main.kv", ".")], #追加
    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='test',
    debug=False,
    bootloader_ignore_signals=False,
    strip=False,
    upx=True,
    upx_exclude=[],
    runtime_tmpdir=None,
    console=False, #出力を無効
    disable_windowed_traceback=False,
    argv_emulation=False,
    target_arch=None,
    codesign_identity=None,
    entitlements_file=None,
)

コンパイルし、再度exeファイルを作成する。

    pyinstaller main.spec

参考文献

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0