私は以前、PyInstaller を使ったパスワード生成ツールを作成し、以下の記事で紹介しました。

この記事では、Pythonのアプリをより安全に配布するためにNuitkaをWindows 11の環境でセットアップして実行ファイルを作成するまでの流れを紹介します。

今回は「改ざんリスクを下げたい」という目的から、ChatGPTに相談してC++にコンパイルされるNuitkaを試すことにしました。
セットアップには時間がかかりましたが、動くまでの過程を整理することで、同じ環境で試す方の参考になればと考えています。
この記事は2025年11月に確認した内容です。

この記事で分かること

  • NuitkaとPyInstallerの違い
  • Windows 11で Nuitkaを動かすためのセットアップの注意点
  • PowerShellでMSVCを正しく有効化する方法
  • 実行ファイルを生成する手順
  • セットアップでつまずきやすいポイントの整理

Nuitkaとは?

NuitkaとはPythonコードをC++に変換してコンパイルするツールです。
読み方は「ニュイカ」です。
Pythonをそのままバンドルする方式と異なり、内部のコードが直接見えにくくなり、解析や改ざんをされにくい特徴があります。
Nuitkaの詳しい説明は下記のサイトを見てください。
https://nuitka.net/

PyInstallerとNuitkaの比較

Nuitkaを使い始める前にPyInstallerと比較して特徴を整理します。
どちらを使うかは目的によって異なりますが、私の場合は配布時の安全性を優先したいという考えがあります。

NuitkaはPythonコードをC++に変換してコンパイルするため、ソースコードが解析されにくく、改ざんされにくい特徴があります。
PythonをそのままバンドルするPyInstallerと比べると、内部構造への耐性が高い点が魅力です。

項目PyInstallerNuitka
配布形式PythonをバンドルC++にコンパイル
改ざん耐性低い高い
ソース解析リスク高い非常に低い
導入の簡易さ非常に簡単準備がやや難しい
対応環境Windows/Linux/MacWindows/Linux/Mac
ビルド速度速い遅め
配布形式onedir / onefileonedir / onefile
必要知識少ないC++ ビルド環境が必要

PyInstallerは手軽ですが、解析耐性という点では弱さがあります。
そのため、ChatGPTに相談し、無償で利用できるNuitkaを試してみようと判断しました。
今回は、自分が以前作成した以下のパスワード生成ツールについてNuitkaを使ってて実行ファイル化する流れを説明します。
https://github.com/ojichiku/public-python-samples/tree/main/samples/password-generator-cli

使用した環境

今回の作業で使用した環境は次の通りです。

  • Windows 11
  • Python 3.13
  • uv
  • VSCode
  • Visual Studio Build Tools 2026

Visual Studio Build Tools のセットアップ

Nuitkaを使うためには、C++のビルド環境が必要で、私が使用したのはVisual Studio Build Tools 2026です。
ここでは、実際に行ったセットアップ手順のポイントをまとめます。

Visual Studio Build Toolsを次のリンクからダウンロードします。
https://visualstudio.microsoft.com/ja/downloads/?q=build+tools

Visual Studio Build Toolsは次の赤枠からダウンロードできます。

ダウンロードインストーラを起動し、次のようにインストールオプションで「C++ によるデスクトップ開発」を選択、追加で「Windows 11 SDK」を選択してインストールします。
インストールサイズは11GB以上あるため、インストールには時間がかかります。

インストール完了後、スタートメニューからx64 Native Tools Command Prompt for VSを開きます。
コマンドプロンプトが開いたら、次のようにclコマンドを実行します。

cl

次のようにバージョン情報が表示されれば、C++コンパイラのセットアップは完了です。

uvでPython環境を準備する

次に、Pythonの仮想環境をuvで作成します。
使用するGitHubリポジトリは次のURLです。
https://github.com/ojichiku/public-python-samples

最初に次のコマンドを実行して仮想環境を作成します。
Nuitkaが対応しているのはPython3.13までのため、Pythonバージョンを指定することが重要です。

cd samples/password-generator-cli
uv venv --python 3.13
# コマンドの実行後、次のように表示されればOKです
Using CPython 3.13.9
Creating virtual environment at: .venv
Activate with: .venv\Scripts\activate

次に仮想環境を有効にするため、次のコマンドを実行します。

.venv\Scripts\activate

仮想環境を有効にしたら、次のコマンドを実行してNuitka と必要パッケージをインストールします。

uv pip install nuitka ordered-set zstandard
# コマンド実行後、次のように表示されればOKです
Resolved 3 packages in 193ms
Installed 3 packages in 256ms
 + nuitka==2.8.6
 + ordered-set==4.1.0
 + zstandard==0.25.0

ここまででPythonの実行環境とNuitkaのセットアップが完了します。

Nuitka を使ってPythonスクリプトを実行ファイル化する際、Windowsでは、MSVC(Microsoft C++ コンパイラ)を正しく読み込む必要があります。
私が実際に作業した中で、最もつまずいたポイントがここでした。
PowerShellでは、clが直接使えないため、vcvars64.batを読み込んでコンパイラ環境を有効にします。

Nuitkaでビルド

MSVCがインストールできたので、次のコマンドを実行しました。
(Nuitkaで指定するオプションは、Nuitka主要オプションを見てください。)

uv run python -m nuitka --standalone --output-filename=passgen.exe --msvc=latest  password_gen.py

実行した後、次のようにエラーメッセージが表示されてビルドに失敗します。

FATAL: Error, cannot locate suitable C compiler. You have the following options:

a) If a suitable Visual Studio version is installed (check above trace
   outputs for rejection messages), it will be located automatically via
   registry. But not if you activate the wrong prompt.

b) Using "--mingw64" lets Nuitka download MinGW64 for you. Note: MinGW64
   is the project name, it does *not* mean 64 bits, just a gcc with better
   Windows compatibility, it is available for 32 and 64 bits. Cygwin based
   gcc e.g. do not work.

FATAL: Failed unexpectedly in Scons C backend compilation.
Nuitka:WARNING:     Complex topic! More information can be found at https://nuitka.net/info/scons-backend-failure.html
Nuitka-Reports: Compilation crash report written to file 'nuitka-crash-report.xml'.

原因が不明なため、ChatGPTに質問したところ、Visual Studioの仕様であり、MSVCのPATHが自動で追加されないためであると回答がありました。
解決策を聞いたところ、vcvars64.batを呼び出した後、実行することで正常にビルドができました。

$vcvars = "C:\Program Files (x86)\Microsoft Visual Studio\18\BuildTools\VC\Auxiliary\Build\vcvars64.bat"
cmd /c "`"$vcvars`" && uv run python -m nuitka --standalone --output-filename=passgen.exe --msvc=latest  password_gen.py"

ビルド後のファイル

ビルドが完了すると、次のような構成で出力されます。

password_gen.dist
 └ passgen.exe
 └ 内部で必要な DLL など

distフォルダごと移動すれば、どこでもpassgen.exe を実行できます。
このように standaloneを使用することで、Pythonがインストールされていない環境でも動かせる実行ファイルを作成できます。

Nuitka主要オプション

今回の実行ファイル作成で使用したオプションと今後のツール開発で必要になりそうなオプションをまとめます。

オプション説明
–standalonePython なしで実行できるフォルダ構成を作成する
–msvc=latestVisual Studio Build Tools の MSVC を使用する
–output-filename生成する EXE 名を指定する
–output-dir出力先フォルダを指定する
–include-data-file外部ファイルを含めたいときに使用する
–include-plugin-directory外部ライブラリを追加したいときに使用する

今回使用したオプションは、–standalone、–msvc=latest、–output-filenameの3つです。
これらを組み合わせることで、Python のない環境でも動く実行ファイルを作成できました。

まとめ

Nuitkaのセットアップは簡単ではありませんが、C++ にコンパイルされることでソース解析や改ざんのリスクを抑えられる点が魅力です。

最初はMSVC の扱いに苦戦して時間がかかりましたが、仕組みを理解できれば再現性のあるビルドができるようになります。
一度流れが固まると、ほかのツールにも応用しやすくなります。

今後もuvとNuitkaを組み合わせて、さまざまな Python アプリを作成しようと考えています。
この記事が同じように Pythonアプリの配布方法を考えている方の参考になればうれしいです。