lisz-works

技術系だけど関係ないこと多い系ブログ

cx_FreezeでPythonをexeにしてみた

【スポンサーリンク】

Python ロゴ

cx_Freezeというもので、Pythonのコードをexeファイルに変換してみました。

今回はその手順などをご紹介します。

インストール

これで導入する模様。

python -m pip install cx_Freeze --upgrade

するとこんな感じでインストールが完了します。
「Successfully ~」が出たら完了です。

Collecting cx_Freeze
  Downloading cx_Freeze-5.0.2-cp36-cp36m-win_amd64.whl (162kB)
    100% |████████████████████████████████| 163kB 1.5MB/s
Installing collected packages: cx-Freeze
Successfully installed cx-Freeze-5.0.2

exe化するソース

今回は試しに簡単なプログラムをビルドしてみます。
というわけで、Hello worldです。

# -*- coding: utf-8 -*-

# main
#
if __name__ == '__main__':
    print("Hello exe")

これを「hello.py」で保存しました。

exe化に必要なファイルの作成

次にexe化するのに必要な、「setup.py」を作ります。
内容はこちら。

# coding: utf-8
# cx_Freeze 用セットアップファイル
 
import sys
from cx_Freeze import setup, Executable
 
base = None

# GUI=有効, CUI=無効 にする
# if sys.platform == 'win32' : base = 'Win32GUI'
 
# exe にしたい python ファイルを指定
exe = Executable(script = 'hello.py',
                 base = base)
 
# セットアップ
setup(name = 'hello',
      version = '0.1',
      description = 'converter',
      executables = [exe])

前述の「hello.py」を起動させるために、Executable()の引数「script」に、「hello.py」を設定しています。

setupの引数のnameもそれにあわせて「hello」にしていますが、そこは実質適当で気がします。

また今回はコンソールアプリなので、「if sys.platform~」の行を削除(コメントアウト)しています。
GUIを作る方は、有効にしてください。

これら以外は、コピペでOKです!

exe化してみる

setup.pyを作成したら、このコマンドを実行。

python setup.py build

なんかズラーっと文字が出て、入力受付に戻ってきたら完了です。

超絶小さいアプリだからか、ぼくの環境では4秒程度で完了しました。

アプリのサイズが大きくなったら、どれだけ時間がかかるのかが気になるところですね。

exe作成後のファイル構成

exe化が完了すると、「build」というフォルダが増えます。

「build」フォルダ内の「exe.win-amd64-3.6」フォルダの中に「hello.exe」が作られます。

その他に色々なファイルが入っていますが、exeに必要なファイルなのでしょう(ちゃんと見てない)。

exeを実行してみる

それではexeを実行してみましょう!

コマンドプロンプトを開き、作られたexeが置いてあるフォルダまで移動します。

そして、exeのファイル名を実行してみましょう!

Hello exe

と表示されれば成功です!

setup関数の引数について

setup関数の引数は、生成されたexeファイルのプロパティに反映されるようです。

nameを「hello_python」に変更して試した結果がこちら。

exeのプロパティ

setup関数に設定した情報がここにセットされていますね!

参考

こちらのサイトを参考にしました。

http://tmlife.net/programming/python/cx_freeze-python-exe.html

大変参考になりました。ありがとうございました。

あとがき

今回は簡単なアプリで試しましたが、今後はもっとちゃんとした処理のあるものをexe化してみたいですね。

CUIではありますが、例えば自動化ツールのようなものであればそれで十分ですし。

「このexeを叩いたら、この作業完了……」

みたいな感じにしていきたいですね……(野望)

まぁ自分用だけなら実行用バッチでもいい気もしますが(笑)