【初心者向け】KivyによるWindowsアプリ作成16 プログラムのWindows実行ファイル化

前回の予告通り、今回はこれまで作成したKivyプログラムを、Kivy未導入の環境でも実行できるよう、Windows実行ファイル形式に変換する方法を紹介したいと思います。

変換方法は公式サイトに記載の手順も参考にしていますが、公式サイトでは実行ファイル化の際に、必要なファイル群をバラバラに生成する手順を採用している一方、本記事ではすべてを一つのファイルにまとめる手順を採用しています。そのため、手順上、だいぶ異なる箇所がありますが、興味がある方は公式サイトもご一読頂ければと思います。

なお、今回紹介する方法はPythonプログラム全般に適用できる方法ですので、ほかのプログラムを作成する機会がありましたら、ぜひお試しください。

そして、今回もGitHubにプログラムをアップしていますので、必要に応じてご覧頂ければと思います。

<スポンサーリンク>

PyInstallerパッケージの導入

まず第一に、PythonプログラムからWindows実行ファイルを作成するためには、「PyInstaller」というパッケージを追加する必要があります。Anaconda Prompt上でpipコマンドを使ってインストールしましょう。

(kivy) >pip install PyInstaller

Windows実行ファイルの作成

それでは、導入したPyInstallerを使って、経費申請アプリをWindows実行ファイル化していきたいと思います。手順は大まかに言うと以下の通りです。

①Pythonファイルの修正

②Specファイルの作成

③Specファイルの修正

④Windows実行ファイルの作成

①Pythonファイルの修正

まずはPythonファイルに対して、実行ファイル化のために必要な修正を行います。

最初に、必要なモジュールをインポートしておきます。既存のimport文の後ろに、以下の2行を追加して下さい。

from kivy.resources import resource_add_path
import sys

これらは、今から追加する記述の実行に必要なモジュールです。

続いて、今追加したimport文の後に、以下を追加します。

if hasattr(sys, "_MEIPASS"):
    resource_add_path(sys._MEIPASS)

2行ありますが、先に2行目を説明します。

まず、「resource_add_path」ですが、これはKivy独自のメソッドで、「resource_add_path(フォルダパス)」という記述で、Kivyプログラムに対して、kvファイルやフォントファイルなど、プログラム実行に必要なファイルを探すフォルダ対象に、フォルダパスで指定したフォルダを追加することができます。

次に「sys.MEIPASS」ですが、PyInstallerで(実行ファイルとして必要なファイル群をバラバラに生成するのではなく)1つのファイルとして実行ファイル形式化されたアプリを実行する際、テンポラリフォルダに本来生成すべきファイル群を展開の上、プログラムを実行します。このテンポラリフォルダのパスがsysモジュール内の「_MEIPASS」という変数に格納されます。

つまり2行目は、「プログラム実行時に、Kivyプログラムが、実行のために必要なファイル群が展開されるテンポラリフォルダにアクセスできるようにする」設定を行っています。

そして1行目に戻りますが、「hasattr(モジュール, 属性名)」という形式で、モジュールが指定された属性を持っているかチェックし、持っていればTrueを、持っていなければFalseを返すメソッドです。

ですので、sysモジュールに_MEIPASSが含まれている場合のみ2行目が実行されることになります。

なお、実行ファイル形式化されたアプリを実行するのみであれば、2行目だけあれば足りるのですが、Anaconda Promptから直接プログラムを起動したり、Atom-runnerにより直接実行する場合はsys._MEIPASSが存在しないため、エラーとなってしまいます。そこで、一応1行目を入れて、直接実行もできる形にしています。

②Specファイルの生成

次に、PyInstallerを用いて、Specファイルというもののひな型を作成します。

Specファイルとは、プログラムを実行ファイル形式化する際の仕様をまとめたファイルです。これは一旦ひな型を作成しておき、そのファイルを修正した上で実行ファイル化を行うことで、正しく動作するアプリを作成することができます。

さて、生成方法ですが、Anaconda Prompt上でmain.pyが保存されているフォルダに移動し、以下のコマンドを叩いて下さい。

(kivy) >PyInstaller --name expense --onefile --noconsole main.py

このコマンドの基本形は「PyInstaller main.py」ですが、3つほどオプションを設定しています。

まず、「–name expense」ですが、生成する実行ファイルの名称を「expense」にしています。

次に、「–onefile」ですが、これは前述の通り、実行ファイル群をバラバラに生成するのではなく、1ファイルにまとめるための指定です。

最後に「–noconsole」について、このオプションを指定しないと実行ファイル化したファイルを起動する際、コンソールが立ち上がってしまいます。これを防ぐために使用するオプションです。

③Specファイルの修正

②を実行すると、「expense.spec」というファイルが生成されているはずです。このファイルをテキストエディタで開き、内容を一部修正しましょう。

まず、実行ファイルに含む対象とすべき一部のモジュール(sdl2とglew)を、import文により指定します。

# -*- mode: python -*- 
from kivy.deps import sdl2, glew #追加
block_cipher = None

次に、実行に必要となる外部ファイル2つ、ipaexg.ttf(フォントファイル)とexpense.kv(Kvファイル)が実行ファイルに含む対象となるよう設定します。

a = Analysis(['main.py'],
             pathex=['C:\\Users\\kodai\\Documents\\Python Scripts\\kivy_project\\16'],
             binaries=[],
             datas=[('ipaexg.ttf', '.'),('expense.kv', '.')], #修正
             hiddenimports=[],
#省略

さらに、sdl2とglewの依存パッケージを実行ファイルへの取り込み対象とします。

exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          *[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)], #追加
#省略

④Windows実行ファイルの作成

さて、事前準備が長くなりましたが、ここでようやく実行ファイル作成に移ります。

PyInstallerではSpecファイルを指定して実行することにより、Windows実行ファイルを作成することができます。

Anaconda Prompt上で、以下のコマンドを叩いて下さい。

(kivy) >PyInstaller expense.spec

しばらく待つと、distというフォルダの中にexpense.exeが作成されると思います。これが最終的なWindows実行ファイルです。

あとはこのファイルをお使いのPCで実行してみたり、他のKivy未導入の環境にコピーして実行したりして、正しくアプリが作成されたことを確認してみましょう。

終わりに

経費申請アプリの作成については今回を以てすべて終了です。正しく動くWindows実行ファイル形式のアプリは作成できましたでしょうか。

さて、次回以降はテーマを変えて、もう少しKivyの使い方について紹介していきたいと思います。

<スポンサーリンク>

シェアする

フォローする