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

时间:2013-08-07 01:34:10

标签: matplotlib osx-snow-leopard ipython ipython-notebook libpng

前几天,我试图深入研究this问题并提供一些见解。也许有了额外的见解,它最终可以解决。

注意事项:

  1. 为我安装different Python version is not an option(我会在心跳中执行此操作),因为我需要使用Gurobi线性编程解算器。
  2. matplotlib是用libpng 1.5.14编译的,并且在运行时链接就好了。在IPython控制台中,我可以用它来完美地绘制png数字。
  3. 由于前一点,我认为错误必须发生在IPython Notebook中使用的后端,该后端也是用matplotlib编译的。
  4. 我正在尝试使用matplotlib 1.3的源代码,如果有人可以使用以前的版本,而不是太旧的版本,我也会很开心。
  5. 所以,当我尝试在Notebook中绘制一些内容时,我得到了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
    

    我继续前进并downloaded the source code获取Tcl / Tk 8.6并自行编译,希望他们能够针对libpng进行编译,但事实并非如此。我仍然有同样的错误:

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

    当我编译matplotlib时,它说由于补丁它发布了自己的libagg并且我找不到它正在使用的tkagg,所以也许这就是出错的地方?或者是由用Tk编译的系统提供的Python 2.6,它与旧的libpng链接?

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

    是否有人知道后端可能发生的位置以及如何修复编译以使用正确的libpng版本?

1 个答案:

答案 0 :(得分:1)

你解决了这个问题吗?我有一个类似的问题,我通过在构建matplotlib时临时重命名包含Python附带的libpng头文件的文件夹(在我的例子中,它是X11)来解决它。安装matplotlib后,重命名该文件夹。