无法在virtualenv中“将matplotlib.pyplot导入为plt”

我正在虚拟环境中使用烧瓶。 我能够用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作为框架安装”意味着什么,以及如何安装它?

这个解决scheme为我工作。 如果您已经在您的虚拟环境中使用pip安装了matplotlib,则只需键入以下内容:

 $ cd ~/.matplotlib $ nano matplotlibrc 

然后,写入backend: TkAgg在那里。 如果您需要更多信息,请转到解决scheme链接。

我得到了同样的错误,并试图Jonathan的答案:

您可以通过使用后端Agg修复此问题

转到User/yourname/.matplotlib并打开/创buildmatplotlibrc并添加以下行backend : Agg和它应该为你工作。

我运行程序,没有错误,但也没有重复,我试图backend: Qt4Agg ,它打印出来,我没有安装PyQt4。

然后我尝试了另一个后端: backend: TkAgg ,它的工作原理!

所以也许我们可以尝试不同的后端,有些可能会工作或安装像PyQt4这样的需要的软件包。

这里是一个示例python片段,你可以尝试和testingmatplotlib。

 import matplotlib matplotlib.use('TkAgg') import matplotlib.pyplot as plt plt.plot([1, 2, 3], [0, 3, 7]) plt.show() 

当我使用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 

我知道这只是一个解决办法,但它对我来说是一个短期的解决办法。

如果你不想设置一个.matplotib/matplotlibrcconfiguration文件,你可以在导入matplotlib之后,导入matplotlib之前,在运行时设置'Agg'后端来绕过这个问题:

 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') 

在这里输入图像说明

您可以通过使用后端Agg修复此问题

转到User/yourname/.matplotlib并打开/创buildmatplotlibrc并添加以下行backend : Agg和它应该为你工作。

虽然大多数答案似乎指向修补activate脚本来使用系统python,但是我却遇到了麻烦,为了我的工作和一个简单的解决scheme – 虽然有点小巧 – 是将matplotlib安装到全局环境中,而不是一个virtualenv实例。 你可以通过使用像virtualenv --system-site-packages foo这样的–system-site-packages标志来创build你的virtualenv,或者像pip install -U matplotlib那样在安装pip install -U matplotlib时使用通用标志。

一个干净而简单的解决scheme是创build一个内核,将PYTHONHOME设置为'VIRTUAL_ENV',然后使用系统Python可执行文件(而不是virtualenv中的)。

如果你想自动创build这样一个内核,你可以使用jupyter-virtualenv-osx脚本。