トップページに戻る

pythonスクリプトの実行ファイル化

公開対象: 一般

注: pynstaller, cx_Freezeでは実行ファイル化が難しかった/できなかったケースがかなりありました。
現時点では、nuitkaをお薦めします。

参考: https://qiita.com/yulily/items/b97dc34615eac2be7157


必要ファイル:

・ pyinstaller (必要な場合のみ)
・ cx_Freeze (必要な場合のみ)


拠点で開発しているpythonプログラムを実行ファイル化する方法について、Windows版で以下の方法で確認をしました。

  1. pyinstaller を用いる方法
    利点: 1つのファイルで実行できる
    欠点: 実行ファイル (*.exe) が大きい (bayes_gp_gui.pyで300MB以上)
     
  2. cx_Freeze を用いる方法
    利点: 実行ファイル (*.exe) が小さい
    欠点: 必要なダイナミックリンクライブラリィ (.dll)、pythonモジュールは別ファイルになっているため、ディレクトリィ丸ごとをコピーする必要がある。
        非常に大きく、不要なものも含まれる (bayes_gp_gui,pyで約1GB)
            実行時に不足するモジュール・ファイルが出た場合、マニュアルでコピーして対応できる

使い分け方:


インストールと実行ファイル化の方法

いずれの場合も、取り込まれるdll、モジュールを最小限にするため、最小限のファイルで動作する仮想環境を作ってください。
ここではその環境を ENV 、実行ファイル化するpythonスクリプトを test.py とします。

pyinstallerの場合

  1. 仮想環境を変える
      > conda activate ENV
     
  2. test.py を実行できる環境を作る
     
  3. pyinstallerをインストールします
      > pip install pyinstaller  
     
  4. pyinstallerのディレクトリィをPATH環境変数に追加する必要があるかもしれません
      > set path=C:\Users\[ログインアカウント名]\AppData\Roaming\Python\Python39\Scripts\:%path%
     
  5. 実行ファイル化
      > pyinstaller test.py --onefile
     
  6. 実行できるか確認し、不足しているモジュールがあったら、--hidden-import で追加します。
    importエラーが出なくなるまで繰り返します
      > pyinstaller test.py --onefile --hidden-import openpyxl --hidden-import openpyxl.cell._writer
    ほかにもbinaryファイルを追加することなどができるようです。
      参考: https://qiita.com/bwtakacy/items/51b765b4da77a76d6f32

cx_Freezeの場合

  1. 仮想環境を変える
      > conda activate ENV
     
  2. test.py を実行できる環境を作る
     
  3. cx_freezeをインストールします
      > pip install cx-Freeze 
     
  4. 実行ファイル化
      > cxfreeze -c test --target-dir target
    とすると、targetいかに実行ファイル、ライブラリィ等が作られます。
     
  5. 実行できるか確認し、不足しているモジュールがあったら、仮想環境のsite_libからコピーしてください
    Windows、anacondaの場合、仮想環境は
      [ユーザーフォルダ]\.conda\env\[仮想環境名]
    にありますので、必要ファイルを検索してコピーします
     
  6. 配布の際は tagetディレクトリィを丸ごと配布します。