【Python】ツールを作ろうとしたらエラーが出たのでAnaconda+Pycharmで環境を再構築した話

 


◆経緯

最近新しいタブレットが欲しいのだけど、新商品で手頃なのがなくて中古でどのくらいだろうという疑問から新しくツールを作ることにした。ヤフオクで落札されている相場がいくらかというのをピックアップするツールを作ることに。 そんなこんなでツールを作ってpyinstallerを使ってexeファイルを作ろうとするとなぜかエラーがでるΣ(゚д゚lll)ガーン(開発環境では問題なく動作してるのに…)

 

◆経過

こういうことは珍しいことではないので対応を調査することに。 出ているエラーは「module not found matplotlib」というもの。どうやら「matplotlib」というグラフ描画に使っているモジュールがないらしい。 ちゃんとプログラム上ではimportしてるんだけど、exeファイルを作る時に上手くいかないっぽい。結局理由は良く分からないがexeファイルを作る時にオプションで「--hidden-import matplotlib」をつけることで問題ないらしい。 意外とあっさり解決方法が見つかり、早速実行して終了だと意気込んでpyinstallerを実行したが結果は同じで「module not found matplotlib」が出る始末orz 何故だ!? ( ゚д゚)ハッ! 「--hidden-import matplotlib」じゃなくて実際importしている「--hidden-import matplotlib.pyplot」なのか?と考えたので変更して再実行。 が、やはり同じorz この時点で既に数時間経過・・・ 色々調べたが結局対応が分からず、次の日に 「もしかして、環境が古いのか、おかしいのかどっちかなのか?」と思い確認。 すると「Anaconda 3.6.3」、「Anaconda3.6.4」、「Python3.6.6」の3種類が同居している状況に「もしかしてこのせいか??」と思い環境を再構築することに・・・ 一旦、2種類のAnacondaとPython、開発環境のPycharmを全てアンインストールして1から再インストールすることに。 最新版のAnacondaとPycharmをダウンロードしてそれぞれインストール。この時点で半日以上経過ww 更に既に作っていたPycharmのプロジェクトも新しいのを作り直して、再びPyinstallerでexeファイルを作成・・・・・ やはり「module notfound matplotlib」は出るので「--hidden-import matplotlib.pyplot」で再度実行。 ・ ・ ・ 今度は違うエラーが発生「UnicodeDecodeError: 'utf-8' codec can't decode byte 0x83 in position 129: invalid start byte」どうやらutf-8エンコーディングが指定されていないっぽい。 あれ?他のツールを作ったときはそんなの必要なかった気がするぞ・・・まぁ必要らしいので先頭行に

# coding: utf-8

を追加。再々pyinstaller実行。 ・ ・ ・ またエラー発生(そろそろ勘弁してww) 「RuntimeError: maximum recursion depth exceeded while calling a Python」 正確にこのメッセージだったか覚えていないがこんな感じのエラーが発生。 今回はpyinstaller実行時のspecファイルを修正 2行を先頭に追加

import sys
sys.setrecursionlimit(5000)

またpyinstallerを実行。 ・ ・ ・ やっとエラーがなく処理終了(≧▽≦) よし、動作確認だ! キーワードを入力して、検索Go!! ・ ・ ・ あれ、なんだこれ、こんなメッセージはだしてないぞ、エラー!? 「This application failed to start because it could not find or load the Qt platform plugin "windows" in "".」 もういい、今日はこれで終わり!!(ノД`)・゜・。   次の日・・・ pluginがないとかなんとからしいがよくわからんのでググる

とりあえず必要なdllをexeと同じフォルダに入れることで解決しました。 - \platformsをexeの入ったフォルダの/dist以下にコピーする。 - C:\Users\{YOUR_USERNAME}\Anaconda2\lib\site-packages\PyQt5内のlibEGL.dllを/dist以下にコピーする。

との事なのでコピーして、何度目か分からないpyinstaller実行。 問題なくexeファイルは出来たので検索Go!! ・ ・ ・ 「検索 終了!!」 おし!やった。 正直、一難去ってまた一難、ぶっちゃけありえないって感じでしたww  

 
◆結果

完成したツールはこんな感じです。 検索キーワードと遡る日数を入れて検索するとヤフオクの落札履歴から該当する物のみを一覧表示させます。 該当件数、最高値、最安値、中央値、平均値、最頻値、各商品の詳細、ヒストグラム、折れ線グラフを出力します。

f:id:HelicobacterPylori:20181103122211j:plain

ヒストグラム、折れ線グラフで金額帯での落札数と折れ線グラフで日時での落札額のグラフを表示し、落札時の参考になるはずw

f:id:HelicobacterPylori:20181103122329j:plain

商品の詳細をCSV出力出来るので、Excelで何かしようとする事も可能です!! という事で「ツールを作ろうとしたらエラーが出たので環境を再構築した話」でした。

 

 

気になったらここで販売もしているので見てみてください。購入してもらえると感謝します。 ヤフオク落札履歴を抽出するツールが使えます 販売、落札したい商品の適正価格がいくらか事前に知りたい方に