【cx_Freeze】複数のソースファイルを使ってexeを生成する方法

cx_Freezeを使うことで、PythonプログラムをWindows環境でならどこでも動かすことができるexeファイルに変換することができます。

ですが、Pythonでプログラミングを行う際、2つ以上のファイルに分けて開発することも多いでしょう。

そこで今回は、2つ以上の複数の操作ファイルを使って開発していた場合に、cx_Freezeを使ってexeファイルを作成する方法について紹介していきます。

目次から探す

プロジェクトのディレクトリ構成

プロジェクトを始める前に、まずは適切なディレクトリ構成を作ることが重要です。

以下は一般的なプロジェクトのディレクトリ構成の例です。

project/
├── src/
│   ├── main.py
│   ├── module1.py
│   └── module2.py
└── build/

この例では、プロジェクトのルートディレクトリにprojectというディレクトリを作成し、その中にsrcディレクトリとbuildディレクトリを作成しています。

この記事では、上記の構成で行うものとして解説を進めていきます。

srcディレクトリにはプロジェクトのメインファイルであるmain.pyと、他のモジュールファイルであるmodule1.pymodule2.pyを配置します。

buildディレクトリは、後ほどsetup.pyを実行して生成されるexeファイルを格納するためのディレクトリです。

必要なソースファイルの作成

プロジェクトのディレクトリ構成ができたら、次は必要なソースファイルを作成します。

まず、main.pyというファイルを作成し、以下のような内容を記述します。

# main.py
import module1
import module2
def main():
    module1.say_hello()
    module2.say_goodbye()
if __name__ == "__main__":
    main()

また、module1.pymodule2.pyというファイルも作成し、それぞれ以下のような内容を記述します。

# module1.py
def say_hello():
    print("Hello from module1!")
# module2.py
def say_goodbye():
    print("Goodbye from module2!")

これで、プロジェクトに必要なソースファイルが作成されました。

setup.pyファイルの作成

次に、setup.pyというファイルを作成します。

このファイルは、cx_Freezeを使ってexeファイルを生成するために必要な設定を行うためのファイルです。

# setup.py
import sys
from cx_Freeze import setup, Executable
# ビルド対象のスクリプトファイルを指定
target_script = "src/main.py"
# exeファイルの設定
exe = Executable(
    script=target_script,
    base="Win32GUI" if sys.platform == "win32" else None
)
# セットアップの設定
setup(
    name="MyProject",
    version="1.0",
    description="My Project Description",
    executables=[exe]
)

target_scriptには、ビルド対象のスクリプトファイルのパスを指定します。

上記の例では、src/main.pyがビルド対象のスクリプトファイルとなっています。

module1.pymodule2.pyがsetup.pyの構成に含まれていませんが、cx_Freezeはビルド対象のスクリプトファイルに記述されているimport文から解析され、必要なほかのスクリプトファイルが自動的に組み込まれるようになっています。

そのため、プロジェクトを構成する操作ファイルの数が増えても、ソースコード内でインポート文を正しく記述するだけでしっかり認識してくれます。

setup.pyを実行してexeファイルを生成する

準備が整ったら、setup.pyを実行してexeファイルを生成します。

ターミナルやコマンドプロンプトを開き、プロジェクトのルートディレクトリに移動してから以下のコマンドを実行します。

python setup.py build

これにより、buildディレクトリ内にexeファイルが生成されます。

以上が、cx_Freezeを使って複数のソースファイルを使ってexeファイルを生成する方法です。

ソースファイルが増えたからといって特別な設定をsetup.pyにする必要はなく、自動的に読み込んでくれるので、1ファイルのビルどの時と同じように、cx_Freezeでexe化するといいでしょう。

目次から探す