2020/03/16(月) [n年前の日記]
#1 [python] cx_FreezeでPythonスクリプトをexe化したけど厳しい
PySide2 を使った Pythonスクリプトを、cx_Freeze を利用することで exe化してみたけれど、これがなかなか厳しい。簡単な Helloworld 程度のスクリプトですら、exe化すると、必要なファイル群が全部で345MBぐらいになる…。
環境は Windows10 x64 1909 + Python 3.7.7 64bit + PySide2 5.14.1 + cx_Freeze 6.1。
環境は Windows10 x64 1909 + Python 3.7.7 64bit + PySide2 5.14.1 + cx_Freeze 6.1。
◎ cx_Freezeでexe化。 :
cx_Freeze に渡した setup.py は以下。
exe化は以下。
buildというディレクトリが作成されて、exe.win-amd64-3.7/ 以下に .exe ができている。 exeの実行に必要なファイル群は、lib/ 以下にコピーされている。
import sys from cx_Freeze import setup, Executable script_name = "01_qtquick_load_qrc_py.py" app_name = "01_qtquick_load_qrc_py" ver_name = "0.1" desc = "converter" # packages = [] # includes = ["PySide2.QtCore", "PySide2.QtGui", "PySide2.QtQml"] # excludes = [] base = None # CUIなら以下のifをコメントアウト if sys.platform == 'win32': base = 'Win32GUI' exe = Executable(script=script_name, base=base) setup( name=app_name, version=ver_name, description=desc, # options={ # "build_exe": { # "includes": includes, # "excludes": excludes, # "packages": packages # } # }, executables=[exe] )
exe化は以下。
python setup.py build
buildというディレクトリが作成されて、exe.win-amd64-3.7/ 以下に .exe ができている。 exeの実行に必要なファイル群は、lib/ 以下にコピーされている。
◎ 仮想環境を作成して試してみた。 :
余計なモジュールがたくさん入っているのではないかと思えてきたので、試しに仮想環境を作って試してみたが、345MB が 344MB になった程度だった。効果がほとんどない…。そもそも、PySide2 のフォルダだけで、325MB もあるし…。
一応、仮想環境を利用する手順をメモ。
仮想環境の作成。
仮想環境に切り替え。
Pythonのバージョンを確認。
仮想環境の終了。
仮想環境に必要なモジュールをインストール。仮想環境に切り替えて、pipをアップグレードしてから、必要なモジュールをインストールしていく。
以下を参考にして作業しました。ありがたや。
_venvによるPythonの仮想環境構築(Windows) - Qiita
一応、仮想環境を利用する手順をメモ。
仮想環境の作成。
python -m venv myenv
仮想環境に切り替え。
.\myenv\Scripts\activate
Pythonのバージョンを確認。
python -VV
仮想環境の終了。
deactivate
仮想環境に必要なモジュールをインストール。仮想環境に切り替えて、pipをアップグレードしてから、必要なモジュールをインストールしていく。
.\myenv\Scripts\activate python -m pip install -U pip python -m pip install PySide2 python -m pip install cx_Freeze
以下を参考にして作業しました。ありがたや。
_venvによるPythonの仮想環境構築(Windows) - Qiita
◎ cx_Freezeに渡すオプションを変える。 :
cx_Freeze はバージョンが上がるたびに、「せっかく作ったexeが動かないのでは意味が無い」的に、かき集めてくるファイルを増やすような実装になっていったらしいのだけど。以前と同様の動作をさせるオプションとして、zip_include_packages なるオプションが用意されているようで。
_cx_Freeze 5.0.1 and PyQt - freezing copied too many files - Issue #256 - anthony-tuininga/cx_Freeze
試しに指定してみたのだけど…。180MBぐらいまでサイズが減ったものの、「Qtがちゃんとインストールされてないから動かないよ」と文句を言って終わってしまうexeが出来上がってしまった…。これでは意味が無い…。
_cx_Freeze 5.0.1 and PyQt - freezing copied too many files - Issue #256 - anthony-tuininga/cx_Freeze
試しに指定してみたのだけど…。180MBぐらいまでサイズが減ったものの、「Qtがちゃんとインストールされてないから動かないよ」と文句を言って終わってしまうexeが出来上がってしまった…。これでは意味が無い…。
[ ツッコむ ]
以上です。