PyInstaller より圧倒的に優れている Nuitka の使い方とハマった
基礎知識は下記。
はじめにexe化とはなにか紹介します。
①exe化のメリット
exe化には何点かメリットがあります。特にメリットの大きい3点を確認してみましょう。
PythonをインストールしていないPCでも実行できる
ターミナルやシェルからでなく、ダブルクリック等で実行できる
アイコンを設定できる。
大晦日ギリギリに何の記事を書いてるんだ?となりそうですが、皆さんは PyInstaller で Python で作ったソフトを exe 化したい!と思った事はありますか? 私は何度かあります。
ですが、PyInstaller で作ったソフトは ファイルサイズがデカい・起動が遅い・ウイルス判定されやすい とちょっと微妙な点が多いです。
それでも比較的簡単に exe 化できるのでよく使われているわけですが、とはいえネイティブの exe ほどパフォーマンスは上がりませんし、むしろ普通に Python で実行したときより遅くなります。
ここで、PyInstaller の仕組みを簡潔に説明します。
PyInstaller は基本 --onefile オプションをつけて実行することが多いと思いますが、あれは exe の中に自己解凍機能が入っていて、実行すると Windows なら AppData\Local\Temp あたりに exe の中に入っていたパッケージ一式が解凍されます。その中に入っているスクリプトを実行することで、見た感じあたかも単一の exe ファイルで実行できるように見せかけている、というものです。
解凍されたパッケージ一式は終了時に削除されるため、ダブルクリックで実行した際にそうしたパッケージを毎回解凍することになり、それが起動時のオーバーヘッドになっています。
ほかに Python を exe 化するソフトとしてはたとえば py2exe という Windows 専用のツールなどもあったりしますが、Windows 専用な上に使い方が面倒くさく、あまり手軽とはいえません。
続きは以下のソースで!
とあるデスクトップアプリをKivy/Pythonで作ってみたときに、NuitkaでWindows用にexeファイル化をしまして、その時の試行錯誤の記録です。
最初はPyInstallerでexe化しようとしていたのですが、PyInstallerでone-fileモードでexe化すると起動に
135秒かかる。
で、ファイル容量が
393 MBになってしまう、と。
おおぅ( ̄□ ̄;)!!!
一方、one-fileモードでなくて、one-directoryモードであれば15秒ほどで起動できるのですが、directoryのファイル容量が、、、
700 MB超え。
いやぁん( ̄□ ̄;)!!!
こりゃイカンということで、起動時間とファイル容量の改善が期待できると耳にしたNuitkaを使ってみることにしました。
んが、初めてのワタシがやってすんなりいくはずもなく、試行錯誤が必要でした。
なので今後のために記録を残しておきます。
というか書きなぐります。
結果としては、起動時間を6.6秒に、exeファイル容量を82 MBに改善することができました。
記事の後半にNuitkaでexe化したときと、PyInstallerでexe化したときの結果の簡単な比較表を載せてみましたよ。
実施環境
PC、OSなど
MacBook 2017 (Intel Core m3, 1.2 GHz, RAM 8GB)(Boot CampでWindowsを導入)
Windows10 Home 21H2
PowerShell version; 5.1.19041.1682
MSVC コンパイラ(cl; 14.3 )(Build Tools for Visual Studio 2022より)
Python、pyenv、pipenv、NuitkaとPyInstaller
pyenvを使って、pipenvでの仮想環境下で実施しています。
Python 3.9.12
pyenv; 2.64.11
pipenv; version 2022.4.21
Nuitka; 0.8.1
PyInstaller; 5.1
今回exe化に供したファイル
pyファイル:253 KB
これに付随して必要なkv, csv, png, ico, ttf, xmlファイルを少々(合計6.5 MB)
pyファイルでimportしている主なライブラリ
numpy; 1.22.4
pandas; 1.2.4
scipy; 1.7.3
kivy; 2.1.0
plotly; 5.8.0
ソースは以下
pic ref
この記事が気に入ったらサポートをしてみませんか?