PythonのコードをEXE化するには? PyInstallerやその他ツールの特徴や使い方
thumb_pythonexebuilder_01
PythonのコードをEXE化するには? PyInstallerやその他ツールの特徴や使い方
アンドエンジニア編集部
2024.02.09
この記事でわかること
Pythonは、簡単に始められるインタープリター型のプログラミング言語です
コードをEXE化すると、実行するPCにPythonの環境が不要となり、操作が簡略化できます
EXE化にはツールが必要で、要望に合わせて色々なツールが公開されています

PythonのコードをEXE化する

img_pythonexebuilder_01

Pythonは、簡単に始められるプログラミング言語の1つです。インタープリター型であるPythonスクリプトのコード開発には、数多くの公開ライブラリが活用できます。

Pythonでは開発したスクリプトコードを配布して利用できますが、ターゲット環境にもPythonが必要であり多少の準備が必要です。コンパイラ言語のようにEXEファイルを配布したい場合もあるでしょう。ここでは、PythonのコードをEXE化して利用する方法を解説します。

【入門編】Pythonでできることは?基本知識や実用例を解説

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化するツールを比較する

img_pythonexebuilder_02

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化ツールは利用者の多いものから使ってみる

img_pythonexebuilder_03

本記事では、色々な PythonのEXE化ツールを紹介してきました。ツールはそれぞれ特長がありますが、決めきれない場合は、やはり利用者が多いツールをまず使ってみるのが、効率的です。

最初に紹介したPyInstallerは、万能型で主要OSに対応し簡単に利用できます。もちろん余裕がある方はPyInstaller以外も、操作方法や機能を試してみて自身に合うものを見つけることをおすすめします。

【入門編】Pythonの基本構文まとめ!学習方法や年収も解説
気になる人のXをフォローしよう!
アンドエンジニア公式LINEでは
新着記事やエンジニアに役立つ情報をお届け!
日々のキャッチアップをお手伝いします!
マイナビITエージェント

編集部オススメコンテンツ

Sponsored
【無料個別転職相談会】アプリケーションエンジニア向け!リモート・在宅勤務で働きたい方へ
マイナビITエージェント
Sponsored

アンドエンジニアへの取材依頼、情報提供などはこちらから

お問い合わせ・情報提供
はじめて転職される方へ
SE・システムエンジニア(IT/通信/インターネット) 求人一覧

編集部おすすめコンテンツ

Sponsored
【無料個別転職相談会】アプリケーションエンジニア向け!リモート・在宅勤務で働きたい方へ
マイナビITエージェント
Sponsored

アンドエンジニアへの取材依頼、情報提供などはこちらから

Powered by マイナビ AGENT