【Python】グラフ描画のためにmatplotlibを使おうとしたら「this application failed to start because it could not find or load the qt platform plugin "windows"」というエラーが出た話


※個人的な備忘録としてメモしました。
 何か間違ってたりしたら指摘してくださると幸いです。

問題

test_graph1(関数をグラフ描画するプログラム).py
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 10, 500)
y = np.sin(x)

plt.figure()
plt.plot(x, y)
plt.show()

上記を実行すると

This application failed to start because it could not find or load the Qt platform plugin "windows"
in "".

Reinstalling the application may fix this problem.

というエラーメッセージが出てグラフ描画が出来ない状態に陥った。

環境

Windows 10 Home
Python 3.7.7
Visual Studio Code 1.44.2
Anaconda 4.8.3

解決方法

結論から書くと、QtとSIPとPyQt5をインストールすると解決しました。

Qtのオープンソースをこちらからインストールし、
下記をコマンドプロンプト等のコンソールで実行します。

$ pip install SIP
$ pip install PyQt5

WARNING: You are using pip version 19.2.3, however version 20.0.2 is available.
You should consider upgrading via the 'python -m pip install --upgrade pip' command.

もし上記のようなWARNINGが出たら下記を実行します。

$ python -m pip install --upgrade pip

これで正しくPyQt5がインストールされ、
再度test_graph1(関数をグラフ描画するプログラム).pyを実行するとグラフが表示されます。

以上、Qtのdllが正しくインストールされておらず起こったエラーでした。
(尚Anaconda環境の方はpipコマンドではなくcondaコマンドでインストールする事を推奨します。)

解決に至るまで試した事

上記で解決できなくても、ここに書いてある事が解決のヒントになるかも。

その1

エラーメッセージにReinstalling the application may fix this problem.
と書いてあったのでAnacondaを試しにインストールし直してみましたが解決しませんでした。

その2

その後google先生に質問したところ、この記事が引っ掛かりました。

Pythonで機械学習の勉強始めたら「could not find or load the Qt platform plugin windows」でつまった

この記事によれば環境変数が正しく設定されていればこのエラーは出ないという事でしたが、
環境変数を正しく設定しても解決しませんでした。

その3

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

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

という記載があり、PyQt5の中身を見に行ったところ
そもそも libEGL.dll が存在していませんでした。
PyQt5が正しくインストール出来てないのでは?という事に気づき、
グラフ描画に必要なQt、PyQt5、SIPをそれぞれインストールしました。
実際、その時PyQt5の中身を見たところ穴ぼこ状態でした。

注意事項とその他

また、PyQt5自体のインストールが上手くいったとしても

from PyQt5.QtWidget import QWidget, QApplication

という風にPyQt5.QtWidgetを使用する場合は
Anacondaを用いて環境構築している方に関しては
ImportErrorNo Name ’QtWidgets' in module 'PyQt5'等の
エラーメッセージが出る可能性が高いです。
その場合はこちらの記事に書いてある解決方法を試してみると有効です。
今回はQtWidgetsを利用したグラフ描画ではない為
本編には含めませんでしたが、Anacondaを使っている方は必見です。

自分の場合は、上記の手順を実行したら更にエラーが出ました...

あなたの使ってるPythonのバージョンと対応してないよという文だったので
最終的に仮想環境のPythonバージョンをダウングレードしました。


その後パッケージのビルドを確認すると、このように表示されました。
どうやったらダウングレード以外で解決出来るか判明したら
また記事を投稿しようかな~と思ってます。
(OSの情報がビルドにはみ出てるのはご愛嬌)

Qt、PyQt5、SIPのインストール詳細

PyQt5とpython3によるGUIプログラミング[0]
解決方法に記載されているインストールはこちらを参考にしました。