PythonプログラムをEXE化|Pyinstallerによる実行ファイル作成方法をWindows・Mac対応で解説

こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!

こんな方におすすめ!
  • Pythonファイルを実行ファイル(.exe)に変換したい
  • Pythonファイルを第三者に配布したい
目次

実行ファイル(.exe)とは?

実行ファイルとは、コンピュータでそのまま実行できるバイナリ形式のプログラムを指します。Windowsで主に使用され、拡張子は.exeとして取り扱わます。

EXE化したファイルを実行する場合、そのEXEファイルの動作由来となるプログラム言語環境に依存することなく、コンピュータ上で直接実行できるようになるのが特徴です。例えば、Pythonプログラムを由来とするEXEファイルも、Pythonの環境が無いPCに移行して実行できるようになります。

EXEファイル化するメリット

実行ファイルは、作成したプログラムを第三者に配布する時に作成されます。この時のメリットは以下です。

  • 第三者にソースコードの環境を構築してもらう必要がない。(実行ファイルの状態で配布すると、例えばPythonやライブラリインストールなど複雑な依頼は不要)
  • 有料ソフトとして配布が可能
  • 実行ファイルの中身はバイナリのプログラムであるため、ソースコードの改ざん防止や知的財産権の保護に有効。

PythonプログラムをEXE化する方法

本記事ではPythonファイル(.py)を実行ファイル(.exe)に変換する方法を解説します。実行ファイル作成には、Pyinstallerというライブラリを活用します。

Pyinstallerとは?|Python.pyを実行ファイルに変換する準備

Pyinstallerとは、Pythonプログラムを実行ファイルに変換するためのライブラリです。

Pyinstallerを活用してEXEファイルを作成する場合、いくつか制約がありますため事前に解説します。

【制約】対応OSについて

以下のOSはPyinstallerでのEXEファイル作成に対応しています。

  • Windows (32-bit/64-bit)
  • GNU/Linux (32-bit/64-bit)
  • macOS(64-bit)

【制約】EXEファイル配布時

Pyinstallerで作成したEXEファイルを第三者に配布する場合、以下の点に注意が必要です。

  • Windows PCで作成したEXEファイルはWindows PCでのみ利用可能
  • MAC PCで作成したEXEファイルはMAC PCでのみ利用可能
  • 64bit OS環境で作成した実行ファイルは32bitOSで利用不可
  • 32bit OS環境で作成した実行ファイルは32bit/64bit双方で利用できる

【制約】EXEファイル作成時

PyinstallerでEXEファイルを作成する場合、次のような制約がある点に注意が必要です。

  • Pythonは3.6以上のバージョンを利用していること
  • PyinstallerでPythonライブラリをリンクする際、サポートされているものとされていないものがある。事前に公式サイトでの確認を推奨(https://pyinstaller.org/en/stable/)

【事前準備】Pyinstallerのインストール

Pyinstallerを利用する場合、事前に以下のコマンドを入力してインストールしておく必要があります。

pip install pyinstaller

【実践】PyinstallerでPythonプログラムをEXE化|実行ファイル作成手順

それでは実際にPyinstallerを利用してPythonプログラムをEXE化する方法を解説します。

Windows、Mac双方で対応可能な手順を以下に示します。

  1. Pythonファイルを作成
  2. インタラクティブシェルで実行ファイルを作成するコードを記述
  3. Pyinstallerを実行してEXEファイル作成

【事前準備】Pythonファイルの作成(.py)

test.pyというpythonファイルを今回準備します。

サンプルとして、上図のようなデスクトップ簡易アプリを起動するソースコードを準備していますので適時ご活用ください。今回はPyinstallerでのEXE化が目的であるため、コードの中身解説は割愛します。コピペで利用してみましょう。

import tkinter

class DesktopApp(tkinter.Frame):
    def __init__(self, window=None):
        super().__init__(window, width=380, height=290,borderwidth=1, relief="groove")
        self.window = window
        self.pack()
        self.pack_propagate(0)
        self.create_widgets()

    # ウィジェット作成
    def create_widgets(self):
        # 実行ボタン
        submitBtn = tkinter.Button(self)
        submitBtn["text"] = "実行する"
        submitBtn.pack(side="bottom")

# Tkinterオブジェクト
window = tkinter.Tk()
# アプリのタイトル
window.title("テストアプリ")
# 画面の大きさ
window.geometry("400x300")
# アプリケーションオブジェクト
App = DesktopApp(window=window)
App.mainloop()

【事前準備】シェルを起動しpythonファイルのディレクトリに移動

インタラクティブシェル(Macの場合はターミナル、Windowsの場合はコマンドプロンプト)を起動し、前述で作成したPythonファイルtest.pyがあるディレクトリに移動しましょう。

例えば、Desktop/Pyinstaller/test.pyにファイルがある場合、シェルには以下を入力します。

cd Desktop/Pyinstaller
cd Desktop¥Pyinstaller

【実践】Pyinstallerを起動してEXEファイル作成

前述のインタラクティブシェルの操作にてPythonファイルのディレクトリに移動後、次のコマンド実行します。

pyinstaller test.py --onefile

上記実行後、test.pyを保存していたディレクトリを確認してみましょう。

test.specファイル、builddistフォルダが新規作成されているはずです。

この中のdistフォルダを開いてみましょう。

Pythonのexeファイルは、distフォルダの中に作成されます。

これをクリックして動作確認しましょう!デスクトップアプリが起動すればPythonファイルのEXE化成功です。

【参考】Pyinstallerのオプションコマンドでexeファイル作成方法を調整

前述では、Pyinstallerの最もシンプルな利用方法で実行ファイルを作成しました。

利用したPyinstallerのコードは、--onefileのオプションのみ指定した以下でしたね。

pyinstaller <pyファイルのパス> --onefile

ここでは、Pyinstallerで指定できる代表的なオプションを併せて紹介します。

Pyinstallerオプション概要
onefile出力ファイルを1ファイルとしてまとめる
-onedir出力ファイルを1ディレクトリとしてまとめる
-noconsoleEXEファイル実行時のコンソール起動を無効化
-clean前回のキャッシュおよび前回出力のディレクトリを削除
-name.exeファイルに名前を指定
-icon作成した.exeファイルにアイコンを設定
-exclude <ライブラリ>除外したいライブラリを指定
-hidden-import <ライブラリ> .exeファイルにリンクしたいライブラリを指定
-add-data <パス:.> .exeファイルにリンクしたいデータを指定
csvファイル、データベース等をリンクする際に有効
-add-binary <パス:.>.exeファイルにリンクしたいバイナリファイルを指定
pythonでimportされないドライバ系ファイルのリンクに有効
-helpヘルプメッセージを表示
-versionプログラムバージョンを表示

この中でも特に利用頻度の高いオプションコマンドの使い方は後述します。

コンソールの起動を無効化|-noconsole

.exeファイル起動時のデフォルト設定では、コンソールも併せて起動するようになっています。コンソールの起動を無効化したい場合、次のように記述すると良いです。

pyinstaller <pyファイルのパス> --onefile --noconsole

関連ファイルをリンク|-add-data

csvファイルやデータベース、テキストファイル等をリンクしたい場合、--add-dataのオプションコマンドを指定します。

例えば上記ディレクトリ構成でtest.pyexe化の際、srcフォルダにあるdocument.txtも併せてリンクしたい場合、次のように記述すると良いです。

pyinstaller test.py --add-data 'src/document.txt:.' --onefile

【参考】Pythonを活用した様々なお役立ち情報

当サイトではPythonを活用した様々なお役立ち情報を配信しています。

Pythonでできること・仕事に応用

Pythonで実現できることを知りたい」「Pythonスキルを仕事で活かしたい」方はこちら!

Python✖️AI・機械学習

Python活用の最大メリットの1つであるAI・機械学習について詳しく知りたい方はこちら!

Python✖️投資自動化(仮想通貨)

Pythonはフィンテックとの相性が良く、その中でも仮想通貨自動売買タスクは近年注目度の高い領域です。フィンテック・投資に興味がある方はこちら!

最後に

この記事が気に入ったら
フォローしてね!

本記事をシェア!
目次