这个问题与此处和此处的问题相似,但是那里的所有解决方案均无效,这可能是因为我使用的是不同的环境(在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本身并不产生问题,这问题可能与这一个,但it’s显然是不同的…)
有关详细信息,请参阅:什么是后端。您需要设置后端。后端有两种类型:用户界面后端(用于pygtk,wxpython,tkinter,qt4或macosx;也称为“交互式后端”)和用于制作图像文件的硬拷贝后端(PNG,SVG,PDF,PS;也称为“非交互式后端”)。
有四种配置后端的方法。如果它们彼此冲突,将使用下面列表中最后提到的方法,例如,调用use()将覆盖matplotlibrc中的设置。
matplotlibrc文件中的backend参数(请参阅自定义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
python simple_plot.py
MPLBACKEND=”module://my_backend” python simple_plot.py
设置此环境变量将覆盖任何matplotlibrc中的backend参数,即使当前工作目录中存在matplotlibrc。因此,不建议在例如.bashrc或.profile中全局设置MPLBACKEND,因为这可能会导致违反直觉的行为。
> python script.py -dbackend
不建议使用此方法,因为-d参数可能与解析命令行参数的脚本冲突(请参见问题#1986)。您应该改用MPLBACKEND。
import matplotlib
matplotlib.use(‘PS’) # generate postscript output by default
如果使用use()函数,则必须在导入matplotlib.pyplot之前完成此操作。导入pyplot后调用use()将无效。如果用户要使用其他后端,则使用use()将需要更改代码。因此,除非绝对必要,否则应避免显式调用use()。
注意:后端名称规范不区分大小写; 例如,“ GTKAgg”和“ gtkagg”是等效的。