PythonのコードをEXE化する
Pythonは、初心者でも簡単に習得できるプログラミング言語の1つです。インタープリター型であるPythonスクリプトのコード開発には、数多くの公開ライブラリが活用できます。
Pythonでは開発したスクリプトコードを配布して利用できますが、ターゲット環境にもPythonが必要であり多少の準備が必要です。コンパイラ言語のようにEXEファイルを配布したい場合もあるでしょう。
そこで、ここではPythonのコードをEXE化して利用する方法を解説します。
PythonのコードをEXE化するメリット
PythonのコードをEXE化するメリットですが、次の3点を紹介します。
1つ目は、ターゲットとなる実行環境にPythonが不要である点が挙げられます。ソフトウェア開発者はPythonの開発環境を用意している場合が多いですが、ユーザ環境やオペレータ向けの環境では開発環境を導入することができません。
この場合でもEXE化しておけば、開発したコードを配布し利用できるメリットがあります。
2つ目は、ソフトウェアの実装部分などアルゴリズムやコード自体の流出を防止することです。Pythonのコードはインタプリタ言語であるため、ファイルの中身を見るとソフトウェアの構造が分かってしまいます。
使用許諾を設定できるものの、編集や修正で簡単に組み込まれてしまいますので、ソースプログラムの開示を防ぎたい場合に有効です。
3つ目としては、実行手順が簡略化できるメリットがあります。実行ファイルをダブルクリックするだけで起動しますので、アイコンを設定するなどして分かりやすく、複雑な操作をせずに実行する実行環境が簡単に構築できます。
PythonのコードをEXE化するデメリット
Pythonはインタプリタ言語であり、ソースコードを機械語に解釈しながら実行します。そのため、どのOSでも同じコードが実行できるメリットがあります。
コードをEXE化する場合は、Windows版のEXEコード、macOS版のEXEコードなどのように、実行互換性が同一OSに限定されてしまうデメリットがあります。OS毎にEXEコードを準備する必要がありますので、実行環境は簡単に準備できるものの配布する手間が増えてしまいます。
そして実行時に不要なライブラリを含んで読み込むために、処理が遅くなる場合もあります。このこともデメリットとして挙げられる点です。
PythonのコードをEXE化するツール
PythonのコードをEXE化するには、コードの変換ツールをPython環境に追加導入して使用します。具体的には、PyInstaller・py2exe・py2app・Nuitka・cx_Freeze・PyOxidizerなどのツールが公開されており、お気に入りのツールを準備します。詳細は以降で解説していきます。
PythonのコードをEXE化するツールを比較する
PythonのコードをEXE化するツールは、いくつかあります。使用中の環境でニーズに合うものを比較すると良いでしょう。以降では、それぞれのツールの特徴を踏まえて解説します。
PyInstaller
PythonのコードをEXE化する際の第1候補のツールです。実行時のオプションが多数実装されており、実際にEXEファイルを配布する際にもニーズに合う実行ファイルを生成することができます。
WindowsやmacOS、GNU/Linux・AIMやSolarisなど多数の環境で動作します。弱点としては、ファイルサイズが大きめである点が挙げられます。
インストールするには、次のようにpipからインストールします。
pip install pyinstaller
基本的な実行方法は以下のように、pyinstallerコマンドでEXE化するPythonファイル名を引数として渡すだけです。
pyinstaller EXE化するPythonファイル.py
PyInstallerは、スクリプトコードと同じフォルダに ”.spec”ファイルを作成し、”build”と”dist”のフォルダを生成します。EXE化したファイルは、”dist”フォルダに格納されます。追加するオプションは多数ありますが、”--onefile”や”--noconsole”などを選ぶ場合があります。
”--onefile”は、実行ファイルを1つに集約するオプションです。再配布する場合などに使用します。
”--noconsole”は、WindowsとmacOS向けのオプションで、コマンド入力のコンソールウィンドウを表示しないオプションです。”.pyw”のGUIでは”--noconsole”のオプションは影響しません。
オプションの指定方法は、次の通りです。
pyinstaller EXE化するPythonファイル.py --onefile --noconsole
”--onefile”は、単一ファイルですがファイルサイズが大きくなります。軽量化する場合は、デフォルト設定を用います。
【参考】:PyInstaller 【参考】:PyInstaller Requirements 【参考】:PyInstaller Using PyInstaller
まずはPyInstallerを使ってみて、用途に合わない場合はPyInstaller以外のツールを試してみるのが良いでしょう。
py2exe
py2exeは、Windowsの実行ファイルを作成するツールです。Python 3とPython 2向けのバージョンが、それぞれ公開されています。
インストールは、次のようにpipから行います。
pip install py2exe
使用するには、事前にセットアップ用スクリプト(setup.py)を用意しておきます。記述方法は次の通りです。
from distutils.core import setup
import py2exe
setup(console=['EXE化するPythonファイル.py'])
実行方法は次のように行います。
python setup.py py2exe
EXE化したファイルは、必要となるモジュールすべてが ”dist”フォルダに格納されます。このフォルダを圧縮するなどして、再配布します。なおソースのコンパイルはMicrosoft Visual Cが使用されるため、実行環境にはMicrosoft Visual CのランタイムDLLが必要です。
【参考】:py2exe 【参考】:GitHub py2exe 【参考】:py2exe Tutorial
py2app
py2exeがWindows版であったのに対して、py2appはMac版(macOS)で動作する実行ファイルを作成します。インストール手順には、次のように大きな違いがありません。
pip install py2app
使用するにはpy2exe同様に、事前にセットアップ用スクリプト(setup.py)を用意しておきます。py2app 0.3からは、それまでのdistutilsではなく、setuptoolsを使用します。記述方法は次の通りです。
from setuptools import setup
setup(
app=["EXE化するPythonファイル.py"],
setup_requires=["py2app"],
)
実行方法は次のように行います。
python setup.py py2app
配布するには、”dist”フォルダをアプリケーションバンドルとして使用します。EXE化するPythonファイル.appが生成されます。“build”フォルダに作業の生成物(残骸)が残りますがこちらは使いません。再配布する場合は、Finderから生成されたアプリを右クリックし、「Create Archive」を選びます。
【参考】:py2app 【参考】:py2app Installation 【参考】:py2app Tutorial
py2appの場合は、動作しないなどうまくできない例も挙げられていますので、利用する場合はじっくりと取り組む必要がありそうです。
Nuitka
Nuitkaは、Pythonコンパイラと称しているツールです。Pythonで書かれた最適化コンパイラです。Python Version 2.6や 2.7、そして3.3以降の多数のバージョンに対応し、完全互換があります。
具体的には、PythonのコードをC言語のソースコードにコンパイルするため、別途MinGW64やVisual Studio 2022、gcc・clangなどのCコンパイラが必要です。
Nuitka Standardという通常版の他に、商用版のNuitka Commercialが提供されています。WindowsやmacOS、Linux・FreeBSD・NetBSDに対応します。ソースコードからソースコードへの変換を行い実行ファイルを作成するために、実行ファイルのサイズは小さくなる傾向があります。
次のようにpipからインストールします。
pip install nuitka
実行方法は、次の通りです。
python -m nuitka EXE化するPythonファイル.py
実行時には、Cキャッシングツール(Cコンパイラ)が聞かれます。Visual StudioのMSVCがインストールされている場合以外は、MinGW64ベースのCコンパイラをダウンロードするよう表示されます。
実行時のオプションは、”--onefile”で1つに集約され、”--standalone”で”.dist”フォルダに分けて格納されます。いずれかの方法で配布モジュールを作成します。なお関連モジュールの追加は、”--enable-plugin”で指定します。
指定が必要な場合は、Nuitkaの実行時のメッセージに「WARNING」が表示されます。この表示に従って、オプションを追加します。
【参考】:Nuitka 【参考】:GitHub Nuitka 【参考】:Nuitka User Manual
cx_Freeze
cx_Freezeは、20年ほどの長い実績があり、多くのバージョンがあります。そのため、Pythonのバージョンに対応した、cx_Freezeのバージョンを選ぶ必要があります。ファイルサイズは比較的小さめです。
次のようにpipからインストールします。
pip install cx_Freeze
このツールもセットアップスクリプトが必要です。”cxfreeze-quickstart”で簡単なセットアップスクリプトが生成されますので、これを修正するのが良いでしょう。実行方法は次の通りです。
cxfreeze -c EXE化するPythonファイル.py --target-dir dist
この場合は、”dist”フォルダに実行モジュールが格納されます。フォルダ名は任意に決定することができます。
【参考】:cx_Freeze 【参考】:cx_Freeze Installation 【参考】:cx_Freeze Using cx_Freeze 【参考】:cx_Freeze cxfreeze script 【参考】:cx_Freeze Setup script
PyOxidizer
PyOxidizerは、Pythonのアプリケーションのパッケージングや再配布のためのツールです。Python 3.8・3.9・3.10でサポートされます。それ以前のPythonは組み込みPythonインタプリタ制御のC APIが含まれないため対応しません。
OSは、Windows・macOS・Linuxに対応します。対応OS上で動作するCコンパイラを用いて、実行ファイルを生成します。WindowsではVisual Studio、macOSではXcodeとclangを用いるのが一般的です。
Rust言語がPythonのコード実行や管理を担当します。Rustのプロジェクトを既存あるいは新規に作成してコードを変換します。使用する前にRust 1.61以降をインストールしておきます。Rustのビルドシステムを使うため、ファイルサイズが大きくなる傾向があります。
インストール方法は他のツールと同様にpipを用います。
pip install pyoxidizer
実行するには、最初に”pyoxidizer init-config-file フォルダ”で指定フォルダにPyOxidizer設定ファイルを作成します。その後指定フォルダで”pyoxidizer run”を実行し、使用します。Pythonインタープリターの動作を、PyOxidizerがRustにより実行ファイルに変換します。
この手順は、Rustの知識が求められますので、若干敷居が高くなるでしょう。
【参考】:PyOxidizer 【参考】:GitHub PyOxidizer 【参考】:PyOxidizer Overview 【参考】:PyOxidizer Getting Started 【参考】:Rust
PythonのEXE化ツールは利用者の多いものから使ってみる
本記事では、色々なPythonのEXE化ツールを紹介してきました。ツールはそれぞれ特長がありますが、決めきれない場合は、やはり利用者が多いツールをまず使ってみるのが、効率的です。
最初に紹介したPyInstallerは、万能型で主要OSに対応し簡単に利用できます。もちろん余裕がある方はPyInstaller以外も、操作方法や機能を試してみて自身に合うものを見つけることをおすすめします。
その他Python関連記事
その他、Pythonに関連する内容は、下記の記事でもご紹介しています。ぜひ参考にご覧ください。
編集部オススメコンテンツ
アンドエンジニアへの取材依頼、情報提供などはこちらから