🔥

python軽量exeライブラリNuitkaが本当か検証してみた。

2023/01/09に公開
2

はじめに

以前、「pyinstaller」でexe化する方法をご紹介しました。
https://zenn.dev/momiji777/articles/2e733826b32fa6
https://www.youtube.com/watch?v=4IbA14BPQTI

今回は、「Nuitka」というライブラリを用いて作成します。

仮想環境を作成し、ライブラリをインストール

python -m venv exe
.\exe\Scripts\activate
pip install nuitka

exe化するプログラムを作成

実際にexe化していくために、簡単なアプリを作成します。

import tkinter
import tkinter.ttk as ttk

class Application(tkinter.Frame):
    def __init__(self, root):
        super().__init__(root)
        root.title('Sample')
        root.geometry('400x300')
        self.set_widgets(root)

    def set_widgets(self, root):
        select_list = ['SelectA', 'SelectB']
        combobox = ttk.Combobox(root, values=select_list)
        combobox['values'] = ['SelectA', 'SelectB']
        combobox.pack()
        button = tkinter.Button(text="表示",command=lambda:print(combobox.get()))
        button.pack()

def main():
    root = tkinter.Tk()
    app = Application(root)
    root.mainloop()

if __name__ == "__main__":
    main()

作成したプログラムの実行結果はこんな感じになります。

exe化

実際にexe化てみます。まずは、nuitkaで作成してみます。

nuitka hello.py

pythonを保有していないかたも利用できるようにするにはオプションを付ける必要があります。
また、今回は、tkinterを利用しているために。オプションで私用するライブラリを指定する必要があります。

利用するオプション

オプション名 詳細
--standalone pythonが入っていないファイルでも起動できるようにします
--enable-plugin= =の先を利用するライブラリを指定します。--plugin-listをすることで標準で利用できるプラグインを確認することができます
--onefile ファイルを一つにまとめることができます
nuitka --onefile --enable-plugin=tk-inter --standalone test.py

以下のように、exeファイルが作成されました。

作成されたファイルの大きさは、約24MGです。

pyinstallerと比較

軽量化exeと巷で言われている「Nuitka」ですが、本当に軽量化されているか比較してみます。

ライブラリをインストール

pip install pyinstaller

exe化

pyinstaller test.py --hidden-import=tk-inter --onefile

distというディレクトリの中にexeが作成されます。

軽量化といわれている通り、今回検証した結果は「Nuitka」の方が軽量でした!

結果

やり方が誤っておりましたら、コメントでご教示頂けると幸いです。

Nuitka Pyinstaller
8,710KB 24,382KB

Discussion

negitnegit

検証ありがとうございます。
『軽量化といわれておりますが、今回検証した結果は「Nuitka」の方が軽量でした!』
とありますが、ここは「Pyinstaller」の間違いでしょうか?

masonmason

記事ありがとうございます。参考になりました。
2024/8/11に追随してみたところ、Nuitkaのほうが25%ほど小さいファイルが生成されました。
PyInstaller 10,827 KB, Nuitka 7,966 KB
環境の違いなどあるかもしれません、今回試した環境は以下の通り:
Nuitka: 2.4.5
PyInstaller: 6.10.0, contrib hooks: 2024.8
Python: 3.12.4 (Windows 11)