️PythonプログラムをEXE化に挑戦(Nuitka 2025年版)

IT

今回掘るテーマ

ある日、モグラ先生が地下研究所でひと言。
「最近のNuitkaは2.6系まで進化したらしいぞ。こりゃ深〜く掘って調べるしかない!」
こうして“もぐTech”編集部は、Pythonスクリプトをネイティブ実行ファイルに変換する最新の掘削ツールを探る旅に出たのでした。🐾


1️⃣ なぜ Nuitka?――前回のPyInstallerと比べて

PythonコードをC言語にトランスパイルし、さらにネイティブバイナリまで最適化してくれるのがNuitkaの強み。パフォーマンスもサイズも欲張りたいなら要チェックです。
最新の Nuitka 2.6.9(2025-03-28) は Python 3.13 まで対応し、Windows/macOS/Linux で動作します。 (Nuitka – PyPI, Nuitka the Python Compiler)

モグラ先生:
掘って見つけた! 「速度も守りたい」なら、Cに変換してくれるNuitkaは頼れる相棒だよ。🪹


2️⃣ 掘削準備:仮想環境&ツールセットアップ

2-1. 必要ツール

  • Python 3.9〜3.13(公式配布 or Anaconda どちらでもOK)
  • Cコンパイラ
  • Windows → Visual Studio Build Tools または Nuitkaが自動DLする MinGW-w64 GCC 14.x--mingw64指定) (Nuitka User Manual)
  • Linux/macOS → system gcc/clang でOK
  • Nuitka本体
  python -m pip install --upgrade nuitka zstandard

モグラ先生:
コンパイラが見つからないとNuitkaが勝手に“穴掘りシャベル(MinGW)”を拾ってきてくれるぜ。便利!

2-2. 仮想環境を作成

python -m venv .venv
.venv\Scripts\activate

2-3. 依存ライブラリをインストール

python -m pip install pandas requests

モグラ先生の小さな穴掘りポイント💡


3️⃣ 掘削開始!Nuitkaでビルド

3-1. スタンドアロンEXEを生成

python -m nuitka hello.py ^
  --standalone --output-dir=dist ^
  --mingw64 --show-progress ^
  --enable-plugin=pandas
  • --standalone:実行に必要なDLL/pycを同梱
  • --mingw64:MinGW-w64を強制使用(初回のみDL)
  • --output-dir:生成物の出力先

モグラ先生:
ここは落とし穴! 1回目は依存DLL探索でめちゃ時間がかかるけど、大体はキャッシュされるから2回目以降は速いよ。

3-2. ワンファイルにパッキング(一括配布向け)

python -m nuitka hello.py ^
  --onefile --standalone ^
  --enable-plugin=pandas --output-dir=dist_onefile

生成される hello.exe は自己展開型。起動時に一時ディレクトリへ展開する点だけ注意。

モグラ先生の小さな穴掘りポイント💡

  • ワンファイルは起動オーバーヘッドが少し増える。ベンチ&用途で使い分けよう。
  • さらにサイズを削りたい? --lto=yes --clang など最適化オプションで試行錯誤だ!

4️⃣ 重いライブラリ対策:ヒント付きコンパイル

Nuitka 2.x から追加されたHinted Compilationを使うと、実行ログを基に自動でプラグイン選択・データファイル収集を行ってくれます。

python -m nuitka hello.py --hinted-json-file=compile_log.json

1回目は“探索モード”でログを吐き、2回目に--resumeで最適なオプションを自動適用――なんて芸当も可能。

モグラ先生:
掘って見つけた! 「依存DLLが足りない!」エラーで泣く前に、Hinted Compilationを試すべし。🪹


5️⃣ (番外編)古典的コピー戦法はもう非常用

昔は --nofollow-imports で最小ビルド→手動で site-packages をコピーなんて荒業が主流でしたが、2.xではプラグインとパッケージ設定Yamlが充実。
どうしても手作業したい場合だけ参考にどうぞ。

python -m nuitka hello.py --standalone --nofollow-imports --output-dir=dist_min
# 生成フォルダに不足ライブラリを手動コピー …

モグラ先生:
とはいえ最新Nuitkaの自動収集の方が速いし正確。手動コピーは最終手段だね⛏️


まとめ 🐾

  • Nuitka 2.6系は2025年現在も活発更新中&Python 3.13対応!
  • --standalone ➡️ DLL込みフォルダ配布、--onefile ➡️ 自己展開EXE配布。
  • pandas / numpy など重量級ライブラリ--enable-plugin と Hinted Compilation でスムーズに。
  • コンパイルは重いけど、実行速度UP&配布がラクという“深掘りメリット”は大きい。

モグラ先生:
掘って見つけた! Nuitkaは手間をかけただけの価値アリ。みんなも自分のプロジェクトで試してみよう!🪹」

タイトルとURLをコピーしました