daisukeの技術ブログ

AI、機械学習、最適化、Pythonなどについて、技術調査、技術書の理解した内容、ソフトウェア/ツール作成について書いていきます

PyInstallerを使ってTkEasyGUIを使ったGUIアプリ(url2title)をexe化する

前回、URLをコピーしてクリップボードに送ると、Webスクレイピングで記事のタイトルを取得して表示するPythonのTkEasyGUIを使ったGUIアプリ(url2title)を作りました。

はてなブログの記事のURLが日付の場合に、何の記事かを確認するのに、いちいちブラウザで開いてタイトルを確認するのが手間なので、ツール化したものです。

このGUIアプリを使うには、Pythonをインストールした環境が必要でした。今回は、PyInstallerを使って、GUIアプリ(url2title)をexe化して、Python環境がなくても実行できるようにします。

PyInstallerはOSSで商用利用可能です。

それでは、やっていきます!

はじめに

このGUIアプリ(url2title)を公開したときの記事はこちらです。

daisuke20240310.hatenablog.com

このGUIアプリ(url2title)は「TkEasyGUI」を使ってます。「TkEasyGUI」を紹介した記事はこちらです。

daisuke20240310.hatenablog.com

また、URLからタイトルに変換する方法は、以前に紹介したWebスクレイピングを使ってます。そのときの記事はこちらです。

daisuke20240310.hatenablog.com

エンジニアグループのランキングに参加中です。

気楽にポチッとよろしくお願いいたします🙇

今回は、Windows環境で、PythonスクリプトをPyInstallerを使ってexe化する方法の紹介と、TkEasyGUIを使ったGUIアプリ(url2title)のexe化と、それを使ってもらえるように公開します。

PyInstallerのインストール

PyInstallerの公式サイトです。

pyinstaller.org

コマンドプロンプトなどで、以下のパッケージをインストールします。

pip install pyinstaller

PyInstallerをとりあえず使ってみる

公式サイトのドキュメント(Using PyInstaller — PyInstaller 6.6.0 documentation)を見ると、たくさんのオプションがありました。

まずは、そのまま実行してみます。

$ pyinstaller url2title.py
(ログが長いため省略)
207941 INFO: Building COLLECT COLLECT-00.toc completed successfully.

だいぶ時間がかかりました。長すぎて貼れませんが、かなり長いログが出力されました。なんとか成功したようです。

buildディレクトリとdistディレクトリが作られていました。

dist/url2title/ に、url2title.exe が出来てました。

早速実行してみました。実行は出来ましたが、1ファイルのexeでは実行できず、一緒に作成されたディレクトリがないと動かなかったです(--onefileオプションが必要だった)。それでもexeは約4.5MBありました、大きいです。

PyInstallerをちゃんと調べて使ってみる

そこで、いろいろ調べてみました。ChatGPTにも聞きました(笑)。

--onefileを指定すれば1ファイルになり、--noconsoleを付けると、バックグラウンドに黒いコマンドプロンプトのウィンドウを起動しないようにできるようです。

また、仮想環境を作って、必要なライブラリだけをインストールした環境を作ってからexe化しないと、大きなexeファイルが作られてしまうようです。

コマンドプロンプト以外(PowerShellとか)で実行すると、いろいろややこしかったので、コマンドプロンプトでやってみます。

仮想環境を作ります。だいぶ時間がかかります。

G:\マイドライブ\GitHub\experiment\url2title2>python -m venv myenv

myenvというディレクトリが出来ているので、仮想環境を有効(アクティベート)します。

G:\マイドライブ\GitHub\experiment\url2title2>myenv\Scripts\activate
(myenv) G:\マイドライブ\GitHub\experiment\url2title2>pip list
Package    Version
---------- -------
pip        23.0.1
setuptools 65.5.0

無事に仮想環境に入れました。では、最低限必要なライブラリをインストールしていきます。

(myenv) G:\マイドライブ\GitHub\experiment\url2title2>pip install requests beautifulsoup4 TkEasyGUI pyinstaller
(myenv) G:\マイドライブ\GitHub\experiment\url2title2>pip list
Package                   Version
------------------------- --------
altgraph                  0.17.4
beautifulsoup4            4.12.3
certifi                   2024.2.2
charset-normalizer        3.3.2
idna                      3.7
packaging                 24.0
pefile                    2023.2.7
pillow                    10.3.0
pip                       23.0.1
pyinstaller               6.6.0
pyinstaller-hooks-contrib 2024.5
pyperclip                 1.8.2
pywin32-ctypes            0.2.2
requests                  2.31.0
setuptools                65.5.0
soupsieve                 2.5
TkEasyGUI                 0.2.67
urllib3                   2.2.1

思った以上に、いろいろなパッケージが一緒にインストールされました。

では、exe化をやります。

(myenv) G:\マイドライブ\GitHub\experiment\url2title2>pyinstaller --onefile --noconsole url2title.py

成功しました。distディレクトリの中に url2title.exe が出来ていました。では、実行します。

すると、このような警告が出ました。不明な発行元という扱いのようです。正当なアプリケーションにするには、正式な認証機関に承認してもらうことが必要らしく、個人が簡単に配布することはハードルが高いようです。

以下のように進めると、回避できます。詳細情報をクリックします。

デジタル署名されてないアプリケーションの警告
デジタル署名されてないアプリケーションの警告

アプリが「url2title.exe」になっていることを確認して(変なアプリでないことを確認して)、「実行」をクリックします。

アプリが「url2title.exe」になっていることを確認して実行をクリック
アプリが「url2title.exe」になっていることを確認して実行をクリック

一応、無事に起動しました。

実行できた
実行できた

一度、起動できれば、それ以降は、何も聞かれずに普通に起動できるようになりました。

Windowsアプリケーションを配布するのは、高いハードルがありますね。

一応、exe化したものをGitHubにアップしましたので、試してみたいという方は、使ってみてください。

github.com

使い方としては、一緒のフォルダに入ってる「url2title.ini」を、自分のブログのURLに書き換えてください。

一緒に入ってるurl2title.iniファイルの内容
一緒に入ってるurl2title.iniファイルの内容

今回は以上です!

終わりに

今回は、Python環境のない場合でも実行できる、Pythonスクリプトのexe化をやってみました。

無事にexe化は出来たのですが、あのような警告が出てしまっては、使う人は限られますね。Windowsアプリはハードルが高いと思いました。

思ったようなexe化にはなりませんでしたが、自分で使う分には、Pythonスクリプトのexe化は役に立つ場面はありそうです。

最後までお読みいただき、ありがとうございました。