这个问题类似于here和here,但是没有一个解决方案可能因为我使用的是不同的环境(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有关,但明显不同......)
答案 0 :(得分:2)
详情请参阅:what-is-a-backend。你需要设置你的后端。有两种类型的后端:用户界面后端(用于pygtk,wxpython,tkinter,qt4或macosx;也称为“交互式后端”)和硬拷贝后端来制作图像文件(PNG,SVG,PDF,PS;也被称为“非交互式后端”)。
配置后端有四种方法。如果它们彼此冲突,将使用以下列表中最后提到的方法,例如,调用use()将覆盖matplotlibrc中的设置。
matplotlibrc文件中的后端参数(请参阅自定义matplotlib):
backend : WXAgg # use wxpython with antigrain (agg) rendering
为当前shell或单个脚本设置MPLBACKEND环境变量:
> export MPLBACKEND="module://my_backend"
> python simple_plot.py
> MPLBACKEND="module://my_backend" python simple_plot.py
设置此环境变量将覆盖任何matplotlibrc中的后端参数,即使当前工作目录中存在matplotlibrc也是如此。因此,全局设置MPLBACKEND,例如不建议使用.bashrc或.profile,因为它可能导致反直觉行为。
要为单个脚本设置后端,您也可以使用-d命令行参数:
> python script.py -dbackend
不推荐使用此方法,因为-d参数可能与解析命令行参数的脚本冲突(请参阅问题#1986)。您应该使用MPLBACKEND。
如果您的脚本依赖于特定的后端,您可以使用use()函数:
import matplotlib
matplotlib.use('PS') # generate postscript output by default
如果使用use()函数,则必须在导入matplotlib.pyplot之前完成此操作。导入pyplot后调用use()将不起作用。如果用户想要使用不同的后端,则使用use()将需要更改代码。因此,除非绝对必要,否则应避免显式调用use()。
注意:后端名称规范不区分大小写;例如,'GTKAgg'和'gtkagg'是等价的。