kivyで作ったアプリケーションをPyinstallerを使ってEXEファイル化する方法

みなさまおはこんばんにちは、せなです

今回はKivyアプリケーションをEXEファイルにする方法を説明したいと思います

環境

Python:3.7
Kivy:1.11.1
PyInstaller:3.6

構成

Projectフォルダ
→main.py
→main.kv

手順

SPECファイルへの追記

Projectフォルダ直下で以下のコマンドを実行する

pyinstaller main.py --onefile

※main.py等は自分の環境に応じ、置き換えて実行してください

コマンドを実行するとmain.specとdistフォルダが生成されます
distファルダは触らずにmain.specファイルに以下の追記を行います

追記箇所は以下です

  1. from kivy_deps import sdl2, glew
  2. hiddenimports=['win32file’, 'win32timezone’],
  3. *[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)],
  4. coll = COLLECT(exe, Tree('.’), ~ name=’main’)
from kivy_deps import sdl2, glew  # 追記1 依存ファイルのインポート
block_cipher = None

a = Analysis(['main.py'],
             pathex=['c:\\work\\projectkivy'],
             binaries=[],
             datas=[],
             hiddenimports=['win32file', 'win32timezone'],  # 追記2 FileChooserを使用している場合に必要
             hookspath=[],
             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)],  # 追記3 依存関係の設定
          name='main',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          upx_exclude=[],
          runtime_tmpdir=None,
          console=True )  # Falesで実行時のコンソールを非表示にできる
coll = COLLECT(exe, Tree('.'),  # 追記4 以下行すべて
               a.binaries,
               a.zipfiles,
               a.datas,
               *[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)],
               strip=False,
               upx=True,
               name='main')

SPECファイルにPyinstallerを使用

main.specのあるディレクトリで以下のコマンドを実行してください

pyinstaller main.spec

上記コマンドを実行した後にdistフォルダのmainフォルダ内にあるmain.exeを実行してください

そのEXEファイルを実行して正しく動作すればEXEファイル化完了です

Kivy,PythonKivy

Posted by sena