Mac OS Pycharm上的Python给出了“import matplotlib.pyplot as plt”的框架错误

时间:2018-05-06 05:33:54

标签: python macos matplotlib installation pycharm

这个问题类似于herehere,但是没有一个解决方案可能因为我使用的是不同的环境(Mac OS上的PyCharm)。

在PyCharm在2.7.15上运行的虚拟环境中,安装了matplotlib而没有任何抱怨,以及包含以下内容的单行PyCharm python文件......

import matplotlib.pyplot as plt

...运行此单行文件时控制台输出以下错误:

/Users/jbs/PycharmProjects/WakeUp/env/bin/python /Users/jbs/PycharmProjects/WakeUp/InputSound/WakeInputSound-and-plot-it-trial3.py
Traceback (most recent call last):
  File "/Users/jbs/PycharmProjects/WakeUp/InputSound/WakeInputSound-and-plot-it-trial3.py", line 2, in <module>
    import matplotlib.pyplot as plt
  File "/Users/jbs/PycharmProjects/WakeUp/env/lib/python2.7/site-packages/matplotlib/pyplot.py", line 115, in <module>
_backend_mod, new_figure_manager, draw_if_interactive, _show = pylab_setup()
  File "/Users/jbs/PycharmProjects/WakeUp/env/lib/python2.7/site-packages/matplotlib/backends/__init__.py", line 62, in pylab_setup
[backend_name], 0)
  File "/Users/jbs/PycharmProjects/WakeUp/env/lib/python2.7/site-packages/matplotlib/backends/backend_macosx.py", line 17, 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. 

任何有助于解决这个问题的帮助都会受到欢迎。我试过了十几件事似乎都没有用......

(单独导入matplotlib不会出现问题,这个问题可能与此one有关,但明显不同......)

1 个答案:

答案 0 :(得分:2)

详情请参阅:what-is-a-backend。你需要设置你的后端。有两种类型的后端:用户界面后端(用于pygtk,wxpython,tkinter,qt4或macosx;也称为“交互式后端”)和硬拷贝后端来制作图像文件(PNG,SVG,PDF,PS;也被称为“非交互式后端”)。

配置后端有四种方法。如果它们彼此冲突,将使用以下列表中最后提到的方法,例如,调用use()将覆盖matplotlibrc中的设置。

  1. matplotlibrc文件中的后端参数(请参阅自定义matplotlib):

    backend : WXAgg   # use wxpython with antigrain (agg) rendering
    
  2. 为当前shell或单个脚本设置MPLBACKEND环境变量:

    > export MPLBACKEND="module://my_backend"
    > python simple_plot.py
    
    > MPLBACKEND="module://my_backend" python simple_plot.py
    

    设置此环境变量将覆盖任何matplotlibrc中的后端参数,即使当前工作目录中存在matplotlibrc也是如此。因此,全局设置MPLBACKEND,例如不建议使用.bashrc或.profile,因为它可能导致反直觉行为。

  3. 要为单个脚本设置后端,您也可以使用-d命令行参数:

    > python script.py -dbackend
    

    不推荐使用此方法,因为-d参数可能与解析命令行参数的脚本冲突(请参阅问题#1986)。您应该使用MPLBACKEND。

  4. 如果您的脚本依赖于特定的后端,您可以使用use()函数:

    import matplotlib
    matplotlib.use('PS')   # generate postscript output by default
    

    如果使用use()函数,则必须在导入matplotlib.pyplot之前完成此操作。导入pyplot后调用use()将不起作用。如果用户想要使用不同的后端,则使用use()将需要更改代码。因此,除非绝对必要,否则应避免显式调用use()。

  5. 注意:后端名称规范不区分大小写;例如,'GTKAgg'和'gtkagg'是等价的。