
Pythonで作ったブログ検索順位取得ツール、もう少しきちんと作りこんで、人に渡したい(売りたい)なぁ~
ということを考え始めました。
Python初心者のまゆみです。
Pythonのパの字も知らなかった超初心者の段階でブログのGoogle検索順位を取得してグラフも作るツールを作ってみました。


上記の記事の時点で満足していたのですが、もう少し作りこんで人に渡せるようにしたいなと考え始めまています。
あわよくば製品として売り出したい。
そうするには、まずは製品として渡せるようにしないといけません。
Pythonの環境がないPCでも動かないと意味がありません。
という訳で、今回はPythonコードで作ったツールを実行形式(exe)にしてみました。
今回使用したのはpyinstallerというモジュールです。
グラフ作成に使用しているMatplotlibとpyinstallerは相性が良くないようで、私も凡例の日本語化につまづいちゃいました。
しかし、少しだけ修正コードを挿入したら、上手くいくようになりましたよ。
実行形式(exe)にしてみる
Pythonで実行形式ファイル(exeファイル)を作成する方法です。
pyinstallerのインストール
Pythonで書いたコードをwindowsアプリケーションとしてexe形式にする場合、一般的なのは「pyinstaller」というモジュールを使うのが良いそうです。
ということで、いつものようにpipでpyinstallerをインストールします。
<コマンド>
pip pyinstaller
ひとまずexeを作ってみた
ひとまず、pyinstallerを使ってみます。
「searchGUI.py」のファイルの中に全てのコードが入っており、それをexe化してみます。
<コマンド>
pyinstaller searchGUI.py
コマンドプロンプトでソースファイルがあるフォルダに移動後、上記のコマンドを打つと、1~2分の時間がかかりましたがファイルが作成されました。
「dist」というフォルダが作成され、その中にツール名(searchGUI)のフォルダができて、そのフォルダの中にたくさんのファイルが出来上がっています。
その中に、作りたかったexeファイルがあります。
今回の場合は「searchGUI.exe」です。


しかし、こんなにたくさんファイルができてしまったけど、このファイル全部必要なの??
python環境がないPCでツールを実行したい場合は、このファイルを全部渡さないといけないのでしょうか?
一般的に使われているexeファイルは1つだけで動くよな・・・
1つのファイルのみにする
何もオプションを指定しないと、たくさんのファイルができてしまったpyinstaller。
調べてみると、オプションを指定したら作られるファイルが1つだけになるようです。
ファイルは1つだけの方が配布しやすいですから、1つにまとめてしまいましょう。
<コマンド>
pyinstaller searchGUI.py –onefile –clean –noconsole
オプションの内容は以下です。
・–onefile:1つのファイルにまとめる
・–clean:exeファイルを消してから再作成
・–noconsole:コマンドプロンプトを表示しない
※↑の「–」はハイフン「-」2つです(見づらくてすみません)
以上のオプションを付けてpyinstallerを実行してみると、「dist」フォルダの中にexeファイルが1つだけ作成されました。


プロットの日本語が文字化けする対策
ツールをexe形式ファイルにすることができたので、実行してみました。
すると


グラフを表示させようとすると、このような警告文が表示されてしまいます。
(コマンドプロンプトを表示するよう設定してexe化した場合に見える)
グラフ自体はエラー無く表示されるのですが、以下のように


凡例の日本語が文字化けしちゃっています。
本当は「BabyKumon 効果」となるはずです。
日本語の文字化けについてググってみて、以下の2つの参考ページを見つけて、コードを修正してみました。
参考:・PYINSTALLER + 日本語の時の注意点
・Matplotlibで簡単に日本語を表示する方法(Windows)
まずは、pyinstallerでexe化するとエンコードが変わってしまうのを防ぐために、メイン関数に以下のコードを追加。
UTF-8になるように設定しています。
if hasattr(sys, 'setdefaultencoding'):
import locale
lang, enc = locale.getdefaultlocale()
sys.setdefaultencoding('utf-8')
次に、グラフに表示する凡例のフォントを直接指定するように、グラフ作成部分のコードを修正しました。
6行目の「prop={“family”:”MS Gothic”}」を追加しています。
#凡例
plt.legend(bbox_to_anchor=(0,1.02,1,1.02), #グラフの上に
loc='lower center', #凡例の下中央を合わせる
borderaxespad=0, #隙間はなし
ncol=3, #3列で表示
prop={"family":"MS Gothic"}, #日本語対応
mode='expand') #拡大させる
修正して再度exe化したツールを実行してみた結果はこちら。


きちんと日本語の凡例が表示できるようになりました。
ファイルサイズを小さくする
exeファイルを作ってみてびっくりしたのですが、出来あがったファイルサイズがめちゃくちゃ大きいのです!
なんと31MB!!
なんでこんな大きいの?
どうしたら小さくなる?
と調べてみたら、以下の参考ページに行きつきました。
参考:Pythonで組んだプログラムをPyInstallerでexe化したらめちゃくちゃサイズがでかくなった件【2019年6月、解決策追記】
参考ページにあった、exe化するときに必要ないモジュールを「–exclude」で含めないように設定してみました。
具体的には、numpyというモジュールを省いてみました。
<コマンド>
pyinstaller searchGUI.py –onefile –clean –noconsole –exclude numpy
その結果は


numpyを省いた結果、31MBが21MBまで小さくなりました!
それでもまだまだ大きいですが、他に削るものもないし・・・
ひとまず、これで良しとします。
Pythonって大変。
exe化するだけでこんなに大変だとは。
やっぱりVBAとかC#でツールを作った方が楽ですね。
ブログ検索順位取得ツールをいつか売り出したいと思っていましたが、Python版はファイルサイズが大きすぎるから止めようかな・・・
VBAで同じことができないか試してみようと思います。
んじゃ、また~
プログラミングの独学方法は?おススメをまとめました


コメント