KURORO BLOGのロゴ

このエントリーをはてなブックマークに追加
Tkinterを扱うファイルをexe化!?Pyinstallerの活用方法を解説

Tkinterを扱うファイルをexe化!?Pyinstallerの活用方法を解説

今回はTkinterを扱うファイルをexe化するために、Pyinstallerの活用方法を解説いたします。Pyinstallerの使い方がわからない、exe化に関して詳しく知りたい方へおすすめです。是非最後までご一読ください。

目次
  1. そもそもPyinstallerとは?
    1. exe化とは?
    2. Pyinstallerを利用する目的
  2. Pyinstallerのインストール
    1. 筆者の開発環境
    2. pipを用いてPyinstallerのインストール
  3. 下準備
  4. exe化
    1. OSError: Python library not found: libpython3.xm.dylib, .Python, libpython3.x.dylibのエラー対策
  5. exeファイルの実行
  6. exe化が遅いと感じるあなたへ
  7. Pyinstallerのオプション
  8. まとめ
  9. 参考文献
目次を開く⬇︎

そもそもPyinstallerとは?

Pyinstallerを簡単に説明すると、Pythonファイルをexe化するものになります。

exe化とは?

exe化とは、ダブルクリックすればコードを動かせるファイルを生成することを意味します。

要するにPyinstallerを利用すると、ダブルクリックでコードを動かせるファイルを生成できると言うことです。

Pyinstallerを利用する目的

ではなぜPyinstallerを利用するのでしょう?

Pyinstallerを利用する目的として

  • 開発者以外の利用者に対して、ファイルの配布を容易にする
  • OSなどの環境依存の問題を解決
  • Pythonを利用していない、一般ユーザーの方も手軽に利用できる

が挙げられます。

確かに一般ユーザーの利用を考える場合には、Pyinstallerを活用してexe化が必須ですね。

Pyinstallerのインストール

今回はPyinstallerの使い方を学ぶために、Tkinterを扱うファイルをexe化することに致します。丁寧に説明いたしますので、是非最後までご確認ください。

手順としては、

  1. Pyinstallerのインストール
  2. 下準備
  3. exe化
  4. exeファイルの実行

で行います。

筆者の開発環境

開発環境バージョン
MacOS Big Sur     11.4
Pyenv1.2.27 (ターミナルを開いて、$ pyenv -vで確認する)
Python3.9.0 (ターミナルを開いて、$ python -Vで確認する。pipを活用するので、pipが標準で搭載される、version3.4以降の利用を推奨します。)
シェルzsh (ターミナルを開いて、$ echo $SHELLで確認する)

pipを用いてPyinstallerのインストール

以下の手順でPyinstallerのインストールを行います。

  1. ターミナルを起動
  2. cd desktopを実行(デスクトップディレクトリへ移動)
  3. pip install pyinstallerを実行(pipを活用して、Pyinstallerをインストール)

下準備

次に下準備として、Tkinterを扱うファイルを作成します。

  1. デスクトップディレクトリにて、touch test.pyを実行(test.pyファイルを作成)
  2. 以下に記述するコードを、test.pyファイルへ貼り付ける
  3. test.pyファイルを保存する
  4. 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, --helpPyinstallerのオプションの詳細を表示する。pyinstaller -h or pyinstaller --help
-v, --versionPyinstallerのversionを表示する。pyinstaller -v or pyinstaller --version
--log-level LEVELPyinstaller実行時のログの表示レベルを設定する。LEVELには、(DEBUG, INFO, WARN, ERROR, CRITICAL(default : INFO))が入るpyinstaller --log-level ERROR test.py(ERROR以上のログのみを表示する。)
--excludepipに含まれる不要なモジュールを除外して、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に含まれる全てのモジュールを組み込んでしまいます。

参考文献