今回掘るテーマ
ある日、モグラ先生が地下研究所でひと言。
「最近の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
モグラ先生の小さな穴掘りポイント💡
- pandas を含む場合は
--enable-plugin=pandas
を付けると依存DLLも自動収集してくれるよ。- 数値系は numpyプラグインも併用するとトラブル減! (Issue when including Pandas library. · Issue #557 · Nuitka … – GitHub)
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は手間をかけただけの価値アリ。みんなも自分のプロジェクトで試してみよう!🪹」