post Image
KivyのGUIアプリをNuitkaで簡単に小サイズ・高速に動く実行ファイル(exe)にする(Windows10)

環境

OS: Windows 10
Pythonのバージョン: 3.6.3

Kivyを使ったGUIアプリを実行ファイルにする手段

以下のツール・パッケージを使ってPythonスクリプトを実行ファイルにすることができます。

  • PyInstaller(Kivyが推奨している)
  • Cx_Freeze
  • Nuitka(Pythonコンパイラ)
  • その他

今回はNuitkaを使います。

参考:

なぜNuitka?

小サイズ

PyInstallerで生成されたexeファイルとNuitkaで生成されたexeファイルのファイルサイズを比べると、
その差は歴然です。

PyInstaller Nuitka
ファイルサイズ 18355KB 256KB

PyInstallerだとちょっとしたスクリプトだけでもMB単位になってしまいますが、
Nuitkaなら気にする必要がなさそうです。

高速

PythonスクリプトをCに変換してから実行ファイルにしているので高速に動きます。

やってみよう

Nuitkaをインストールする

http://nuitka.net/pages/download.html
↑のリンクからダウンロードできますが、
今回はpipでインストールします。
pip install nuitka または python -m pip install nuitka

Cコンパイラをインストールする

C11をサポートするコンパイラ、またはC++03をサポートするコンパイラが必要です。
– gcc
– clang
– MinGW64
– Visual Studio 2017
のどれか1つをインストールしてください。
http://nuitka.net/doc/user-manual.html#requirements
今回は Visual Studio 2017を使用しました。

Kivyアプリを実行ファイル化する

例として以下のスクリプト(main.py)を実行ファイルにします。

main.py
from kivy.app import App
from kivy.uix.label import Label


class MyApp(App):
    def build(self):
        return Label(text="Hello world")


if __name__ == "__main__":
    MyApp().run()

nuitkaでは以下のコマンドを使って実行ファイルにできます。
nuitka --recurse-none 実行ファイルにしたいスクリプトの場所
この例ではmain.pyを実行ファイルにしたいので、このようにします
nuitka --recurse-none main.py
実行すると、pythonxx.dll(xxはpythonのバージョン)と実行ファイルが生成されるはずです。

コンソール(コマンドプロンプト)を非表示にする

実行ファイルはできましたが、このまま起動するとコンソールも表示されてしまいます。
コンソールを表示しないようにするには
--windows-disable-consoleオプションをつければ非表示にできます。
例:nuitka --recurse-none --windows-disable-console main.py
上記のコマンドで生成された実行ファイルを起動してみます。
すると…

何も起こりませんね。

nuitkaでコンソールを非表示にして起動するには、コンソールに何も出力しないようにする(kivyはログをコンソールに出力する)必要があります。

これを解決するには、stdin, stdout, stderrを出力しないようにリダイレクトします。
このようにコードに記述します。

main.py
# --↓のコードを追加する--
import os
import sys

f = open(os.devnull, 'w')
sys.stderr = f
sys.stdout = f
sys.stdin = f
# ------------------------

from kivy.app import App
from kivy.uix.label import Label


class MyApp(App):
    def build(self):
        return Label(text="Hello world")


if __name__ == "__main__":
    MyApp().run()

そしてもう一度nuitka --recurse-none --windows-disable-console main.pyで実行ファイルを生成します。
起動すると、コンソールが非表示でウィンドウが表示されるはずです。

配布時の注意(Windowsの場合)

Pythonがインストールされていない環境(*要検証)で
生成された実行ファイルを動かすには、

  • pythonxx.dll(xxはpythonのバージョン)
  • vcruntime140.dll
  • pythonxx.zip

※(Pythonをインストールしてあるディレクトリや、Python公式の埋め込み用PythonのZipファイルに含まれているので、そこから入手できますhttps://www.python.org/ftp/python/3.7.1/python-3.7.1rc1-embed-amd64.zip リンク先は64bit版のファイルです)

が必要です。同じディレクトリに置いておきましょう。


『 Python 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。