在Snow Leopard上安装更新的Python 2.6.2的Python Imaging Library (PIL)

26 投票
12 回答
31019 浏览
提问于 2025-04-15 14:23

我刚刚在一台全新格式化的电脑上安装了Snow Leopard系统,并在安装过程中安装了开发工具。

接着,我安装了Python 2.6.2,替换掉了Snow Leopard自带的Python 2.6.1。我尝试通过以下几种方式来安装PIL:

  1. easy_install
  2. pip
  3. 下载源代码,然后手动运行 python setup.py build

但无论哪种方式都出现了相同的错误(pip的日志链接:http://drop.io/gi2bgw6)。我看到其他人用Snow Leopard自带的Python 2.6.1成功安装了PIL,所以我不明白为什么我在用2.6.2时会遇到这么多问题。

12 个回答

7

修改后的回答

以下是我在Mac OS X 10.6上成功安装PIL的步骤(没有使用MacPorts或Fink)。

  1. 安装readline

    cd ~/src
    curl -O ftp://ftp.cwru.edu/pub/bash/readline-6.0.tar.gz
    tar -xvzf readline-6.0.tar.gz
    cd readline-6.0
    ./configure  
    make  
    sudo make install
    
  2. 安装gbdm

    cd ~/src
    curl -O ftp://mirror.anl.gov/pub/gnu/gdbm/gdbm-1.8.3.tar.gz
    tar -xvzf gbdm-1.8.3.tar.gz
    cd gdbm-1.8.3
    # Need to modify Makefile.in
    perl -pi -e 's/BINOWN = bin/BINOWN = root/' Makefile.in
    perl -pi -e 's/BINGRP = bin/BINGRP = wheel/' Makefile.in
    ./configure
    make
    sudo make install
    
  3. 从Mercurial仓库编译最新的Python 2.6.2及以上版本

    cd ~/development
    hg clone http://code.python.org/hg/branches/release2.6-maint/ python-release2.6-maint.hg
    cd python-release2.6-main.hg
    ./configure --enable-framework MACOSX_DEPLOYMENT_TARGET=10.6
    make
    sudo make frameworkinstall
    

    注意: 在运行make后,我确实遇到了一些错误。不过我没有太在意这些模块缺失的问题,最终还是成功安装了PIL。

    Failed to find the necessary bits to build these modules:
    _bsddb             dl                 imageop         
    linuxaudiodev      ossaudiodev        spwd            
    sunaudiodev                                           
    To find the necessary bits, look in setup.py in detect_modules() for the module's name.
    
    
    Failed to build these modules:
    Nav                                                   
    
    running build_scripts
    
  4. 更新.bash_profile,以便使用新的Python 2.6.2及虚拟环境管理工具virtualenvwrapper

    # Set PATH for MacPython 2.6 if Python2.6 is installed
    if [ -x /Library/Frameworks/Python.framework/Versions/2.6/bin/python2.6 ]; then
        PATH="/Library/Frameworks/Python.framework/Versions/2.6/bin:${PATH}"
        export PATH
    fi
    
    # MDR April 23, 2009: Added for virtualenvwrapper
    if [ -x   /Library/Frameworks/Python.framework/Versions/2.6/bin/virtualenvwrapper_bashrc ]; then
        export WORKON_HOME=$HOME/.virtualenvs
        export PIP_VIRTUALENV_BASE=$WORKON_HOME
        source /Library/Frameworks/Python.framework/Versions/2.6/bin/virtualenvwrapper_bashrc
    fi
    
  5. 为Python 2.6.2及以上版本安装easy_install、pip、virtualenv和virtualenvwrapper

    curl -O http://peak.telecommunity.com/dist/ez_setup.py
    sudo python ez_setup.py
    sudo easy_install pip
    sudo easy_install virtualenv
    sudo easy_install virtualenvwrapper
    
  6. 创建一个虚拟环境,然后用pip安装PIL

    mkvirtualenv pil-test
    cdvirtualenv
    easy_install pip
    pip install http://effbot.org/downloads/Imaging-1.1.6.tar.gz
    

注意: 我无法通过pip install pil来安装PIL,所以我按照上面的URL进行了安装。

原始回答

从你提供的pip-log.txt文件来看,你似乎是通过Python.org上发布的2009年4月16日的Mac安装镜像安装了Python 2.6.2。你能确认这一点吗?

从pip日志来看,gcc出现了退出状态1的错误。你pip日志中的gcc命令如下:

gcc -arch ppc -arch i386 -isysroot /Developer/SDKs/MacOSX10.4u.sdk -fno-strict-aliasing -fno-common -dynamic -DNDEBUG -g -O3 -DHAVE_LIBJPEG -DHAVE_LIBZ -I/System/Library/Frameworks/Tcl.framework/Headers -I/System/Library/Frameworks/Tk.framework/Headers -IlibImaging -I/Library/Frameworks/Python.framework/Versions/2.6/include -I/usr/local/include -I/usr/include -I/Library/Frameworks/Python.framework/Versions/2.6/include/python2.6 -c _imaging.c -o build/temp.macosx-10.3-fat-2.6/_imaging.o

根据Ronald Oussoren在Python问题6802的消息92083中提到的,这似乎是由于Snow Leopard将-arch标志的默认值从i386改为x86-64引起的问题。虽然Python 2.6.2有一个补丁,但它并没有被集成到Mac安装镜像中。

如果不使用MacPorts或Fink,最好的解决方案可能是从Mercurial Python仓库Subversion Python仓库编译并安装Python 2.6的发布版本。根据问题6802的消息92315,Ronald Oussoren在修订版r74686中修复了这个问题。

我在尝试在虚拟环境中安装Fabric时,使用从Mac镜像安装的Python 2.6.2也遇到了类似的错误,所以我计划从2.6的维护分支编译和安装。如果成功的话,我会更新进展。

18

我遇到的问题是PIL这个库是在PowerPC架构下编译的(-arch ppc)。

在你进行设置、构建或编译之前,先做这个:

export ARCHFLAGS="-arch i386"

(假设你是在i386架构上)

12

python.org 上的 Python 是用一个早期版本的 gcc 编译的。你可以试试用 gcc-4.0,别用 SL 默认的 4.2:

export CC=/usr/bin/gcc-4.0

你可以在 这里 查看类似的问题。

这样可以解决 stdarg 的问题。不过,你可能会遇到后面构建时和一些依赖库相关的问题。

顺便说一下,gcc-4.0 和 gcc-4.2 都包含在 Snow Leopard 的 Xcode 3 里,所以不需要额外安装。

更新于 2011-05:注意,新版的 Xcode 4 是为了在 10.6 上进行实验而发布的,预计在 10.7 中会成为标准版本,但它不再支持 PPC。如果你安装了 Xcode 4,这个建议就不适用了。你可以选择从 python.org 下载更新的 64 位/32 位 Python 2.7.x 安装包,或者通过 MacPorts、Homebrew 或 Fink 安装更新的 Python 2.6 和 PIL 以及各种第三方库。

撰写回答