Tkinterを扱うファイルをexe化!?Pyinstallerの活用方法を解説
今回はTkinterを扱うファイルをexe化するために、Pyinstallerの活用方法を解説いたします。Pyinstallerの使い方がわからない、exe化に関して詳しく知りたい方へおすすめです。是非最後までご一読ください。
執筆者 - おすすめの記事3選
そもそもPyinstallerとは?
Pyinstallerを簡単に説明すると、Pythonファイルをexe化するものになります。
exe化とは?
exe化とは、ダブルクリックすればコードを動かせるファイルを生成することを意味します。
要するにPyinstallerを利用すると、ダブルクリックでコードを動かせるファイルを生成できると言うことです。
Pyinstallerを利用する目的
ではなぜPyinstallerを利用するのでしょう?
Pyinstallerを利用する目的として
- 開発者以外の利用者に対して、ファイルの配布を容易にする
- OSなどの環境依存の問題を解決
- Pythonを利用していない、一般ユーザーの方も手軽に利用できる
が挙げられます。
確かに一般ユーザーの利用を考える場合には、Pyinstallerを活用してexe化が必須ですね。
Pyinstallerのインストール
今回はPyinstallerの使い方を学ぶために、Tkinterを扱うファイルをexe化することに致します。丁寧に説明いたしますので、是非最後までご確認ください。
手順としては、
- Pyinstallerのインストール
- 下準備
- exe化
- exeファイルの実行
で行います。
筆者の開発環境
開発環境 | バージョン |
---|---|
MacOS Big Sur | 11.4 |
Pyenv | 1.2.27 (ターミナルを開いて、$ pyenv -v で確認する) |
Python | 3.9.0 (ターミナルを開いて、$ python -V で確認する。pipを活用するので、pipが標準で搭載される、version3.4以降の利用を推奨します。) |
シェル | zsh (ターミナルを開いて、$ echo $SHELL で確認する) |
pipを用いてPyinstallerのインストール
以下の手順でPyinstallerのインストールを行います。
- ターミナルを起動
cd desktop
を実行(デスクトップディレクトリへ移動)pip install pyinstaller
を実行(pipを活用して、Pyinstallerをインストール)
下準備
次に下準備として、Tkinterを扱うファイルを作成します。
- デスクトップディレクトリにて、
touch test.py
を実行(test.pyファイルを作成) - 以下に記述するコードを、
test.py
ファイルへ貼り付ける test.py
ファイルを保存するpython test.py
を実行する
こちら2. (以下に記述するコードをtest.py
ファイルへ貼り付ける)で説明したコードになります。
1import tkinter as tk
2
3class Application(tk.Frame):
4 def __init__(self, master=None):
5 # Windowの初期設定を行う。
6 super().__init__(master)
7
8 # Windowの画面サイズを設定する。
9 # geometryについて : https://kuroro.blog/python/rozH3S2CYE0a0nB3s2QL/
10 self.master.geometry("300x200")
11
12 # Windowを親要素として、label Widgetを作成する。
13 # text : テキスト情報
14 # width : 幅の設定
15 # height : 高さの設定
16 # bg : 背景色の設定
17 # 色について : https://kuroro.blog/python/YcZ6Yh4PswqUzaQXwnG2/
18 # Labelについて : https://kuroro.blog/python/Pj4Z7JBNRvcHZvtFqiKD/
19 label = tk.Label(self.master, text="testtest", width=30, height=15, bg="red")
20
21 # Windowを親要素とした場合に、label Widgetをどのように配置するのか?
22 # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/
23 label.pack()
24
25# Tkinter初学者参考 : https://docs.python.org/ja/3/library/tkinter.html#a-simple-hello-world-program
26if __name__ == "__main__":
27 # Windowを生成する。
28 # Windowについて : https://kuroro.blog/python/116yLvTkzH2AUJj8FHLx/
29 root = tk.Tk()
30 app = Application(master=root)
31 # Windowをループさせて、継続的にWindow表示させる。
32 # mainloopについて : https://kuroro.blog/python/DmJdUb50oAhmBteRa4fi/
33 app.mainloop()
また4. (python test.py
を実行する)を行うと、以下の画像のように表示されます。
exe化
「exe化」の章では、先ほど作成したtest.py
ファイルをexe化します。
デスクトップディレクトリでpyinstaller test.py
と実行ください。
うまくいくと以下の画像の緑色枠で囲まれるフォルダやファイルが生成されます。
OSError: Python library not found: libpython3.xm.dylib, .Python, libpython3.x.dylibのエラー対策
筆者の場合、初めて「exe化」に挑戦した際、以下の画像のようなエラーが出ました。
Pythonのライブラリが見つからないことでPyinstallerできないと警告されました。。
対応するために、pyenvで利用するPythonのversionを同じにして、以下のコマンドを用いて、再インストールしました。
PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install 3.9.0
そして再度pyinstaller test.py
を実行すると、問題なくフォルダやファイルが生成されました。
exeファイルの実行
最後にexeファイルを実行します。
デスクトップに生成されたdistフォルダ内からtestディレクトリへ移動して、testをダブルクリックください。
すると以下の画像のように、python test.py
を実行した時と同じ結果が出力されます。
exe化が遅いと感じるあなたへ
exe化する際に、フォルダやファイルの生成が遅い...と感じる方もいらっしゃるかもしれません。
Pyinstallerはexe化する際、pipに含まれる全てのモジュールを組み込んで、フォルダやファイルを作成します。
よってpipに多くのモジュールを抱えていると、サイズの大きいフォルダやファイルが生成されるため、遅い...と感じることになります。
そこで不要なモジュールを含んで、exe化しないためにも、積極的に--excludeオプションを利用しましょう。
pyinstaller ファイル名 --exclude numpy
(pipに含まれる、numpyモジュールを除外して、exe化を行う)
Pyinstallerのオプション
Pyinstallerには様々なオプションが備えられています。よく使われるオプションをいくつか紹介いたします。
オプション名 | 詳細 | 利用例 |
---|---|---|
--onefile, -F | exeファイルのみを生成する。 | pyinstaller --onefile test.py or pyinstaller -F test.py |
-h, --help | Pyinstallerのオプションの詳細を表示する。 | pyinstaller -h or pyinstaller --help |
-v, --version | Pyinstallerのversionを表示する。 | pyinstaller -v or pyinstaller --version |
--log-level LEVEL | Pyinstaller実行時のログの表示レベルを設定する。LEVELには、(DEBUG, INFO, WARN, ERROR, CRITICAL(default : INFO))が入る | pyinstaller --log-level ERROR test.py (ERROR以上のログのみを表示する。) |
--exclude | pipに含まれる不要なモジュールを除外して、exe化を行う | pyinstaller test.py --exclude numpy |
-n, --name | フォルダやファイル名を変更する | pyinstaller test.py -n=hoge or pyinstaller test.py --name=hoge |
--clean | キャッシュを消去し、一時ファイルを削除して、exe化を行う | pyinstaller test.py --clean |
-y, --noconfirm | 生成フォルダや生成ファイルの上書き確認が、不要な場合に指定します | pyinstaller test.py -y or pyinstaller test.py --noconfirm |
その他のオプションに関しては、こちらの記事でまとめられていますので、是非ご確認ください。
まとめ
- PyinstallerとはPythonファイルをexe化するものになります。
- exe化とは、ダブルクリックすればコードを動かせるファイルを生成することを意味します。
- Pyinstallerはexe化する際、pipに含まれる全てのモジュールを組み込んでしまいます。