定型的な業務から逃れるため、Python で GUI アプリを作って自動化することに精を出しています。使用実績を上げれば、次のステップとして、作ったツールをチームで共有したくなります。メンバーが自分と同じように Python を使えるのであれば悩むことはありませんが、残念ながらそうではありません。😭
自分が作ったツールを他の人に使ってもらうために Python の環境を準備してもらうことが現実的でないとき、動作に必要なファイルをまとめてパッケージとして共有できれば便利です。会社業務で使う Windows 上でできればとても助かります。そんなニーズをかなえてくれるのが PyInstaller です。
PyInstaller とは
PyInstaller は Python アプリと依存するライブラリなどのファイルを一つのパッケージにまとめます。ユーザーは、Python インタプリタやモジュールをインストールすることなく、パッケージ化されたアプリを実行することができます。
PyInstaller は Python 3.5 以降をサポートし、NumPy, PyQt, Django, wxPython などの主要な Python パッケージを正しくバンドルします。PyInstaller は Windows, Mac OS X, GNU/Linux でテストされています。しかし、クロスコンパイラではありません: Windows アプリを作るには Windows 上で、GNU/Linux アプリを作るには GNU/Linux 上で PyInstaller を実行します。
PyInstaller を使ってみる
使用した OS 環境は下記の通りです。
Windows 10 Home (x64) | 1909, 18363.1110 | |
» Python 3.8.6 | python-3.8.6-amd64.exe |
※ Python は Microsoft Store のものではなく、https://www.python.org/downloads/release/python-386/ からダウンロードしたパッケージをインストールして使っています。
wxPython 版 Hellow World!
ここでは、wxPython を使った簡単な GUI アプリ(下記)を PyInstaller でパッケージ化してみます。
プログラムの実行にアイコンファイルを使っています。github にリポジトリを用意しましたので、git で下記のように clone してご利用ください。
git clone https://github.com/bitwalk123/hello.git
PyInstaller をインストール
コマンドプロンプトを起動して pip で PyInstaller をインストールします。
pip install pyinstaller
PyInstaller で hello_wx.py をパッケージ化する
コマンドプロンプトを起動してパッケージ化したいファイル(この例では hello_wx.py)があるディレクトリに移って pyinstaller コマンドを実行してもいいのですが、運用上、別のフォルダでパッケージを作成することにします。
d:\bitwa\Projects\hello\hello_wx.py
d:\bitwa\Packages
git clone したディレクトリ内にある pkinstaller.ico を、あらかじめ、パッケージを作成するディレクトリ内にコピーしておきます。これはパッケージ化した exe 形式のファイルのアイコンに使います。
コマンドプロンプトを起動して、パッケージを作成するディレクトリへ移り、pyinstaller コマンドを実行します。
Microsoft Windows [Version 10.0.18363.1110] (c) 2019 Microsoft Corporation. All rights reserved. C:\Users\bitwa>d: D:\>cd bitwa\Packages D:\bitwa\Packages>dir ドライブ D のボリューム ラベルは SD です ボリューム シリアル番号は E0E1-F674 です D:\bitwa\Packages のディレクトリ 2020/10/11 08:48 <DIR> . 2020/10/11 08:48 <DIR> .. 2020/10/10 22:36 16,958 pyinstaller.ico 1 個のファイル 16,958 バイト 2 個のディレクトリ 119,623,282,688 バイトの空き領域 D:\bitwa\Packages>pyinstaller -w -i pyinstaller.ico d:\bitwa\Projects\hello\hello_wx.py 1294 INFO: PyInstaller: 4.0 1294 INFO: Python: 3.8.6 1299 INFO: Platform: Windows-10-10.0.18362-SP0 1304 INFO: wrote D:\bitwa\Packages\hello_wx.spec 1314 INFO: UPX is not available. 1339 INFO: Extending PYTHONPATH with paths ['d:\\bitwa\\Projects\\hello', 'D:\\bitwa\\Packages'] 1444 INFO: checking Analysis ... (途中省略) ... 27536 INFO: Building COLLECT COLLECT-00.toc 40317 INFO: Building COLLECT COLLECT-00.toc completed successfully. D:\bitwa\Packages>
今回使用したオプションの -w は、実行時にコンソールを表示しないようにする GUI アプリ向けのオプションです。-i は、作成する exe 形式のファイルのアイコン表示に指定するオプションです。最後に、パッケージにする Python スクリプトのパスを指定します。PyInstaller のオプション詳細は、参考サイト [1] にあります。
PyInstaller を実行した後、build と dist のフォルダ、hello_wx.spec というファイルが生成されます。
パッケージ化されたファイルは dist\hello_wx にあります。
生成された hello_wx.exe ファイルの他に、ランタイムライブラリなどの関連ファイルがたくさんあります。これが煩わしい場合は、pyinstaller コマンド実行時に -F オプションを付けると、大きなサイズの単一ファイルになります。
動作確認
動作確認のため hello_wx.exe ファイルをダブルクリックしたところ、./wx.ico が見つからないというエラーが出ました。
プログラムが読み込む ico ファイルまではパッケージ化してくれないようです。これは wx.ico をパッケージのフォルダ内にコピーすることで解決しました。
アプリケーションが使用するアイコン類は、最終的にはエンコードして Python のスクリプト内に記述することにします。
たったこれだけのプログラムなのにランタイムライブラリなどを含めるとこんなサイズになります(下記)。
まとめ
PyInstaller の使い方については、もうすこし使い込んでから、使用例を含めてまとめる予定です。
個人的には、大きなサイズの単一の exe 形式のファイルにすることにはあまり興味が無く、exe 形式のファイル + 関連ファイルが一つのフォルダ内に収まれば御の字です。あとは Inno Setup などでインストーラを作成すれば完璧です。😃
参考サイト
にほんブログ村
0 件のコメント:
コメントを投稿