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

Posted

技术标签:

【中文标题】Mac OS Pycharm 上的 Python 通过“import matplotlib.pyplot as plt”给出框架错误【英文标题】:Python on Mac OS Pycharm gives framework error with "import matplotlib.pyplot as plt" 【发布时间】:2018-10-16 05:14:29 【问题描述】:

这个问题与here 和here 的问题类似,但那里的解决方案都不起作用,可能是因为我使用的是不同的环境(Mac OS 上的 PyCharm)。

在2.7.15上运行PyCharm的虚拟环境中,安装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】:

详情请参阅: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 中的 backend 参数,即使您当前的工作目录中有 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”是等价的。

【讨论】:

让我试着回复你。谢谢!这三个命令单独工作: import matplotlib matplotlib.use('PS') import matplotlib.pyplot as plt .... 我希望其余的都能正常工作。谢谢! 谢谢悉达多。你知道PS输出去哪里了吗?我的意思是,程序结束后如何查看? 另外,如果我使用 matplotlib.use('macosx') 它会给出框架错误... 在 OSX 窗口中进行 Cocoa 渲染(当 matplotlib 处于非交互模式时,目前缺少阻塞 show() 行为)来源:matplotlib.org/faq/usage_faq.html#what-is-a-backend 使用 matplotlib.use('TkAgg') 成功,但如here所述,窗口快速消失有问题@

以上是关于Mac OS Pycharm 上的 Python 通过“import matplotlib.pyplot as plt”给出框架错误的主要内容,如果未能解决你的问题,请参考以下文章

在Mac OS上的Python安装模块

python 在Python 3.5上的Mac OS Sierra上安装OpenCV

Anaconda+pycharm 在mac上的安装

在 Mac OS X 上的 python 2.7 和 python 3.5 之间切换

通过蓝牙将 Android 应用程序连接到 Mac OS X 上的 Python 脚本

Mac OS X 上的 Boost.Python:“TypeError:属性名称必须是字符串”