hotch-potch, Note to self

いろいろ作業記録

pyinstallerでモジュール"-m"起動するアプリをビルド

1.はじめに

pyinstallerは、スクリプト本体となるhoge.pyを引数に与えると、単体で実行できるファイルを生成します。

自分でPythonスクリプトを作るときは、python -m <モジュール名>で実行する形式で作る事が殆どなので、モジュールタイプでのpyinstallerを適用する覚え書きです。

2.結論

$ pyinstaller <モジュールディレクトリ>/__main__.py -n <すきな実行ファイルの名前> --collect-all <一緒にまとめるパッケージ名>

3.詳細

想定する条件

ディレクトリ構成

hoge
  +- hogemod
       +- __init__.py
       +- __main__.py
       +- hogemod.py

これをPythonから実行するときのコマンド

$ pwd
hoge
$ python -m hogemod

この場合のpyinstallerコマンドの組み立て方

$ pyinstaller hogemod/__main__.py -n hogemod --noconfirm --collect-all hogemod

pyinstallerを実行後は、hoge/distディレクトリの中に、実行ファイルhogemodができています。

pyinstaller引数 意味
-n 実行ファイル名(指定無しだと__main__になります)
--noconfirm 実行ファイルビルド中に、上書きする・しないの問いあわせなく上書きします
--collect-all 必要なパッケージをかき集めて一緒にまとめてくれます

補足

複数のパッケージをインポートしている場合の引数指定

hogemod.pyのなかで、いろいろなパッケージをimportしている場合は、--collect-all引数を必要な分だけ追記します。1パッケージに1引数必要です。

$ pyinstaller hogemod/__main__.py -n hogemod --noconfirm --collect-all hogemod --collect-all yaml --collect-all logging --collect-all curses

--collect-allの指定が不足している場合は、生成した実行ファイルを実行時に、エラーで止まるので、そのときに表示されたパッケージを追加指定します。

ビルドオプション

引数 機能
--onefile 関連するファイルを1つにまとめてexeファイルを生成
--noconsole コンソールの黒い画面を抑制

ご参考になれば幸いです。

参考資料