pythonアプリの単一実行ファイル(app,exe化)を作って配布する方法

前回まで、QMLを使ったpythonアプリの作り方や、そのアプリにリソースファイルを埋め込む方法について解説してきました。

元々、pythonでGUIアプリを作る目的として「マルチプラットフォーム」で、一回、ソースを書けば、同じソースからWindows、Mac、Linuxにアプリを配布できることをメインにしていたので、いよいよ、最後の実行形式のファイルを作る工程になります。

作成したアプリを配布する際に、使ってもらう人に、指定したバージョンのpythonをインストールしてもらって、pipでライブラリも用意してもらって。。。なんて、いちいちやってもらえないですよね。

実行ファイル形式にすると、pythonの実行環境とライブラリをまとめることができるので、そんな準備をしてもらわなくても、作成したアプリをどこかのディレクトリに置くだけで実行してもらえます。

ちなみに、前回までの記事はこちら ↓ ↓ ↓

Qt for Python(PySide2)をQMLで開発するための環境構築Qt for Python(PySide2)をQMLで開発するための環境構築 QMLやアイコンなどのファイルもリソースとしてpythonアプリの実行ファイル形式(exe化)に含める方法QMLやアイコンなどのファイルもリソースとしてpythonアプリの実行ファイル形式(exe化)に含める方法

実行ファイル形式を作るための2つの方法

さて、実行ファイル形式を作るためもいくつか方法がありますが、それぞれ特徴があるので、どのように配布したいかによってどれを選ぶかも変わってくると思います。

私がいくつか試したうちWindowsにもMacにも「使えるな」と思ったのは「pyinstaller」と「cx_Freeze」の2つでした。

それぞれの特徴は以下のような感じです。

  • pyinstaller・・・かなり活発に開発されている。シングル形式(一つのファイル)でも実行ファイル形式を作れるので、配布にも便利。作成したファイルを起動するのが少し遅い(10秒程度)。
  • cx_Freeze・・・シングル形式の実行ファイル作成には対応していないのが残念。ただ、起動が速いexe、appを作れる点は良い。

pyinstallerでのexe化手順

pyinstallerでexe化するには、まず、pipでpyinstallerをインストールします。

pip install pyinstaller

で、プロジェクトのフォルダに移って、

pyinstaller main.py --onefile --noconsole

と実行すればOKです。

オプションの意味ですが、「–onefile」は1つの実行ファイル形式にまとめるオプション、「–noconsole」は、コンソールなしでアプリを立ち上げるオプションです。このオプションが無いと、アプリを起動したときにコマンドプロンプトも起動されます。

さて、このままエラーなく作成が進むと、\<プロジェクトフォルダ>\distに、「main.exe」ができます。

また、同時にプロジェクトフォルダにmain.specもできますが、これは実行ファイルを作るときに使われたオプションなので、次回から「pyinstaller main.spec」でもexeが作成できます。

細かいオプションはこのファイルに指定するのもメンテしやすいと思います。

通常はこのまま配布できますが、Qt for Pythonのアプリをpython3.6で実行ファイル形式にすると、エラーが出てしまいました。

幸い、ココで議論されていて、ココにパッチされたソースがありますので、これを使うと、エラーなく実行ファイル形式にできました。

cx_Freezeでのexe化手順

pyinstallerだとやっぱり起動時間がかかるのが気になる、、という場合は、cx_Freezeでexe化してもいいと思います。

シングルファイルにはできませんが、UPXなどのexeファイルを実行可能な形式で圧縮するソフトを使うと、1ファイルで配布できます。

圧縮されるので、実行時に解凍される分、若干時間がかかりますが気になるほどではありませんでした。上記のpyinstallerと比較してみると良いと思います。

さて、cx_Freezeのインストールにもpipを使います。

pip install cx_Freeze

でインストールしたら、「setup.py」というファイルを作ります。

import sys
from cx_Freeze import setup, Executable
 
base = None
 
if sys.platform == 'win32':
    base = 'Win32GUI'
# CUIの場合はこのif文をコメントアウトしてください。
 
exe = Executable(script = "main.py", base= base)
# "main.py"にはpygameを用いて作成したファイルの名前を入れてください。
 
setup(name = 'your_filename',
    version = '0.1',
    description = 'converter',
    executables = [exe])

作成したら、以下のコマンドでexe化できます。

python setup.py build

まとめ

いかがでしたか?3回にわたってpythonで実用的なGUIアプリを作って配布する方法をご紹介してきました。

pythonは人気の言語で、AIやVRなどのライブラリも豊富です。ぜひ、楽しくて役に立つアプリをたくさん作って広めてください!