Mac OS Snow Leopard,IPython Notebook matplotlib后端与libpng不匹配



前几天,我试图更深入地研究这个问题,并提供一些见解。也许有了更多的见解,它终于可以解决了。

需要注意的事项:

  1. 安装不同的Python版本对我来说不是一个选择(我会在心跳中完成),因为我需要使用Gurobi线性编程求解器
  2. matplotlib是用libpng 1.5.14编译的,在运行时链接很好。在IPython控制台中,我可以使用它完美地绘制png图形
  3. 由于前一点,我认为错误一定发生在IPython Notebook中使用的后端,该笔记本也是使用matplotlib编译的
  4. 我正在尝试使用matplotlib 1.3的源代码,如果有人能让它与以前的版本一起工作,我也会很高兴

所以,当我试图在笔记本中绘制一些东西时,我从matplotlib得到的正常文本输出没有数字。在我启动笔记本的终端中,我可以看到以下错误:

libpng warning: Application built with libpng-1.2.41 but running with 1.5.14

由于我早些时候得出结论,问题一定出在后端,我检查了链接到那里的库:

otool -L /Library/Python/2.6/site-packages/matplotlib-1.3.0-py2.6-macosx-10.6-universal.egg/matplotlib/backends/_tkagg.so

我的系统输出为:

/Library/Python/2.6/site-packages/matplotlib-1.3.0-py2.6-macosx-10.6-universal.egg/matplotlib/backends/_tkagg.so:
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.9.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.11)
/System/Library/Frameworks/Tcl.framework/Versions/8.5/Tcl (compatibility version 8.5.0, current version 8.5.7)
/System/Library/Frameworks/Tk.framework/Versions/8.5/Tk (compatibility version 8.5.0, current version 8.5.7)

因此,可能冒犯的候选人是Tcl和Tk。然后我运行:

find /System -name libpng*

事实上,我发现:

/System/Library/Tcl/8.4/Img1.4/libpngtcl1.2.24.dylib
/System/Library/Tcl/8.5/Img1.4/libpngtcl1.2.24.dylib

以及Python推出自己的:

/System/Library/Frameworks/Python.framework/Versions/2.6/lib/libpng.3.dylib
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/libpng.dylib
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/libpng12.0.dylib
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/libpng12.dylib

我下载了Tcl/Tk 8.6的源代码,并自己编译了它们,希望它们能针对libpng进行编译,但事实并非如此。我仍然得到了同样的错误:

libpng warning: Application built with libpng-1.2.41 but running with 1.5.14

当我编译matplotlib时,它说由于补丁的原因,它提供了自己的libagg,我找不到它使用的是哪个tkagg,所以也许这就是问题所在?或者Python 2.6是由使用Tk编译的系统提供的,Tk与旧的libpng链接?

我想我可以尝试在Tcl/Tk 8.5的libpng版本或Python框架中可用的版本上编译matplotlib,看看两者是否都在libpng 1.2.41版本上运行。

有人知道这种情况可能发生在后端的哪里吗?以及如何修复编译以使用正确的libpng版本?

你解决问题了吗?我也遇到了类似的问题,在构建matplotlib时,我临时重命名了包含Python附带的libpng头文件的文件夹(在我的情况下,它是X11),从而解决了这个问题。安装matplotlib后,将文件夹重新命名。

最新更新