トップページに戻る
pythonスクリプトの実行ファイル化
公開対象: 一般
注: pynstaller, cx_Freezeでは実行ファイル化が難しかった/できなかったケースがかなりありました。
現時点では、nuitkaをお薦めします。
必要ファイル:
・ pyinstaller (必要な場合のみ)
・ cx_Freeze (必要な場合のみ)
拠点で開発しているpythonプログラムを実行ファイル化する方法について、Windows版で以下の方法で確認をしました。
- pyinstaller を用いる方法
利点: 1つのファイルで実行できる
欠点: 実行ファイル (*.exe) が大きい (bayes_gp_gui.pyで300MB以上)
- cx_Freeze を用いる方法
利点: 実行ファイル (*.exe) が小さい
欠点: 必要なダイナミックリンクライブラリィ (.dll)、pythonモジュールは別ファイルになっているため、ディレクトリィ丸ごとをコピーする必要がある。
非常に大きく、不要なものも含まれる (bayes_gp_gui,pyで約1GB)
実行時に不足するモジュール・ファイルが出た場合、マニュアルでコピーして対応できる
使い分け方:
- チュートリアル等で1つのプログラムしか使わない場合はpyinstallerで作製した単一exeファイルを配布する
- 拠点等では、基本としてpythonスクリプトで実行できる環境を作る。
実行ファイルを共有する場合、cx_Freezeのダイナミックリンクライブラリィ、モジュールを共通化し、exeファイルをそのディレクトリィに入れて教習する
インストールと実行ファイル化の方法
いずれの場合も、取り込まれるdll、モジュールを最小限にするため、最小限のファイルで動作する仮想環境を作ってください。
ここではその環境を ENV
、実行ファイル化するpythonスクリプトを test.py とします。
pyinstallerの場合
- 仮想環境を変える
> conda activate ENV
- test.py を実行できる環境を作る
- pyinstallerをインストールします
> pip install pyinstaller
- pyinstallerのディレクトリィをPATH環境変数に追加する必要があるかもしれません
> set path=C:\Users\[ログインアカウント名]\AppData\Roaming\Python\Python39\Scripts\:%path%
- 実行ファイル化
> pyinstaller test.py --onefile
- 実行できるか確認し、不足しているモジュールがあったら、--hidden-import
で追加します。
importエラーが出なくなるまで繰り返します
> pyinstaller test.py --onefile --hidden-import openpyxl
--hidden-import openpyxl.cell._writer
ほかにもbinaryファイルを追加することなどができるようです。
参考: https://qiita.com/bwtakacy/items/51b765b4da77a76d6f32
cx_Freezeの場合
- 仮想環境を変える
> conda activate ENV
- test.py を実行できる環境を作る
- cx_freezeをインストールします
> pip install cx-Freeze
- 実行ファイル化
> cxfreeze -c test --target-dir target
とすると、targetいかに実行ファイル、ライブラリィ等が作られます。
- 実行できるか確認し、不足しているモジュールがあったら、仮想環境のsite_libからコピーしてください
Windows、anacondaの場合、仮想環境は
[ユーザーフォルダ]\.conda\env\[仮想環境名]
にありますので、必要ファイルを検索してコピーします
- 配布の際は tagetディレクトリィを丸ごと配布します。