こんにちは、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双方で対応可能な手順を以下に示します。
- Pythonファイルを作成
- インタラクティブシェルで実行ファイルを作成するコードを記述
- 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
ファイル、build
、dist
フォルダが新規作成されているはずです。
この中のdist
フォルダを開いてみましょう。
Pythonのexeファイルは、distフォルダの中に作成されます。
これをクリックして動作確認しましょう!デスクトップアプリが起動すればPythonファイルのEXE化成功です。
【参考】Pyinstallerのオプションコマンドでexeファイル作成方法を調整
前述では、Pyinstallerの最もシンプルな利用方法で実行ファイルを作成しました。
利用したPyinstallerのコードは、--onefile
のオプションのみ指定した以下でしたね。
pyinstaller <pyファイルのパス> --onefile
ここでは、Pyinstallerで指定できる代表的なオプションを併せて紹介します。
Pyinstallerオプション | 概要 |
---|---|
–onefile | 出力ファイルを1ファイルとしてまとめる |
-onedir | 出力ファイルを1ディレクトリとしてまとめる |
-noconsole | EXEファイル実行時のコンソール起動を無効化 |
-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.py
exe化の際、srcフォルダにあるdocument.txt
も併せてリンクしたい場合、次のように記述すると良いです。
pyinstaller test.py --add-data 'src/document.txt:.' --onefile
指定のディレクトリをリンク
上記ディレクトリ構成でtest.py
exe化の際、srcフォルダにある全てのファイルをリンクしたい場合、次のように記述すると良いです。
pyinstaller test.py --add-data 'src:src' --onefile
【参考】Pythonを活用した様々なお役立ち情報
当サイトではPythonを活用した様々なお役立ち情報を配信しています。
Pythonでできること・仕事に応用
「Pythonで実現できることを知りたい」「Pythonスキルを仕事で活かしたい」方はこちら!
Python✖️AI・機械学習
Python活用の最大メリットの1つであるAI・機械学習について詳しく知りたい方はこちら!
Python✖️投資自動化(仮想通貨)
Pythonはフィンテックとの相性が良く、その中でも仮想通貨自動売買タスクは近年注目度の高い領域です。フィンテック・投資に興味がある方はこちら!
最後に
お問い合わせフォーム
上記課題に向けてご気軽にご相談下さい。
お問い合わせはこちら