【问题标题】:Installing Python Imaging Library (PIL) on Snow Leopard with updated Python 2.6.2使用更新的 Python 2.6.2 在 Snow Leopard 上安装 Python Imaging Library (PIL)
【发布时间】:2012-12-27 00:57:56
【问题描述】:

我全新安装(从擦除的驱动器开始)Snow Leopard,并在安装 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 在幕后做同样的事情,就像从源手动安装一样。

标签: python osx-snow-leopard python-imaging-library


【解决方案1】:

我遇到的问题是 PIL 是针对 PowerPC 架构 (-arch ppc) 编译的。

在设置/构建/编译之前执行此操作:

export ARCHFLAGS="-arch i386"

(假设您使用的是 i386)

【讨论】:

  • 我已经按照您的建议在 Snow Leopard 64 位上成功安装了 PIL,但是将 arch 更改为 x86_64,然后使用 easy_install 安装 PIL。 (导出 ARCHFLAGS="-arch x86_64")
【解决方案2】:

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

export CC=/usr/bin/gcc-4.0

查看类似问题here

这就解决了 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 以及各种第 3 方库。

【讨论】:

  • 完美运行!起初我确实遇到了麻烦,因为“import _imaging”会失败,但我将其归结为 libjpeg 的问题,所以我使用 gcc-4.0 重新构建了 libjpeg,重新安装了 PIL,现在一切都像魅力一样工作。谢谢!
  • 不幸的是,xcode 4.0 似乎不再包含 gcc-4.0,因此如果您从全新安装操作系统开始并仅安装 xcode 4.0,此解决方案将不再有效。我想我可以安装 xcode 3,然后重新安装 xcode4,但这似乎很痛苦。
  • 我最近遇到了同样的问题,不幸的是这个解决方案对我不起作用。虽然我成功解决了这个问题,但我所做的是使用 macports 并执行以下操作:port install py26-pil +universal 之后我找到了 PIL 安装并将其复制到我的站点包文件夹中瞧!解决了2个晚上的心痛。我的 PC 规格是 Mac OS X 10.6.7 Intel Core 2 Duo。但是请注意,如果当前未正确安装 libjpeg,则需要正确安装它。只需使用 port install jpeg +universeral
  • 没有其他东西对我有用,所以我不得不求助于 macports :-( 愚蠢的苹果,他们怎么能不将库包含在 Xcode4 中。哦,好吧。
  • 毫无疑问,Apple 正在向开发人员发出一个信号,即他们计划在 OS X 10.7 中不再支持 PPC 架构,并且他们已经发布了 Xcode 4,让每个人都可以在 Lion 出现之前进行试验和解决问题正式发布。考虑到这一点,我已经稍微更新了回复。
【解决方案3】:

修改后的答案

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

  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 Repo 编译最新的 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. 为新的 Python 2.6.2+ 和 virtualenvwrapper 更新 .bash_profile

    # 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. 创建一个virtualenv,然后使用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 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 相关的问题,根据 Python Issue 6802Message 92083 中的 Ronald Oussoren 所述。有一个可用的 Python 2.6.2 补丁,但尚未集成到 Mac 安装程序磁盘映像中。

不涉及 MacPorts 或 Fink 的最佳解决方案可能是从 Mercurial Python RepositorySubversion Python Repository 的 2.6 发布分支编译和安装 Python。根据Issue 6802Message 92315,Ronald Oussoren 在Revision r74686 中修复了这个问题。

在尝试在 virtualenv 中安装 Fabric 时,我在使用从 Mac 磁盘映像安装的 Python 2.6.2 时遇到了类似的错误,因此我计划从 2.6 版本维护分支进行编译和安装。如果你愿意,我会在成功时更新。

【讨论】:

  • Issue6802 与构建 Python 本身有关,而不是使用 distutils 构建 Python 扩展。使用 gcc-4.0 的解决方法应该可以解决这里的问题。
  • 您当然可以像这样从头开始构建所有东西,但是,如果您要走这条路,为什么不让 MacPorts 为您完成所有繁重的工作呢?第 1 步 - 如有必要,下载并安装 10.6 的 MacPorts 基础。第 2 步。“sudo port install py26-pil”应该引入所有必要的依赖项。第 3 步。稍等一下,直到它完成,然后你就完成了。
  • 我没有使用 MacPorts 的经验,所以我不想使用它只是 1) 个人偏好成为一个有意义的极简主义者 2) 我觉得我已经看到了太多的负面关于 MacPorts 的博客文章。 Jesse Noller 的题为So You Want to Use Python on the Mac? 的博文可能最好地总结了我的感受:“我更喜欢编译和自我管理,而且我过去在使用 macports 时遇到过问题。所以,继续安装它,但不要将它用于 python 工作。”不过,我对 MacPorts 没有个人经验,所以如果它适用于其他人,那就太好了。
  • 极简主义很好!我大体上同意 Jesse 的建议。但这里的重点是,您建议您用手制作一把大锤来拍打讨厌的苍蝇。不幸的是,因为它有 C 代码和 3rd 方 lib 依赖项,在 OSX 上安装 PIL 长期以来一直存在问题;随着 10.6 到 64 位的过渡、PPC 的下降以及新的 GCC 和 SDK,添加了新的变化,但很少需要重建所有 Python 来解决一个包的问题。 (顺便说一句,与 Fink 不同,MacPorts 严格来说是一个源代码发行版,所以一切都在本地编译。)
【解决方案4】:

10.6 Snow Leopard 轻松安装 PIL,无需保留 MacPorts :)

第 1 步:安装 MacPorts
第 2 步:sudo 端口安装 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/。
  • 谢谢,我摆脱了错误的空间。我忘了有些人可能只是剪切和粘贴。更多的是说明方法:)
【解决方案5】:

以下步骤对我有用:

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

【讨论】:

    【解决方案6】:

    在我看来,“没有这样的文件”与 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 不是在 stdarg.h 中找不到 #included 的文件吗?看起来“4:25”指的是 stdarg.h 中的行号。
    【解决方案7】:

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

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

    这些是针对 python2.5 的,包含 python2.5(所以可能对你有用也可能不可用),我一直在使用它,因为我在使用 py2app 的自构建 PIL 时遇到问题。

    【讨论】:

    • 没有骰子。 PIL 的 python2.5 二进制安装程序需要安装 python2.5。
    • 是的,我在回答中提到,认为您可能/可以切换到 2.5
    【解决方案8】:

    我找到了一个更简单的方法。 须藤端口安装 python26 sudo 端口安装 python_select

    然后使用 python_select 将 python26 设置为默认值。

    然后照常安装 PIL。

    【讨论】:

      【解决方案9】:

      我能够使用以下说明通过 SL 的 Python 安装 PIP:

      http://jetfar.com/libjpeg-and-python-imaging-pil-on-snow-leopard/

      【讨论】:

        【解决方案10】:

        您是否安装了XCode(来自 Snow Leopard 光盘)?需要安装一些 XCode 为您处理的关键组件(最值得注意的是 GCC)。

        【讨论】:

        • 是的,XCode 在最初的 Snow Leopard 安装过程中与开发人员工具一起安装。我什至尝试从 Snow Leopard 光盘重新安装开发人员工具,这次除了默认的 10.5 和 10.6 SDK 之外,还添加了 10.4 SDK,但之后我仍然遇到相同的错误。
        【解决方案11】:

        分两步解决:

        第 1 步: 卸载并安装 Xcode,此处建议: http://binarylionstudios.com/blog/2011/01/30/error-stdarg.h-no-such-file-or-directory/

        要正确删除 Xcode,请遵循以下答案: How to fully remove Xcode 4

        sudo /Developer/Library/uninstall-devtools --mode=all

        在你重启你的 mac 后使用 install Xcode.app

        第二步:重新安装xcode后,安装失败

        无法执行 gcc-4.2: No such file or directory PIL

        解决我关注这篇文章的问题: http://aravir-rose.blogspot.com/2011/12/installing-python-27s-imaging-library.html

        祝你好运!

        【讨论】:

          【解决方案12】:

          在具有当前 XCode 且没有 gcc-4.0 的 OS X Lion 上,我可以通过设置以下环境变量来解决缺少的 stdard.h 错误:

          export CC="/usr/bin/llvm-gcc-4.2"

          我不能说我明白为什么会这样。

          顺便说一句,这也适用于 PIL 的 Pillow fork。

          【讨论】:

            猜你喜欢
            • 2011-01-06
            • 1970-01-01
            • 2010-10-29
            • 1970-01-01
            • 2011-03-14
            • 1970-01-01
            • 1970-01-01
            • 2023-03-04
            • 1970-01-01
            相关资源
            最近更新 更多