2014年8月30日

PyInstaller を使って、バイナリを作成する

moeItemなど、Pythonスクリプトをバイナリ配布するのに、いままでは cx_Freeze を使ってきましたが、
PyInstallerInno Setup を使うことにしました。

cx_Freezeは、Python単体で setup.exe や setup.msi を作成できて便利でしたが、最近のPythonに対応
していないらしく、Python-2.7 や Python-3.4 でビルドできなくなっているようです。
PyInstallerはPython-3.0系にまだ未対応ですが、この差はあまり気にしなくてもいいでしょう。
(Python3.xからPython2.xに、PyQt5からPyQt4に書き換えましたが、案外楽でした。)

作成されるバイナリサイズは、MS Visual 2010 C++ Redistributable Packageを含んでいるにも関わらず、
cx_Freezeのときよりも若干小さくなりました。 (27MBから13MB。それにしても大きいですよね)

PyInstaller を使ってバイナリを作成する

PyQt4でapiバージョン2を使う場合は、ランタイムフックを使う。
  > PyInstaller.exe --noconsole --runtime-hook rthook_pyqt4y.p moeItem.pyw

Inno Setup を使って、install.exe を作成する。

Inno Setup単体を使うのではなく、(QuickStart Packに含まれる) Inno Script Studioから使うと簡単です。
Inno Setup自体は日本語対応していますので、日本語のインストールメニューが作成できますが、
Inno Script Studioや各種マニュアルが英語なので、ちょっとやっかいではあります。
install.exeを作る人って、案外少ないのかもしれませんね。