こんにちは、すのくろです。
本記事では、前回紹介した「tkinter」を使って作成した、csvファイルをxlsxファイルに変換するプログラムを、わざわざpythonプログラムを立ち上げて実行しなくても良いように、アプリで簡単に立ち上げて利用したり、他の人のPCでも使えるようにする方法について述べていきます!
tkinterを使って作成した効率化アプリの作成方法の前回記事はこちらです。
結論としては、プログラムを第三者に配布する際には、PyInstallerを使うと、Pythonスクリプトを実行可能な形式に変換できます。
今回の方法で、他のPython環境のないPCでも起動させることができるので汎用性もかなり高まります!
以下に、Pythonスクリプトを実行可能な実行ファイル(exeファイル)に変換する手順を説明します!
実行ファイルの作成
今回は、以前の記事で紹介したtkinterを使ってGUI上でフォルダからcsvファイルを選んで拡張子(ファイル形式)を変換してあげるプログラムを使用します。
コードはこちらです。
このコードを「tkiner_app.py」としてPythonファイルで保存しておきます。
import tkinter as tk
from tkinter import filedialog
import pandas as pd
# import openpyxl
# from openpyxl.styles import Font
# import xlsxwriter
# Tkinterウィンドウの作成
window = tk.Tk()
window.title("CSV to Excel Converter")
window.geometry('500x400')
window.resizable(0, 0)
# ボタンクリック時の処理
def convert():
# CSVファイルを選択するダイアログを表示
csv_file_path = filedialog.askopenfilename(filetypes=[("CSV Files", "*.csv")])
# 選択したファイルがCSVファイルでない場合はエラーメッセージを表示して終了
if not csv_file_path.endswith(".csv"):
tk.messagebox.showerror("Error", "Please select a CSV file.")
return
# 変換処理を実行する関数を呼び出す
convert_csv_to_excel(csv_file_path)
# CSVをExcelに変換する関数
def convert_csv_to_excel(csv_file_path):
try:
# CSVファイルをpandasのDataFrameとして読み込む
df = pd.read_csv(csv_file_path)
# Excelファイルに変換して保存する
excel_file_path = csv_file_path.replace(".csv", ".xlsx")
# xlsxwriterを使用してExcelファイルを作成
writer = pd.ExcelWriter(excel_file_path, engine='xlsxwriter')
df.to_excel(writer, index=False, sheet_name='Sheet1')
# xlsxwriterのオブジェクトを取得
workbook = writer.book
worksheet = writer.sheets['Sheet1']
# セルのフォントをエクセル標準に設定
default_font = workbook.add_format({'font_name': 'Calibri', 'font_size': 11})
for col_num, col_letter in enumerate(df.columns):
# 列の幅を自動調整
column_width = max(df[col_letter].astype(str).map(len).max(), len(col_letter))
worksheet.set_column(col_num, col_num, column_width)
# セルのフォントを設定
worksheet.write(0, col_num, col_letter, default_font)
# Excelファイルを保存
writer.close()
tk.messagebox.showinfo("Success", "Conversion completed. Excel file saved at: {}".format(excel_file_path))
except Exception as e:
tk.messagebox.showerror("Error", "Conversion failed: {}".format(str(e)))
# ボタンを作成
convert_button = tk.Button(window, text="Convert", command=convert)
convert_button.pack(padx=100, pady=30)
# Tkinterウィンドウを実行
window.mainloop()
プログラムのExeファイル化
コマンドプロンプト(ターミナル)を開き、コマンドを実行していきます。
仮想環境の構築
pyinstallerですぐにexeファイルを作成しても良いのですが、自分が普段使っている環境だと様々なライブラリなどがインストールされている状態です。
pyinstallerで作成されたEXEファイルは、Pythonのソースコード上でimport されているライブラリだけでなく、python 環境そのものにインストール済みのパッケージも含めてEXE化します。
つまり、exeファイルを作成する際に作成アプリに不要なライブラリまで合わせて作成されるので、exeファイルの作成、起動、処理にかなり時間がかかります。
なので、仮想環境を新たに作り直し、アプリの実行に必要なものだけインストールしてアプリを作成する方が使い勝手が良いです。
ターミナルで任意のディレクトリ(例ではMyfolder)に移動し、仮想環境を作成します。
cd Myfolder
python -m venv .venv
これによって指定パスのフォルダ(Myfolder)内に.venvが作成されたことを確認してください。
もしかしたら隠しフォルダになっていて見えない場合もあるので、フォルダの設定で隠しファイルも表示するようにして確認してみてください。
仮想環境に入る
仮想環境に入ります。
MacOSの場合
$ source .venv/bin/activate
Windowsの場合
$ .venv¥Scripts¥activate
仮想環境に入るとターミナルの1番下の表示が以下のようになります。
(.venv) C:xxx/MyProject>
Pyinstallerなど必要ライブラリをインストール
仮想環境内で、Pyinstallerをインストールします。
Pyinstallerをインストール
$ pip install pyinstaller
他にスクリプト内で使用しているライブラリがある場合は、そちらも全てインストールします。
pipで必要なライブラリを全てインストール
$ pip install numpy
$ pip install pandas
・
・
・
これでアプリに必要最低限なものだけインストールしてexeを軽くすることができます。
Pyinstallerでexe化
仮想環境内で、Pyinstallerのコマンドを実行してexe化します。
今回は今のディレクトリ内にある「my_app」フォルダの「tkinter_app.py」というPythonファイルをexe化します。
pyinstaller --onefile my_app/tkinter_app.py
上を実行後、「successfully」の文字が最後に出たら、exeの作成が成功したことが分かります。
「dist」フォルダが作成され、その中に「tkinter_app」というPythonファイルと同じ名前のexeファイルが作成されていると思います。
ここで「–onefile」としているのは、作成されたexeファイルを全て一つにまとめるという意味です。
一つにまとまっていた方が他の人に配布もしやすいので、「–onefile」は付けておいた方が無難です。
他のPyInstallerの一般的なコマンドとしては下記のようなものがあります。
コマンド | 意味 |
---|---|
--name <name> | 実行可能ファイルの名前を指定します。 |
--icon <iconfile.ico> | 実行可能ファイルのアイコンを指定します。 |
--noconsole | コンソールウィンドウを表示せずに実行可能ファイルを作成します。 |
--debug <level> | デバッグモードで実行可能ファイルを作成します。 |
--clean | 一時ファイルやキャッシュを削除してクリーンな状態でビルドします。 |
--upx-dir <path> | UPXパッカーのディレクトリを指定します。 |
--hidden-import <module> | 静的解析で検出できなかったモジュールを明示的に指定します。 |
--add-data <src;dest> | 追加のデータファイルを実行可能ファイルと一緒にバンドルします。 |
--add-binary <src;dest> | 追加のバイナリファイルを実行可能ファイルと一緒にバンドルします。 |
--exclude-module <module> | 特定のモジュールを実行可能ファイルから除外します。 |
--runtime-tmpdir <path> | ランタイムの一時ファイルのディレクトリを指定します。 |
--specpath <path> | .specファイルの出力先ディレクトリを指定します。 |
--additional-hooks-dir <path> | 追加のフックスクリプトのディレクトリを指定します。 |
上記のコマンドは、PyInstallerのさまざまな機能と設定を制御するために使用されます。
各コマンドの意味や使い方の詳細については、PyInstallerの公式ドキュメントを参照してください。
exeファイルの実行
それでは、実際に動くのか確認してみましょう!
「dist」フォルダにある「tkinter_app」を起動させてみます。
そうすると黒いターミナルが起動して、少し時間が経ったらtkinterで作成したポプアップが表示されうまく起動できました!
これで、無事にPythonのプログラムをわざわざ立ち上げることなく、このexeファイルを起動させるだけで指定の処理などを行えることができるようになりました。
また、このexeファイルを他のPython環境のないPCでも起動させることができるので汎用性もかなり高まります。
ただし、Macで作成した場合はmacのみ、Windowsで作成した場合はWindowsのみで動きます。
まとめ
今回は以前作成したtkinterを使ってGUIでアプリを操作するプログラムを、
・わざわざエディタなどを立ち上げずに実行するため
・python環境がないPCでも使えるようにするため
の手法として「pyinstallerを使い、Pythonスクリプトを実行可能な形式(exeファイル)に変換する方法について解説しました。
これで次からの手間や他者や他のPCでも使える汎用性が高まったと思います!
また、今回は無事に作成できた例を紹介しましたが、pyinstallerでは作成された際に結構エラーでできない場合があります。
そのエラーの解決内容については別記事で取り上げていますのでよかったら参考にしてください。
tkinter以外にも、Pythonは自由度が高く、豊富なライブラリがまだまだ用意されているため、様々なデータ処理に応用することができます!
さらにPythonのスキルを高めて、効率的に業務を行いたい、高度なPythonを中心としたプログラミングをより体系的に学びたいと言う方向けに、おすすめのオンラインスクールを2つ厳選して紹介していますので、こちらもよければご覧ください!
自分も一度体系的にPythonを学んだことで、一気に日々の業務や人生が変わったと感じています!
以上、ここまでお読みいただき、ありがとうございました!
コメント