web-dev-qa-db-ja.com

virtualenvで「matplotlib.pyplotをpltとしてインポート」できない

仮想環境でflaskを使用しています。 pipでmatplotlibをインストールでき、Pythonセッションでimport matplotlibできます。ただし、次のようにインポートすると

matplotlib.pyplot as plt

次のエラーが表示されます。

>>> import matplotlib.pyplot as plt

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "//anaconda/envs/myenv/lib/python2.7/site-packages/matplotlib/pyplot.py", line 109, in <module>
    _backend_mod, new_figure_manager, draw_if_interactive, _show = pylab_setup()
  File "//anaconda/envs/myenv/lib/python2.7/site-packages/matplotlib/backends/__init__.py", line 32, in pylab_setup
    globals(),locals(),[backend_name],0)
  File "//anaconda/envs/myenv/lib/python2.7/site-packages/matplotlib/backends/backend_macosx.py", line 24, in <module>
    from matplotlib.backends import _macosx
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.

フレームワークとしてPythonをインストールするように求められる理由について混乱しています。既に存在しませんか? 「フレームワークとしてPythonをインストールする」とはどういう意味ですか、どのようにインストールしますか?

66
Rohit

これは 解決策 私のために働いた。仮想環境でpipを使用してmatplotlibを既にインストールしている場合は、次を入力するだけです。

$ cd ~/.matplotlib
$ nano matplotlibrc

そして、そこにbackend: TkAggと書いてください。さらに情報が必要な場合は、ソリューションのリンクに移動してください。

159
Hercules

Pipを使用してmatplotlibをインストールすると、同様の問題が発生しました。デフォルトでは、1.5.0の最新バージョンをインストールしました。ただし、Python 3.4とmatplotlib 1.4.3を使用した別の仮想環境があり、matplotlib.pyplotをインポートしたときにこの環境は正常に機能しました。そのため、以下を使用してmatplotlibの以前のバージョンをインストールしました。

cd path_to_virtual_environment    # assume directory is called env3
env3/bin/pip install matplotlib==1.4.3

これは回避策にすぎないことはわかっていますが、短期的な修正としては機能しました。

15
user1718097

.matplotib/matplotlibrc構成ファイルを設定したくない場合は、matplotlibをインポートした直後に'Agg'をインポートする前に、実行時にmatplotlib.pyplotバックエンドを設定することでこの問題を回避できます。

In [1]: import matplotlib

In [2]: matplotlib.use('Agg')

In [3]: import matplotlib.pyplot as plt

In [4]: fig, ax = plt.subplots(1, 1)

In [5]: import numpy as np

In [6]: x = np.linspace(-1., 1.)

In [7]: y = np.sin(x)

In [8]: ax.plot(x, y)
Out[8]: [<matplotlib.lines.Line2D at 0x1057ecf10>]

In [9=]: fig.savefig('myplot.png')

enter image description here

8
Pedro M Duarte

この問題は、バックエンドAggを使用して修正できます

User/yourname/.matplotlibに移動し、matplotlibrcを開いて作成し、次の行backend : Aggを追加してください。

4
Jonathan

クリーンで簡単なソリューションは、PYTHONHOMEVIRTUAL_ENVに設定し、システムPython実行可能ファイル(virtualenvの代わりに)を使用するカーネルを作成することです。

このようなカーネルの作成を自動化する場合は、 jupyter-virtualenv-osx スクリプトを使用できます。

0
Mapio

ほとんどの答えは、システムPythonを使用するためにactivateスクリプトにパッチを適用することを指しているように見えますが、それを動作させるのに苦労していました。 virtualenvインスタンスの代わりにそれを使用します。これを行うには、virtualenv --system-site-packages fooのような--system-site-packagesフラグを使用してvirtualenvを作成するか、pip install -U matplotlibのようなpipインストール時にユニバーサルフラグを使用します。

0
Bobby