Mac OS X Lion,Virtualenv,PIL安装 - GCC错误

10
我刚刚完成在Mac OS X Lion上安装了Xcode。完成后,我尝试使用pip、easy_install和home brew在虚拟环境下安装PIL,但三者均出现错误。pip install会给出以下错误消息:

pip `

unable to execute gcc-4.0: No such file or directory

error: command 'gcc-4.0' failed with exit status 1

出现错误:easy_install无法执行gcc-4.0命令:没有这个文件或目录 错误:Setup脚本退出,命令'gcc-4.0'失败,退出状态为1

home brew 出现错误:无法执行python setup.py build_ext

对于此问题,我不是很确定该怎么做。

谢谢, CG

5个回答

8
在OS X Lion 10.7上,Xcode 4.1不再包含gcc-4.0,这与早期版本的OS X不同。当您安装像PIL这样包含C扩展模块的Python包时,Python的Distutils将尝试使用与Python本身构建时相同版本的C编译器。看起来用于创建您的virtualenv的Python版本是旧的32位Python,并使用gcc-4.0构建。您可以通过启动virtualenv中的python来确定。如果它说gcc-4.0,那么您需要重新创建virtualenv,使用新的基础Python,可以是Lion中提供的Apple Python之一,也可以使用python.org安装程序或brew recipe安装较新版本的Python。然后为该Python安装Distribute、pip和virtualenv,创建一个新的虚拟环境,然后在其中安装PIL。

以下是Python描述行中的内容:Python 2.6.4(r264:75821M,2009年10月27日,19:48:32) [GCC 4.0.1(Apple Inc. build 5493)]在darwin上。 - Cory Gwin
是的,那似乎是从python.org下载的旧版Python 2.6.4。您可以查看是否已安装在/Library/Frameworks/Python.framework/Versions/2.6中。您可以通过键入以下命令来卸载它:sudo rm -r /Library/Frameworks/Python.framework/Versions/2.6。所有内容都在一行上,请小心输入! - Ned Deily
太棒了,我刚刚把所有东西都搞定了。你真是太厉害了! - Cory Gwin
对于仍在解决此问题的任何人,我在这里发布了适用于我的解决方案:http://stackoverflow.com/questions/8832294/pil-installation-fails-missingstdarg-h/ - Yogev Shelly
1
对于只是想解决这个问题的人来说,这个答案绕了很多弯路。阅读完这个答案后,我不知道如何解决这个问题。 - korona
Korona:与其对一个显然被其他人认为有用的答案进行负面评价,也许你可以考虑提出自己的问题或更明确地说明你想要做什么。 - Ned Deily

1

在同一个问题上花费了数小时后,这是对我有效的解决方法:

下载PIL源代码并进入其中。 通过以下方式检查您拥有哪个版本的gcc

gcc
i686-apple-darwin10-gcc-4.2.1: no input files

然后我强制使用这个版本:

export CC=gcc-4.2

然后选择正确的架构(在我的情况下是32位):

export ARCHFLAGS="-arch i386"

对于64位系统,请使用导出命令ARCHFLAGS="-arch x86_64"

然后进行构建和安装:

python setup.py build
python setup.py install

0
你能在你的系统上找到gcc-4.0二进制文件吗?你可能需要将其所在的目录添加到你的PATH环境变量中。

有一个在/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.0的路径下,这似乎相当随意。usr/bin或/developer/usr/bin中没有副本,这不是我所期望的。我该如何将其添加到我的PATH环境变量中? - Cory Gwin

0
如果有帮助的话,我用符号链接解决了这个棘手的问题,而且我认为它对你也会起作用。我写这篇文章是以我的gcc版本4.2为参考的:
cd /usr/bin
rm cc gcc c++ g++
ln -s gcc-4.2 cc
ln -s gcc-4.2 gcc
ln -s c++-4.2 c++
ln -s g++-4.2 g++
ln -s gcc-4.2 gcc-4.0

好了,搞定了!


0
一个想法是将gcc-4.0指向默认的gcc标志:
sudo ln -s /usr/bin/gcc /usr/bin/gcc-4.0

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