ビジネスパーソン・ガジェット置場 empty lot for business

営業や仕事、それに伴う生活を便利に楽にするツール、ガジェットを作ります。既にあるツールも自分用にカスタマイズ。

python: exe化 windowsでpandasを利用したプログラムを実行

備忘録です。

pythonのpandasを使ったプログラムをクライアントに渡したいときにexe化した方法です。こちらの記事で作ったツールをexe化した例で記載します。

 

pandasとtkinterでコメントを自動で作成するツール - ビジネスパーソン・ガジェット置場 empty lot for business

 

PyInstallerを使用してexe化

pythonで作ったファイルをクライアントに渡して実行してもらうときに、クライアントさんがわざわざpythonの環境を作ってくれることはないかと思います。そこでクリックすれば起動して実行できるようにしたい。そんなときにexe化する色々なライブラリがあるようなのですが、今回はPyInstallerを選んでみました。

 

PyInstallerでexe化する際の注意点

 

  • exe化する際に、PyInstallerはwindowsで実行すればwindowsで使用できるexeファイル、macで実行すればmacで使用できるものになる。
  • PyInstallerでexe化した場合、ファイル自体が重くなる。理由は開発環境にインストールされているライブラリがすべてインストールされてしまうからとのこと。
  • そのため、仮想環境を作って必要なライブラリだけをインストールして実行するのがベスト。そして仮想環境は使わずに実行しています。

今回は、クライアントのPCがWindowsということを想定しているのでwindowsで実行します。my機はmacなので、以前使用していたWindowsを引っ張り出してきてやってみました。ずっと使っていなかったから立ち上がりが遅い遅い。。。ファイルを開いたりするだけでかなりの時間がかかりやっぱりWindowsは。。。な感じでした。

PyInstallerのオプション

--onefile  

このオプションなしで実行すると沢山のファイルができてしまうが、このオプションをつけると1つのファイルにしてくれる。

--noconsole

このオプションなしの場合consoleが同時に開く。consoleが必要なければつける。

 

PyInstallerでexe化するコード

①PyInstallerのインストール

コマンドラインで下記を実行しインストール

py -m pip install pyinstaller

 

②必要なファイルをインストール

自分のWindowsにはpandasが入っていないので、pandasを上記と同様にインストール。

※pandasのみで実行した際にエラーが発生しopenpyxlをインストールするように促されたのでそちらもインストール。

 

③exeファイル作成

exeファイルにするためのpythonファイルを格納しているフォルダへ移動。

Windowsの場合、エクスプローラからそのフォルダへ移動して、上部アドレスバーをクリックし選択した状態(アドレスが青くなった状態)で「cmd」と入力するとそのフォルダへ移動した状態でコマンドラインが開きます。

 

# 今回実行するファイル名が[app.py] 
# オプションはこの段階でつける
py -m PyInstaller app.py --onefile --noconsole

 

④フォルダ内に生成された「app.exe」をクリック

フォルダ内にいくつかファイルやフォルダが生成されます。distフォルダ内にあるapp.exeをクリックすると今回のプログラムが実行されます。

 

⑤pandasで読み込むエクセルファイルはexeファイルと同じフォルダ内に

今回pandasでexelファイルを読み込みます。app.pyファイルと同じフォルダ階層におけば実行するようにプログラムを書いてい他ので、exeファイルと同じフォルダに置くと読み込みが可能となりました。

 

結果

ツールの詳細内容は下記参照で。

 

pandasとtkinterでコメントを自動で作成するツール - ビジネスパーソン・ガジェット置場 empty lot for business

うまく実行できました。

 

ただ、やはり重いのか?(35 MB)。これだとメールでは渡せないクライアントさんもありそうです。軽くするためには

  • 仮想環境を開いて必要なライブラリだけの環境で実行する。
  • py2exeというPyInstallerとは違うライブラリを使用する。

という手があるので、それはまた次にやってみようと思います。