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

26

我使用全新的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上无法正常工作。


easy_install和pip在幕后执行的工作是一样的,就像手动从源代码安装一样。 - viam0Zah
12个回答

18
我遇到的问题是PIL被编译成PowerPC架构(-arch ppc)。
在设置/构建/编译之前执行此操作:
export ARCHFLAGS="-arch i386"

(假设您在i386上)


2
我已经成功地按照您的建议在Snow Leopard 64位上安装了PIL,但是将架构更改为x86_64,然后使用easy_install安装PIL。(export ARCHFLAGS="-arch x86_64") - Pascal Bourque

12

python.org的Python是使用早期的gcc构建的。尝试使用gcc-4.0而不是SL默认的4.2:

export CC=/usr/bin/gcc-4.0

参考同类问题这里

这样就解决了stdarg的问题。然后你可能会遇到各种依赖库的后续构建问题。

顺便说一下,Snow Leopard的Xcode3中都包含了gcc-4.0和gcc-4.2,因此不需要额外安装。

更新于2011-05:注意,新版Xcode4已经发布,虽然用于10.6的实验性版本并有望成为10.7的标准版本,但不再支持PPC,因此如果安装了Xcode 4,则此建议将不起作用。可选方案包括使用python.org的新版64位/32位Python 2.7.x安装程序或使用MacPorts、Homebrew或Fink安装新版Python 2.6和PIL以及各种第三方库。


完美解决!起初我遇到了一些问题,具体是"import _imaging"失败的问题,但我发现这是由于libjpeg出现了问题,所以我使用gcc-4.0重新构建了libjpeg,并重新安装了PIL,现在一切都运行得很好了。谢谢! - Mike Lawrence
1
不幸的是,xcode 4.0似乎不再包括gcc-4.0,因此如果您从操作系统的新安装开始并仅安装xcode 4.0,则此解决方案将不再起作用。我想我可以安装xcode 3,然后重新安装xcode 4,但那似乎很麻烦。 - Mike Lawrence
从Python 2.7.1和3.2版本开始,每个版本现在都有两个python.org安装程序。新的变体是适用于Mac OS X 10.6及以上版本的64位/32位构建,并使用gcc-4.2。另一个安装程序是传统的32位(Intel / PPC)构建,适用于OS X 10.3及以上版本,并需要gcc-4.0。因此,选项包括:安装gcc-4.0和Xcode 3中的10.4u SDK,或使用新的安装程序变体,或使用MacPorts或Homebrew或Fink安装Python / PIL / libjpeg等。 - Ned Deily
1
我最近也遇到了同样的问题,不幸的是这个解决方案对我没有用。不过我最终成功解决了这个问题,我的做法是使用Macports并执行以下操作:port install py26-pil + universal,然后我找到了PIL安装位置并将其复制到我的site-packages文件夹中,问题就这样解决了!我的电脑型号是 Mac OS X 10.6.7 Intel Core 2 Duo。但请注意,如果你当前未安装libjpeg,则需要正确安装它。只需使用port install jpeg +universal即可。 - Emotu Balogun
1
没有其他方法可用,所以我不得不求助于MacPorts :-( 真是愚蠢的苹果,他们怎么能不在Xcode4中包含这些库呢。唉。 - Luke
1
毫无疑问,苹果正在向开发者发出信号,表明他们计划在OS X 10.7中不再支持PPC架构,并发布了Xcode 4,让每个人在Lion正式发布之前都可以进行实验和解决问题。我已经更新了回复,以考虑到这一点。 - Ned Deily

7

修改后的答案

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

  1. Install 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. Install 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. Compile the latest Python 2.6.2+ from the Mercurial Repo

    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
    

    Note: I did receive the following errors after running make. However, I continued on as I wasn't worried about missing these modules, and I was able to successfully install 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. Update .bash_profile for the new Python 2.6.2+ and for 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. Install easy_install, pip, virtualenv, and virtualenvwrapper for Python 2.6.2+

    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. Create a virtualenv and then use pip to install 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 Installer Disk Image来安装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

这似乎是与Snow Leopard相关的问题,它将-arch标志的默认值从i386更改为x86-64,根据Ronald Oussoren在Message 92083Python Issue 6802中的说法。有一个可用于Python 2.6.2的补丁,但尚未集成到Mac安装程序磁盘映像中。
您最好的解决方案,不涉及MacPorts或Fink,可能是从Mercurial Python RepositorySubversion Python Repository的2.6版本分支编译和安装Python。根据Issue 6802Message 92315,Ronald Oussoren在修订版r74686中修复了此问题。

我一直在使用从Mac Disk Image安装的Python 2.6.2,在尝试在virtualenv中安装Fabric时遇到类似的错误,因此我计划从2.6发布维护分支编译和安装。如果您想要,我会在成功后更新。


Issue6802与构建Python本身有关,而不是使用distutils构建Python扩展。在这里使用gcc-4.0的解决方法应该可以解决这个问题。 - Ned Deily
你当然可以像那样从头开始构建一切,但是如果你选择这条路,为什么不让MacPorts为你完成所有繁重的工作呢?步骤1-如有必要,请下载并安装10.6的MacPorts基础。步骤2-"sudo port install py26-pil",它应该会拉取所有必要的依赖项。步骤3-稍等片刻,直到完成,然后你就完成了。 - Ned Deily
我没有MacPorts的使用经验,所以我不想使用它只是出于个人偏好和追求极简主义的原因。同时,我觉得我已经看到了太多关于MacPorts的负面博客文章。Jesse Noller的博客文章 So You Want to Use Python on the Mac? 或许最能概括我的感受:“我更喜欢编译和自我管理,而且我以前在使用macports时遇到过问题。所以,如果你想安装它,那么就安装吧,但不要用它来进行Python工作。”但是,如果其他人使用它没问题的话,那就很好。 - Matthew Rankin
极简主义很好!我基本上同意杰西的建议。但这里的重点是,你正在推荐手工制作一把大锤来打击一个讨厌的苍蝇。不幸的是,由于它具有C代码和第三方库依赖性,在OSX上安装PIL已经成为一个长期存在的问题;随着10.6向64位的过渡、PPC的放弃以及新的GCC和SDK,新的曲折被添加了进来,但通常不需要重新构建所有的Python来解决一个包的问题。(顺便说一下,与Fink不同,MacPorts严格是一个源分发,所以所有东西都会在本地编译。) - Ned Deily

3

不需要安装MacPorts,也不需要麻烦地安装PIL,就可以在10.6 Snow Leopard上完成。

步骤1:安装MacPorts
步骤2:sudo port install py26-pil
步骤3:mv /opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/* /Library/Python/2.6/site-packages/
步骤4:卸载MacPorts

两全其美?


第三步特别危险,尤其是在星号前面有空格的情况下。它将从你所在的任何目录(cd)中抓取任何文件并将它们移动到/Library/Python/2.6/site-packages/。 - Regis Frey
谢谢,我已经去掉了错误的空格。我忘记有些人可能只是复制和粘贴。这更多是为了说明方法 :) - jriskin

2

Following steps worked for me:

$ brew install pip
$ export ARCHFLAGS="-arch i386 -arch x86_64"
$ pip install pil

1

1

在编程方面,对我来说,“No such file”与stdarg.h的结合是最有趣的错误。似乎缺少一个头文件。我不知道如何确保它已安装在OS X上,所以这只是一半的答案,对此我很抱歉,但也许可以帮助您朝正确的方向前进。


哦,错误信息显示:“/Developer/SDKs/MacOSX10.4u.sdk/usr/include/stdarg.h:4:25: error: stdarg.h: No such file or directory”。但是当我导航到“/Developer/SDKs/MacOSX10.4u.sdk/usr/include/”时,我确实可以看到stdarg.h在那里。 - Mike Lawrence
@Mike 找不到的文件是不是被 stdarg.h 包含进来的?"4:25" 看起来是指 stdarg.h 中的行号。 - Eric O. Lebigot

1

也许你应该尝试从pythonmac网站下载预构建的通用二进制文件

http://pythonmac.org/packages/py25-fat/index.html

这些是为python2.5而设计的,包含了python2.5(所以可能对你有用,也可能没有用),我自己使用这些库是因为我用自制的PIL和py2app时遇到了问题。


不行。PIL的Python2.5二进制安装程序需要先安装Python2.5。 - Mike Lawrence
是的,我在回答中提到了,考虑你可以/可以切换到2.5。 - Anurag Uniyal

1
我发现了一个更简单的方法。 sudo port install python26 sudo port install python_select
然后使用python_select将python26设置为默认Python版本。
然后像平常一样安装PIL即可。

0
你是否已经安装了XCode(随Snow Leopard光盘提供)?有一些关键组件(尤其是GCC)需要安装,而XCode可以为您处理。

是的,在最初的Snow Leopard安装过程中,XCode已经与开发工具一起安装了。我甚至尝试重新从Snow Leopard光盘安装开发工具,这次除了默认的10.5和10.6 SDK之外,还添加了10.4 SDK,但之后仍然出现相同的错误。 - Mike Lawrence

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接