macosx下的python matplotlib框架?

python matplotlib framework under macosx?

我得到这个错误:

/sw/lib/python2.7/site-packages/matplotlib/backends/backend_macosx.py:235:
UserWarning: Python is not installed as a framework. The MacOSX
backend may not work correctly if Python is not installed as a
framework. Please see the Python documentation for more information on
installing Python as a framework on Mac OS X

我使用fink安装了python27,它使用的是默认的matplotlib,它使用的是macosx框架。


有些用户可能不想更改其所有脚本的后端。这个页面——http://matplotlib.org/faq/usage_faq.html what-is-a-backend——告诉了另一种方式:

1
2
import matplotlib
matplotlib.use('TkAgg')

在导入matplotlib的子包或依赖于matplotlib的第三方包之前,您必须这样做。


您可以选择使用不需要额外安装任何东西的Agg后端。把backend : Agg放进~/.matplotlib/matplotlibrc


有两种方法可以在MacOSX上构建和安装python,一种是作为传统的平面unix-y共享库。另一个被称为framework安装,一种类似于OS X上其他框架的文件布局,其中产品的所有组件目录(includelibbin都安装为主框架目录下的子目录。Fink项目使用unix共享库方法安装pythons。大多数其他的发行商,包括苹果在OSX中提供的pythons、python.org安装程序和MacPorts项目,都安装了framework版本的python。框架安装的一个优点是,它可以与需要窗口管理器连接(通常与GUI相关的接口)的各种OS X API调用正常工作,因为Python解释器在框架内打包为应用程序包。

如果您确实需要matplotlib中需要gui函数的函数,最简单的方法可能是切换到macports,macports也打包matplotlib(port py27-matplotlib及其依赖项。如果是这样,注意不要在FinkMacPorts之间混装。除非你真的很小心,否则最好还是坚持到底。相应地调整shell路径;删除所有fink包并安装MacPorts版本是最安全的。


当切换到OSX 10.10(约塞米蒂)时,我会看到这一点。我通过切换到wxagg后端来修复它。

1
2
3
fink install wxpython300-py27
mkdir ~/.matplotlib
echo"backend : WXAgg">>~/.matplotlib/matplotlibrc

http://matplotlib.org/1.3.0/faq/usageu faq.html what-is-a-backend

如果在此处未找到matplotlibrc文件,请放入matplotlibrc,并使用以下命令检查位置:

1
2
import matplotlib as mpl
mpl.get_configdir()

我在我的计算机上使用了Python的anaconda发行版和使用python 3.4的虚拟conda环境来解决这个问题。

在执行了"pip install matplotlib"之后,我可以在代码fine中导入matplotlit,但是当我试图绘制图像时,它会给出一个错误。

所以我回到终端,使用了anaconda python推荐的conda命令("conda install matplotlib"),问题自行解决了(请记住,这一切都是在我使用conda命令工具创建的环境中完成的,该工具位于http://conda.pydata.org/docs/using/envs.html)。我的系统正在运行Mac OSX 10.10.5。


通过以下代码序列导入库对我有效。这样就不需要创建新文件夹:

1
2
3
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt


我运行的是OSX 10.14,其中安装了pyenv的python 3.7.1。

我找不到其他答案中列出的任何后端来为我工作(TkAggWXAggmacosx)。

取而代之的是更新的Qt5Agg后端,与pip install pyqt5一起安装,然后创建包含backend: Qt5Agg~/.matplotlib/matplotlibrc文件(根据其他答案)。


一般来说,我一直在使用

1
2
import matplotlib
matplotlib.use('Agg')

解决这个问题。不过,最近我在代码库上运行测试时遇到了这个框架错误,我应该只对其进行非常有限的更改。在这种情况下,请遵循Matplotlib的OSX文档中关于如何设置虚拟环境的建议:

1
2
3
4
If you are on Python 3, use venv instead of virtualenv:

python -m venv my-virtualenv
source my-virtualenv/bin/activate

发件人:https://matplotlib.org/faq/osx_framework.html


如果在~/.matplotlib/matplotlibrc中添加"backend: TkAgg"后仍面临同样的问题,它们可能会对您的虚拟环境造成问题。

因此,如果您使用的是python3,请使用venv而不是virtualenv。

要将venv与python3结合使用,请使用python -m venv my-virtualenv创建虚拟环境,并使用source my-virtualenv/bin/activate激活virtualenv。

其余和virtualenv相同。否则使用如果您想使用virtualenv作为您的虚拟环境,请选择PYTHON_CONFIGURE_OPTS="--enable-framework" pyenv install x.x.x


只需在~/.bash_概要文件中添加一个新命令来启动python就可以了。

别名vpython3=/library/frameworks/python.framework/versions/3.6(替换为您自己的python版本)/bin/python3

然后"source~/.bash_profile"并使用vpython3启动python3。

说明:默认情况下,python是作为框架安装在mac上的,但是使用virtualenv会在创建的虚拟环境下链接python3命令,而不是上面的框架目录(在终端中是哪个python3),您会看到这一点。也许matplotlib必须在python框架中找到bin/include/lib/等。


查看有关在OSX上使用matplotlib的官方常见问题解答。根据您的情况,它有几种解决方案。为我工作的是:

  • 步骤1:打开终端
  • 第二步:执行conda install python.app安装python.app
  • 第三步:使用pythonw运行python脚本,如pythonw my_script.py