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

时间:2015-04-03 14:11:37

标签: python macos matplotlib flask virtualenv

我在虚拟环境中使用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安装为框架”是什么意思,我该如何安装它?

5 个答案:

答案 0 :(得分:159)

solution对我有用。如果您已在虚拟环境中使用pip安装了matplotlib,则只需键入以下内容:

$ cd ~/.matplotlib
$ nano matplotlibrc

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

答案 1 :(得分:14)

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

我知道这只是一种解决方法,但它对我来说是一种短期解决方案。

答案 2 :(得分:8)

如果您不想设置.matplotib/matplotlibrc配置文件,可以在导入'Agg'之后和导入{{1}之前立即在运行时设置matplotlib后端来规避此问题。 }:

matplotlib.pyplot

enter image description here

答案 3 :(得分:0)

虽然大多数答案似乎都指向修补activate脚本以使用系统python,但是我无法将其用于工作,并且对我来说一个简单的解决方案 - 尽管有点畏缩 - 是将matplotlib安装到全局环境并使用而不是virtualenv实例。您可以通过使用 - {system 1}}之类的--system-site-packages标志创建virtualenv,或者在像virtualenv --system-site-packages foo这样的pip安装时使用通用标志。

答案 4 :(得分:0)

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

如果要自动创建此类内核,可以使用jupyter-virtualenv-osx脚本。