【问题标题】:Compile Matplotlib for Python on Snow Leopard在 Snow Leopard 上为 Python 编译 Matplotlib
【发布时间】:2010-12-01 10:04:02
【问题描述】:

我已经杀死了半天试图在雪豹上为 python 编译 matplotlib。我使用了谷歌并找到了这个有用的页面 (http://blog.hyperjeff.net/?p=160),但我仍然无法编译它。我在该页面上看到其他用户的 cmets,所以我知道我并不孤单。

我已经独立安装了zlib、libpng和freetype。

我编辑了 make.osx 文件以将其包含在顶部:

PREFIX=/usr/local

PYVERSION=2.6
PYTHON=python${PYVERSION}
ZLIBVERSION=1.2.3
PNGVERSION=1.2.33
FREETYPEVERSION=2.3.5
MACOSX_DEPLOYMENT_TARGET=10.6

## You shouldn't need to configure past this point

PKG_CONFIG_PATH="${PREFIX}/lib/pkgconfig"
CFLAGS="-Os -arch x86_64 -arch i386 -I${PREFIX}/include"
LDFLAGS="-arch x86_64 -arch i386 -L${PREFIX}/lib"
CFLAGS_DEPS="-arch i386 -arch x86_64 -I${PREFIX}/include -I${PREFIX}/include/freetype2 -isysroot /Developer/SDKs/MacOSX10.6.sdk"
LDFLAGS_DEPS="-arch i386 -arch x86_64 -L${PREFIX}/lib -syslibroot,/Developer/SDKs/MacOSX10.6.sdk"

然后我运行:

sudo make -f make.osx mpl_build

这给了我:

export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig" &&\
    export MACOSX_DEPLOYMENT_TARGET=10.6 &&\
    export CFLAGS="-Os -arch x86_64 -arch i386 -I/usr/local/include" &&\
    export LDFLAGS="-arch x86_64 -arch i386 -L/usr/local/lib" &&\
    python2.6 setup.py build

... snip ...

gcc-4.2 -DNDEBUG -g -fwrapv -Os -Wall -Wstrict-prototypes -Os -arch x86_64 -arch i386 -I/usr/local/include -pipe -DPY_ARRAYAUNIQUE_SYMBOL=MPL_ARRAY_API -I/Library/Python/2.6/site-packages/numpy/core/include -I. -I/Library/Python/2.6/site-packages/numpy/core/include/freetype2 -I./freetype2 -I/System/Library/Frameworks/Python.framework/Versions/2.6/include/python2.6 -c src/ft2font.cpp -o build/temp.macosx-10.6-universal-2.6/src/ft2font.o
cc1plus: warning: command line option "-Wstrict-prototypes" is valid for C/ObjC but not for C++
In file included from src/ft2font.h:13,
                 from src/ft2font.cpp:1:
/usr/local/include/ft2build.h:56:38: error: freetype/config/ftheader.h: No such file or directory

... snip ...

src/ft2font.cpp:98: error: ‘FT_Int’ was not declared in this scope
/Library/Python/2.6/site-packages/numpy/core/include/numpy/__multiarray_api.h:1174: warning: ‘int _import_array()’ defined but not used
lipo: can't open input file: /var/tmp//ccDOGx37.out (No such file or directory)
error: command 'gcc-4.2' failed with exit status 1
make: *** [mpl_build] Error 1

我只是迷路了。

【问题讨论】:

  • make.osx 会自动下载freetype/libpng/zlib。

标签: python osx-snow-leopard numpy compilation matplotlib


【解决方案1】:

根据您的错误消息,您缺少 freetype 标头。您可以使用系统搜索功能找到它们吗?我不会讲授如何使用预构建的包,因为我也喜欢挠头并从头开始编译。

【讨论】:

    【解决方案2】:

    我刚刚得到它来编译。我在 make.osx 文件中的 CFLAGS 的包含路径中添加了 freetype2。现在make.osx的顶部是:

    PREFIX=/usr/local
    
    PYVERSION=2.6
    PYTHON=python${PYVERSION}
    ZLIBVERSION=1.2.3
    PNGVERSION=1.2.33
    FREETYPEVERSION=2.3.5
    MACOSX_DEPLOYMENT_TARGET=10.6
    
    ## You shouldn't need to configure past this point
    
    PKG_CONFIG_PATH="${PREFIX}/lib/pkgconfig"
    CFLAGS="-Os -arch x86_64 -arch i386 -I${PREFIX}/include -I${PREFIX}/include/freetype2"
    LDFLAGS="-arch x86_64 -arch i386 -L${PREFIX}/lib"
    CFLAGS_DEPS="-arch i386 -arch x86_64 -I${PREFIX}/include -I${PREFIX}/include/freetype2 -isysroot /Developer/SDKs/MacOSX10.6.sdk"
    LDFLAGS_DEPS="-arch i386 -arch x86_64 -L${PREFIX}/lib -syslibroot,/Developer/SDKs/MacOSX10.6.sdk"
    

    然后我运行了这些命令,它完美地编译和安装。

    sudo make -f make.osx mpl_build
    sudo make -f make.osx mpl_install
    

    【讨论】:

    • 那么我得到了答案 - 正确。
    【解决方案3】:

    你真的应该在 matplotlib-users 邮件列表上问这个问题。它由实际的 matplotlib 开发人员监控,而 StackOverflow (AFAIK) 不是。

    【讨论】:

      【解决方案4】:

      你也可以使用构建

      $ python setup.py build
      

      将以下补丁应用于 setupext.py

      Index: setupext.py
      ===================================================================
      --- setupext.py (revision 7917)
      +++ setupext.py (working copy)
      @@ -334,6 +334,8 @@
      
           module.include_dirs.extend(incdirs)
           module.include_dirs.append('.')
      +    module.include_dirs.append('/usr/local/include')
      +    module.include_dirs.append('/usr/local/include/freetype2')
           module.library_dirs.extend(libdirs)
      
       def getoutput(s):
      

      【讨论】:

        【解决方案5】:

        正如其他地方所建议的,macports 在多个架构和版本的 MacOsX + 上运行良好,允许更新等等:

        $ port search matplot
        py-matplotlib @0.99.0 (python, graphics, math)
            matlab-like syntax for creating plots in python
        
        py-matplotlib-basemap @0.99.4 (python, graphics, math)
            matplotlib toolkit for plotting data on map projections
        
        py25-matplotlib @0.99.0 (python, graphics, math)
            matlab-like syntax for creating plots in python
        
        py25-matplotlib-basemap @0.99.4 (python, graphics, math)
            matplotlib toolkit for plotting data on map projections
        
        py26-matplotlib @0.99.0 (python, graphics, math)
            matlab-like syntax for creating plots in python
        
        py26-matplotlib-basemap @0.99.4 (python, graphics, math)
            matplotlib toolkit for plotting data on map projections
        
        Found 6 ports.
        $
        

        在你的情况下,只需发出:

        $ sudo port install py26-matplotlib
        

        它默认使用 macosx 后端(原生 cocoa)

        【讨论】:

          【解决方案6】:

          对于 Python.org 2.7.1:

          我使用了多种说明。它基本上是通过使用 OSX 的 /usr/X11 中的 libpng 来工作的

          1. 已下载、构建和安装(make install)freetype2 v2.4.4 和 zlib v1.2.5。 没有使用 make deps。

          2. 将 setupext.py 修改为具有

            module.include_dirs.extend(incdirs)
            module.include_dirs.append('.')
            module.include_dirs.append('/usr/local/include')
            module.include_dirs.append('/usr/local/include/freetype2')
            module.include_dirs.append('/usr/X11/include')
            module.library_dirs.extend(libdirs)
            module.library_dirs.append('/usr/local/lib')
            module.library_dirs.append('/usr/X11/lib')
            
          3. 修改 make.osx 以包含相同的 /usr/X11 信息,png 版本 1.2.5 是 OSX 10.6.6 当前本机

            PYVERSION=2.7
            
            PYTHON=python${PYVERSION}
            
            ZLIBVERSION=1.2.5
            
            PNGVERSION=1.2.44
            
            FREETYPEVERSION=2.4.4
            
            MACOSX_DEPLOYMENT_TARGET=10.6
            
            OSX_SDK_VER=10.6
            
            ARCH_FLAGS="-arch i386-arch x86_64"
            
            PREFIX=/usr/local
            
            MACPREFIX=/usr/X11
            
            PKG_CONFIG_PATH="${PREFIX}/lib/pkgconfig"
            
            CFLAGS="-arch i386 -arch x86_64 -I${PREFIX}/include -I${PREFIX}/include/freetype2 -I${MAXPREFIX}/include -isysroot /Developer/SDKs/MacOSX${OSX_SDK_VER}.sdk"
            
            LDFLAGS="-arch i386 -arch x86_64 -L${PREFIX}/lib -L/usr/X11/lib -syslibroot,/Developer/SDKs/MacOSX${OSX_SDK_VER}.sdk"
            
            FFLAGS="-arch i386 -arch x86_64"
            
          4. 然后是标准

            sudo make -f make.osx mpl_build   
            sudo make -f make.osx mpl_install   
            sudo python setup.py install
            
          5. Crikey... 似乎有效。现在有 Image & MDP & pylab & matplotlib with 2.7.1 on 10.6.6

          只要您安装了 libjpeg,图像模块 (Imaging-1.7.7) 就可以正常工作。我用了jpegsrc.v8c,看起来很开心。

          【讨论】:

            【解决方案7】:

            这个解决方案在 OSX 10.8.3 上对我有用:

            ln -s /usr/local/include/freetype2/freetype/ /usr/include/freetype
            

            (确实归功于:http://simpleyuan.blogspot.com/2012/08/matplotlib-error-mac-os-x.html

            【讨论】:

            • 这个解决方案在 OSX 10.8.3 上为我工作:ln -s /opt/local/include/freetype2/freetype/ /usr/include/freetype
            • 对于自制软件:ln -s /usr/local/include/freetype2/ /usr/include/freetype
            猜你喜欢
            • 2011-01-18
            • 1970-01-01
            • 1970-01-01
            • 2010-11-23
            • 1970-01-01
            • 1970-01-01
            • 2011-04-26
            • 2010-11-28
            • 1970-01-01
            相关资源
            最近更新 更多