概要
この記事ではcx_freezeを使用してインストーラを作成する方法を紹介しています。
インストーラを作成するときに、デスクトップおよびスタートメニューのショートカットの作成有無やアイコンの設定などもできる方法となります。
cx_freezeのインストール
cx_freezeは以下のコマンドでインストールできます。
pip install cx_freeze
cx_freezeでインストーラを作成
-
まず、cx_freezeでインストーラを作成するには以下のsetup.pyを作成する (コピペでOK)
import sys from cx_Freeze import setup, Executable ############################################## ############################################## ############################################## # 以下はアプリごとに変更 # バージョン VERSION = "1.0" # アプリ名 APP_NAME = "Test App" # exeファイル名 (フォルダ名などになるためスペース等が無い方がよい) EXE_NAME = "TestApp" # アプリの説明 DESCRIPTION = "テストアプリ" # 作成者 AUTHOR = "Author" # 含めたいライブラリ等 PACKAGES = ["numpy", "matplotlib"] # 含めたいファイルやフォルダ INCLUDE_FILES = ["icons/"] # Pythonのソースコードファイル名 SCRIPT_FILENAME = "app.py" # アイコンファイルパス (Noneでなしに設定) ICON_PATH = "icons/icon.ico" # デスクトップにショートカットを作成するか ADD_DESKTOP_SHORTCUT = True # スタートメニューにショートカットを追加するか ADD_START_MENU_SHORTCUT = True # コンソール画面を無効化するか WITHOUT_CONSOLE = True # UUID (一度決めたら変更しない) UUID = "00000000000000000000000000000000" ############################################## ############################################## ############################################## # 以下は基本的に変更しない exe_name_without_dot_exe = defines.EXE_NAME.replace(".exe", "") exe_name_with_dot_exe = exe_name_without_dot_exe + ".exe" shortcut_table = list() if ADD_DESKTOP_SHORTCUT: shortcut_table.append( ( "DesktopShortcut", # Shortcut "DesktopFolder", # Directory APP_NAME, # Name "TARGETDIR", # Component_ "[TARGETDIR]" + exe_name_with_dot_exe, # Target None, # Arguments None, # Description None, # Hotkey "" if ICON_PATH is not None else None, # Icon 0 if ICON_PATH is not None else None, # IconIndex None, # ShowCmd "TARGETDIR", # WkDir ) ) if ADD_START_MENU_SHORTCUT: shortcut_table.append( ( "StartMenuShortcut", # Shortcut "ProgramMenuFolder", # Directory APP_NAME, # Name "TARGETDIR", # Component_ "[TARGETDIR]" + exe_name_with_dot_exe, # Target None, # Arguments None, # Description None, # Hotkey "" if ICON_PATH is not None else None, # Icon 0 if ICON_PATH is not None else None, # IconIndex None, # ShowCmd "TARGETDIR", # WkDir ) ) # Now create the table dictionary msi_data = {"Shortcut": shortcut_table} # Change some default MSI options and specify the use of the above defined tables bdist_msi_options = {"upgrade_code": UUID, "add_to_path": False, "data": msi_data} build_exe_options = { "packages": PACKAGES, # 取り込みたいファイルやフォルダ名を記載します。 "include_files": INCLUDE_FILES, } base = None if sys.platform == "win32" and WITHOUT_CONSOLE: base = "Win32GUI" setup( name=exe_name_without_dot_exe, version=VERSION, description=DESCRIPTION, author=AUTHOR, options={"build_exe": build_exe_options, "bdist_msi": bdist_msi_options}, executables=[ Executable( script=SCRIPT_FILENAME, # メインのPythonスクリプト base=base, target_name=exe_name_with_dot_exe, # ビルド後の実行ファイル名 icon=ICON_PATH, ), ], )
-
次に、setup.pyの内容を自分のアプリ用に変更する
以下は設定する必要のある内容です。
名称 変数名 説明 アプリバージョン VERSION アプリのバージョンを"1.0"のように入力 アプリ名 APP_NAME アプリの名前(スペースありでもよい) exeファイル名 EXE_NAME フォルダ名等に使用(スペース等が無い方がよい) アプリ説明 DESCRIPTION 説明はなくてもよい 作成者 AUTHOR アプリの作成者 パッケージ PACKAGES アプリに使用しているライブラリを記載 含めたいファイル INCLUDE_FILE インストーラに含めたいファイル スクリプト SCRIPT_FILENAME Pythonで作成した.pyファイル アイコン ICON_PATH アイコンファイル(Noneでなし) デスクトップショートカット ADD_DESKTOP_SHORTCUT デスクトップにショートカットを作成するかどうか スタートメニューショートカット ADD_START_MENU_SHORTCUT スタートメニューにショートカットを作成するかどうか コンソール画面無効化 WITHOUT_CONSOLE 黒いコンソール画面を表示するか UUID UUID アプリケーションを一意に識別するためのID
-
インストーラを作成する
setup.pyの上部分に必要な情報を記載したら、あとは以下のコマンドを実行してインストーラを作成すれば完了です。python setup.py bdist_msi
-
完成したインストーラを確認する
完成したインストーラはdist
というフォルダの中に入っています。
自分のPCにインストールして、動作等を確認してください。
終わりに
cx_freezeを使用してPython用のexeインストーラを作成する方法を紹介しました。
pyinstallerがよく使われると思うので、cx_freezeの情報を集めることが大変だったのでこの記事が参考になれば幸いです。