ゲーム開発
Unity
UnrealEngine
C++
Blender
ゲーム数学
ゲームAI
グラフィックス
サウンド
アニメーション
GBDK
制作日記
IT関連
ツール開発
フロントエンド関連
サーバサイド関連
WordPress関連
ソフトウェア設計
おすすめ技術書
音楽
DTM
楽器・機材
ピアノ
ラーメン日記
四コマ漫画
その他
おすすめアイテム
おもしろコラム
  • ゲーム開発
    • Unity
    • UnrealEngine
    • C++
    • Blender
    • ゲーム数学
    • ゲームAI
    • グラフィックス
    • サウンド
    • アニメーション
    • GBDK
    • 制作日記
  • IT関連
    • ツール開発
    • フロントエンド関連
    • サーバサイド関連
    • WordPress関連
    • ソフトウェア設計
    • おすすめ技術書
  • 音楽
    • DTM
    • 楽器・機材
    • ピアノ
  • ラーメン日記
    • 四コマ漫画
      • その他
        • おすすめアイテム
        • おもしろコラム
      1. ホーム
      2. 20210822_01

      【Python】Pythonスクリプトをexe、app化する【cx_Breeze】

      ツール開発Python
      2021-08-29

      マイケル
      マイケル
      みなさんこんにちは!
      マイケルです!
      エレキベア
      エレキベア
      クマ〜〜〜〜
      マイケル
      マイケル
      今日はPythonファイルをexe、app化する方法について紹介するよ!
      エレキベア
      エレキベア
      そんな方法があったクマね
      マイケル
      マイケル
      Pythonスクリプトをexe化するライブラリとしては

      ・Pyinstaller
      ・cx_Freeze

      が有名だけど、今回は動作が速いが情報が少ない
      と言われる cx_Freeze を使ってみます!

      cx_Freeze 公式ドキュメント

      エレキベア
      エレキベア
      英語で読めないクマ・・・
      マイケル
      マイケル
      とりあえず触っていこう!

      cx_Freezeのインストール

      マイケル
      マイケル
      まずcx_Freezeのインストールについては簡単で、
      下記のようにpipコマンドでインストールするだけですね!
      pip install cx_Freeze
      ↑cx_Freezeのインストール
      エレキベア
      エレキベア
      簡単クマ〜〜〜

      クリッカーアプリのexe、app化

      マイケル
      マイケル
      インストールができたら早速使っていきましょう!
      まずは下記のシンプルなクリッカーアプリをexe化してみます!
      import tkinter as tk
      from tkinter import ttk
      
      
      # クリッカー
      class ClickerWindow(tk.Frame):
          def __init__(self, master=None):
              super().__init__(master)
              self.master.geometry("250x250")
              self.master.title("Clicker")
              # ラベル
              self.label = ttk.Label(self.master, text="0", font=("Times New Roman", 80))
              self.label.pack(anchor="center", pady=40)
              # ボタン
              self.button = ttk.Button(self.master, text="CLICK", command=self.click_btn)
              self.button.pack(anchor="center")
      
          # ボタン押下でインクリメント
          def click_btn(self):
              i = int(self.label["text"]) + 1
              self.label["text"] = str(i)
              self.label.update()
      
      
      if __name__ == "__main__":
          root = tk.Tk()
          app = ClickerWindow(master=root)
          app.mainloop()
      
      
      ↑クリッカーアプリ
      マイケル
      マイケル
      exe化するには、Pythonスクリプトのディレクトリにsetup.pyという設定ファイルを記述する必要があります。
      書き方は下記の公式ドキュメントを参照しましょう!

      setup script – cx_Freeze

      エレキベア
      エレキベア
      いろんなオプションがあるクマね

      Windows

      マイケル
      マイケル
      exeファイルはWindowsで実行することで作成できます。
      マイケル
      マイケル
      setup.pyの一番シンプルな書き方は下記になります。
      今回のアプリは公式ページの記述から、アプリ名と読み込むスクリプト名のみ変更するだけで良さそうです。
      import sys
      from cx_Freeze import setup, Executable
      
      build_exe_options = {"packages": ["os"], "excludes": []}
      
      base = None
      if sys.platform == "win32":
          base = "Win32GUI"
      
      setup(
          name="clicker",
          version="0.1",
          description="My GUI application!",
          options={"build_exe": build_exe_options},
          executables=[Executable("main.py", base=base)]
      )
      
      ↑setup.pyの記述
      マイケル
      マイケル
      このファイルを作成したディレクトリで
      python setup.py build コマンドを実行しましょう!
      // EXEファイルの作成 
      python setup.py build
      マイケル
      マイケル
      実行するとディレクトリにbuildフォルダが作成され、
      その中にexeファイルが出力されます。

      ↑exeファイルが出力される
      エレキベア
      エレキベア
      これだけで出力されるクマか
      マイケル
      マイケル
      実行しても下記のように正常に起動するかと思います!

      ↑exeファイル実行結果

      Mac

      マイケル
      マイケル
      同じようにappファイルも作成してみましょう!
      setup.pyについてはWindowsと同様になります。
      import sys
      from cx_Freeze import setup, Executable
      
      build_exe_options = {
          "packages": ["os"],
          "excludes": [],
      }
      
      base = None
      if sys.platform == "win32":
          base = "Win32GUI"
      
      setup(
          name="clicker",
          version="0.1",
          description="My GUI application!",
          options={"build_exe": build_exe_options},
          executables=[Executable("main.py", base=base)]
      )
      
      マイケル
      マイケル
      そしてappファイルを作成するコマンドは python setup.py bdist_mac になります。
      このコマンドを実行すると、 実行ファイル作成 -> appファイルとしてまとめる 処理を流れで行ってくれます。
      // APPファイルの作成
      python setup.py bdist_mac
      マイケル
      マイケル
      実行すると、こちらもbuildフォルダ配下にappファイルが作成されていることが分かります。
      マイケル
      マイケル
      実行しても正常に動かすことができました!
      エレキベア
      エレキベア
      ちょろいクマ〜〜〜

      パズルゲームのexe、app化

      マイケル
      マイケル
      シンプルなクリッカーアプリで試してみましたが、
      今度はもう少し複雑なアプリをexe化してみましょう!
      マイケル
      マイケル
      というわけで、以前作ったPythonのパズルゲームをexe化してみようと思います。
      エレキベア
      エレキベア
      (なつかしいのを出してきたクマ・・・。)

      Windows

      マイケル
      マイケル
      とはいえ、setup.pyの記述は基本的にはクリッカーアプリと同じになります。
      しかし今回は画像ファイルを読み込む必要があるため、include_filesに画像ファイルのフォルダを指定 することで画像ファイルも同梱しています。
      import sys
      from cx_Freeze import setup, Executable
      
      include_files = [
          ('C:\\workspace\\PycharmProjects\\akeomePuzzle\\Resources\\images', '')
      ]
      
      build_exe_options = {
          "packages": ["os"],
          "excludes": [],
          "include_files": include_files
      }
      
      base = None
      if sys.platform == "win32":
          base = "Win32GUI"
      
      setup(
          name="akaomePuzzle",
          version="0.1",
          description="My GUI application!",
          options={"build_exe": build_exe_options},
          executables=[Executable("akeomePuzzle.py", base=base)],
      )
      
      ↑画像ファイルのinclude
      マイケル
      マイケル
      合わせてPythonスクリプトも少し修正します。
      画像ファイルを実行ファイルのパスから読み込む必要があるため、下記のようにパスを指定するよう修正しました。
      # 画像の取得(実行ファイルからの相対パス)
      images_path = os.path.join(os.path.dirname(sys.argv[0]), "images")
      bg = tkinter.PhotoImage(file=os.path.join(images_path, "ball_bg.png"))
      ↑画像読み込みパスの修正
      マイケル
      マイケル
      この状態で python setup.py build を実行すると、
      Exeファイルのディレクトリにimagesフォルダも同梱されることが確認できます。

      ↑imagesフォルダも同梱される

      マイケル
      マイケル
      exeファイルを実行すると、正常に起動することができました!
      エレキベア
      エレキベア
      やったクマ〜〜〜

      Mac

      マイケル
      マイケル
      Macのsetup.pyも同じように作成します。
      include_filesに画像ファイルパスを指定しましょう!
      import sys
      from cx_Freeze import setup, Executable
      
      include_files = [
          ('/Users/molegoro/workspace/PycharmProjects/games/akeomePuzzleApp/Resources/images', '')
      ]
      
      build_exe_options = {
          "packages": ["os"],
          "excludes": [],
          "include_files": include_files
      }
      
      bdist_mac_options = {
          "iconfile": "/Users/molegoro/workspace/PycharmProjects/games/akeomePuzzleApp/Resources/images/ball_gold.png",
      }
      
      base = None
      if sys.platform == "win32":
          base = "Win32GUI"
      
      setup(
          name="akaomePuzzle",
          version="0.1",
          description="My GUI application!",
          options={"build_exe": build_exe_options, "bdist_mac": bdist_mac_options},
          executables=[Executable("akeomePuzzle.py", base=base)],
      )
      
      ↑画像ファイルパスの指定
      マイケル
      マイケル
      今回はついでにアイコンパスを指定してみました。
      appファイル作成はbdist_mac_optionsオプションで指定することができます。
      ※手抜きのためアイコンはpngファイルを指定していますが、本来は「.icns」拡張子のものを用意して指定しましょう!
      マイケル
      マイケル
      この状態で python setup.py bdist_mac コマンドを実行すると、appファイルが作成されます。
      エレキベア
      エレキベア
      imagesフォルダはどこにあるクマ??
      マイケル
      マイケル
      いいところに気がついたね!
      Includeされたフォルダは、下記のように「~.app/Contents/MacOS」の中に格納されているよ!
      Appファイルはこのように実行ファイル等を同梱しているんだね。

      ↑appファイルの中に同梱される
      マイケル
      マイケル
      実行もこのようにうまくいきました!
      エレキベア
      エレキベア
      だいぶ分かってきたクマ〜〜〜

      おわりに

      マイケル
      マイケル
      というわけで今回はcx_Freezeを使ってみました!
      どうだったかな?
      エレキベア
      エレキベア
      思ったより手軽にexeファイル化できて感心したクマ
      マイケル
      マイケル
      今回の例は簡単だったけど、使用するライブラリが増えてくると、
      setup.pyの内容も複雑になってくるかと思います!
      そういった深いところは地道にエラーログを見ながら対処していくしかなさそうだね・・・
      エレキベア
      エレキベア
      本当の勝負はこれからクマね・・・
      マイケル
      マイケル
      とはいえ作ったツールをちゃんとexe、app化できると気持ちいいね!
      これから積極的に使っていこう!
      マイケル
      マイケル
      それでは今日はこの辺で!
      アデュー!!
      エレキベア
      エレキベア
      クマ〜〜〜〜〜

      【Python】Pythonスクリプトをexe、app化する【cx_Breeze】 〜完〜


      ツール開発Python
      2021-08-29

      関連記事
      【Unity】Timeline × Excelでスライドショーを効率よく制作する
      2024-10-31
      【Node.js】廃止されたAmazonアソシエイト画像リンクをAmazon Product Advertising API経由で復活させる
      2024-01-08
      【Electron × Vue3】カテゴリ情報のCSVデータを操作するツールを作る
      2023-12-31
      【Electron × Vue3】画像をリサイズして任意の場所に保存するツールを作る
      2023-12-31
      【Electron × Vue3】Electron × Vue3 × TypeScript × Vite でツール開発環境を整える
      2023-12-31
      【Flutter3】Googleスプレッドシートと連携した英単語学習アプリを作る
      2022-12-11
      【Python】Pillowを使ってピクセル操作!画像フィルタをかけてみる
      2021-02-17
      【Python】ぷよぷよ風の文字連結パズルゲームを作る【あけおめパズル】
      2021-01-03