PythonアプリをNuitkaでexe化してみた…使い方・注意点まとめ

Pythonアプリをexe化してみました。

使ったのは Nuitka というツールです。

  • Pythonコードのexe実行ファイルへの変換、
  • コンパイルに失敗する場合の回避策、
  • 実際にexe化したのを動かした感想…

そういうのを実体験としてまとめます。

NuitkaによるPython exe化はつぎの手順です。

1.対象となったPythonアプリのモジュール構成

まず対象となったPythonアプリについてです。

Python本体バージョンは3.6.0

ほぼ最新のものを使っていました。

また外部ライブラリも色々インストールしてます。
以下のようなモジュール構成となっています。

  • certifi 2021.5.30
  • numpy 1.19.5
  • opencv-python 4.6.0.66
  • PyQt5 5.15.6
  • PyQt5-Qt5 5.15.2
  • PyQt5-sip 12.9.1
  • wheel 0.37.1

PySide2とOpenCVを使用しています。

2.pip経由でNuitkaをインストール

uitkaのインストールはとても手簡単です。

単純にpipからパッケージインストするだけ

▼ このようなpipコマンド

▼ 無事Nuitlaのインストール完了

最新バージョンは 0.9.4 です。

3.Nuitka実行でpythonコードexe化を試したが…

早速Nuitkaを使ってpyをexe化してみます。

▼ Nuiktaによる実行ファイル化のコマンド例

▼ バイナリへのコンパイルが開始する

大体数分くらいかかりました(詳細は後述)

そして実行ディレクトリに以下2つが生成されます。

  • app.build (dir)
  • app.dist (dir)

実行ファイルはapp.distの方にあります。

▼ 実行できるかな?ドキドキ

▼ 残念!次のエラーが出てしまった…(-_-;)

どうやらPySide6の初期化に失敗した模様です。

何が問題なのか考え直すことに。

4.Nuitka --plugin-enable オプションでexe化成功!

先ほどのコンパイルメッセージを読んでみました。

すると所々で警告が出ています。

▼ 以下の Nuitka-Plugins:WARNING: の箇所)

ヒントというか答えが書いてありますね。

単純に以下オプションを追加すればいいだけ

▼ この場合は次の2つが必要

  • --enable-plugin=pyside6
  • --enable-plugin=numpy

もし Nuitka-Plugins:WARNING: Use '--enable-plugin=***'  のような警告を見つけたら、その通りにオプションを追加してあげてください。

▼ これらを指定してNuitka実行してみた

▼ そして出来上がったexeを実行してみると…

▼ 無事exeとしてアプリ起動できた!

Nuitkaによりexe化されたPythonアプリを実行している様子。コンパイルされた正真正銘のexe形式ファイル

exe単体で動いているのを見ると感動する

モジュール的にも問題なく動作してくれました。

単一exeファイルを生成するなら --onefile を付ける

先ほどだと ***.dist にexeが生成されました。

ここには依存DLL・リソースが含まれています。

もしそれらを1つのexe・バイナリにまとめたいなら…

▼ Nuitka --onefile オプションを付けて実行

モジュールDLL・依存ファイル・リソース・その他が1つのexeファイル(他OSならバイナリ)に全てバインドさせることが可能です。

ただし --standalone  を試してから実行してください。

コンパイル実行の時間・動作速度などについて

次の環境でNuitkaコンパイルを行いました。

▼ 当環境のスペック

  • OS : Windows10
  • CPU : Core i7
  • メモリ : 64GB

コンパイル所要時間は2分20秒ほど

恐らくこの所要時間はOSスペックによります。
メモリ64GBだとそこまで遅さは感じませんでした。

ただ普通はメモリ8GB・16GBとかだと思います。

最低でも数十分はかかると見込んでおくべきです。

また実行したexeの体感動作について

  • 実行までにかかる時間は標準的
  • 少なくともpython実行よりも早い
  • 動作もpythonと同等かそれより快適

ネイティブアプリだけあって動作は快適です。

1つのexeにまとめると、少し立ち上がりが遅いかも

以上、NuitkaでPython exe化でした。ではまた

Shareこの記事をシェアしよう!

Commentsこの記事についたコメント

2件のコメント
  • 新井均

    大変わかり易い解説でした。ありがとうございます。
    ほとんど問題なく進んで、Nuitkaのコンパイルも正常に終了しました。
    問題は、ビルド後の結果がexeではなく、binファイルになってしまいます。
    Successfully created ‘hello.dist/hello.bin’
    となってしまいます。
    Nuitka:INFO: Starting Python compilation with Nuitka ‘1.6.4’ on Python ‘3.9’ commercial grade ‘not installed’.
    となっていました。

    6月 23, 2023 12:07 pm
    • ぴー助

      コメントありがとうございます。

      自分の場合、ビルドが正常終了したなら bin ⇒ exe に拡張子変更など試すことを考えます。また当記事でも書いたようにコンパイルエラー・警告にヒントがあることが多いです。また情報は多くないですが、ググるとStack Overflowなどで同じ状況に遭遇してる人がした質問も見つかるかもしれません。

      6月 23, 2023 2:38 pm

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください