1. PyInstaller を使用する場合
main.py
main.kv
上記の main.py, main.kv を例に説明します. 適当なディレクトリにこれらのファイルを作製します.
コマンドプロンプトを管理者として開き, main.py ファイルのあるディレクトリに移動し,
python -m PyInstaller --noconsole main.py
を入力します.
main.py のあるディレクトリに生成された main.spec を開き,
# -*- mode: python ; coding: utf-8 -*-
の次の行に,
from kivy_deps import sdl2, glew
を追加し, ('.' ではなく, '_' なので注意*1)
a.datas,
の次の行に,
*[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)],
を追加します. インデントは揃えます.
datas=[],
を
datas=[('main.kv', '.')],
にします. kv ファイルを使わない場合は, 必要ないはずです.
python -m PyInstaller main.spec
と入力し,
WARNING: The output directory "(main.py のあるディレクトリ)\dist\main" and ALL ITS CONTENTS wil l be REMOVED! Continue? (y/N)
と出たら y を入力します.
dist/main
に main.exe が作製されているので, 実行して画面が表示されたら成功です.
2. Nuitka を使用する場合
main.py
上記の main.py (main.kv は PyInstaller の項と同じもの) を例に説明します. 適当なディレクトリにこれらのファイルを作製します.
コマンドプロンプトを管理者として開き, main.py ファイルのあるディレクトリに移動し,
python -m nuitka --standalone --windows-disable-console --mingw64 --jobs=1 main.py
と入力します. jobs は, CPU コア数 * 2 にするといいのかもしれません. この作業は時間がかかります. 終了後, main.dist/ に main.exe が作製されます.
Python37-32\Lib\site-packages\kivy\
から data フォルダを main.dist/kivy にコピーし,
Python37-32\share\glew\bin\
から glew32.dll を,
Python37-32\share\sdl2\bin\
から全てのファイルを main.dist にコピーします. *2 最後に, main.kv を main.dist にコピーします.
main.exe を実行して画面が表示されたら成功です.
3. サンプル
以前, Python で迷路生成 で書いた kivy のコードを PyInstaller, Nuitka の両方で exe 化してみました.
自分の環境では動作する, しないといった報告をしていただけると喜びます. 少なくとも, Linux Mint 18.3 の Wine では動きませんでした.
*1
Create a package for Windows(翻訳済み) − Kivy 1.10.0 ドキュメント:
では kivy.deps になっている. 以前はそうだったのかもしれない.
*2
作製環境でこのサンプルを動かした場合,
- libmpg123-0.dll
- libcrypto-1_1.dll
- libssl-1_1.dll
- libvorbis-0.dll
- libvorbisfile-3.dll
- libwebp-7.dll
- libtiff-5.dll
- libopus-0.dll
- libopusfile-0.dll
- libmodplug-1.dll
- libFLAC-8.dll
- libogg-0.dll
- tcl86t.dll
- tk86t.dll
- sqlite3.dll
参考ページ
Create a package for Windows(翻訳済み) − Kivy 1.10.0 ドキュメント: KivyのGUIアプリをNuitkaで簡単に小サイズ・高速に動く実行ファイル(exe)にする(Windows10) Packaging Kivy apps written in Python 3, targeting Windows using Nuitka
19/12/17 追記: 無くても動く dll を列挙した.