python: matplotlib のエラーを解決する方法

python: matplotlib のエラーを解決する方法

macで、python3 をpyenv からインストールしたのですが、グラフのモジュールの「matplotlib」がうまく動きませんでした…

解決方法を調べたので、記事として残しておきます。参考になれば幸いです。

検証環境

macOS High Sierra, pyenv, python 3.6.5

最初の状況

以下のようなpythonスクリプトを作りました。

import matplotlib.pyplot as plt
data = [2, 4, 8, 16]
plt.hist(data)
plt.show()

このスクリプトを実行すると、以下のようなエラーになってしまいます。

ModuleNotFoundError: No module named 'matplotlib'

エラーに書いてある通り、モジュールがないようなので、インストールします。

mtplotlib のインストール

pip を使ってインストールします。

$ pip install matplotlib

インストールできたら、再度、実行してみます。

…するとまたエラーが。

RuntimeError: Python is not installed as a framework.
The Mac OS X backend will not be able to function correctly if Python is not installed as a framework.
See the Python documentation for more information on installing Python as a framework on Mac OS X.
Please either reinstall Python as a framework, or try one of the other backends.
If you are using (Ana)Conda please install python.app and replace the use of 'python' with 'pythonw'.
See 'Working with Matplotlib on OSX' in the Matplotlib FAQ for more information.

なにやら、「pythonがフレームワークとしてインストールされていない」のが原因らしいですね。正直、詳しくないのでよくわからないのですが…、書いてある通り、「Working with Matplotlib on OSX」でGoogle 検索した所、matplotlib のページが見つかりました。

Working with Matplotlib on OSX — Matplotlib 2.2.2 documentation

pyenvのところには、以下のような記述がありました。

If you are using pyenv and virtualenv you can enable your python version to be installed as a framework:

PYTHON_CONFIGURE_OPTS=”–enable-framework” pyenv install x.x.x

なるほど、「PYTHON_CONFIGURE_OPTS」という変数を指定した上でpython をインストールしなきゃいけなかったのか…

とりあえず、やってみることにします。現在、python 3.6.5がインストールされていますが、同じバージョンを再度インストールします。

python インストールしなおし

上記の通り、コマンドを実行します。

$ PYTHON_CONFIGURE_OPTS="--enable-framework" pyenv install 3.6.5

数分間で、再インストールが完了しました。

結果

再度スクリプトを実行すると、無事にヒストグラムが表示されました!

とりあえずこれで、簡単なグラフを表示することができるようになったので、統計の勉強を頑張ろうと思います。