python - working with matplotlib on osx




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

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


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

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


如果您不想设置 .matplotib/matplotlibrc 配置文件,可以通过在导入 matplotlib 和导入 matplotlib.pyplot 之前在运行时设置 '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 并打开/创建 matplotlibrc 并添加以下行 backend : Agg ,它应该适合您。


我得到了同样的错误,并尝试了 Jonathan 的回答:

您可以使用后端Agg来解决此问题

转到 User/yourname/.matplotlib 并打开/创建 matplotlibrc 并添加以下行 backend : Agg ,它应该适合您。

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

然后我尝试了另一个后端: backend: TkAgg ,它有效!

所以也许我们可以尝试差异后端,有些可能会工作或安装像PyQt4这样的重新获得的软件包。

这是一个示例python片段,您可以尝试并测试matplotlib。

import matplotlib

matplotlib.use('TkAgg')
import matplotlib.pyplot as plt

plt.plot([1, 2, 3], [0, 3, 7])
plt.show()

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

$ cd ~/.matplotlib
$ nano matplotlibrc

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





virtualenv