在Mac OSX上无法安装py2cairo

6

我想在使用brew构建的Python 2.7.3框架(Mac OSX Lion)上安装py2cairo,但到目前为止一直不成功。

首先,我尝试了一个简单的命令:

brew install py2cairo

这种方法似乎只适用于非框架构建的Python。当我在我的框架构建Python上这样做时,只要我导入cairo就会出现不兼容二进制错误。

其次,我尝试从Github获取并发出以下命令来构建它:

python waf configure

这会导致错误出现:
Checking for library python2.7           : not found 
Checking for library python2.7           : not found 
Checking for library python2.7           : not found 
Checking for library python27            : not found 
Checking for program python2.7-config    : /usr/local/Cellar/python/2.7.3/bin/python2.7-   config 
Checking for header Python.h             : Could not find the python development headers 
The configuration failed
(complete log in /Users/tobin/tmp/py2cairo/build_directory/config.log)

我已经尝试了所有方法,位于以下链接:如何在Mac OSX上使用默认的Python安装PyCairo 1.10,但这些方法都没有帮助到我。
在我看来,这可能是由于它是一个框架构建而导致无法找到python2.7库和头文件。这有可能吗?我查看了brew公式,发现框架构建在构建时没有设置--enable-share选项。我不确定这是否与此相关 - 但也许是一种可能性。
如果有其他见解,请告诉我。提前感谢您。
更新:
我发现无法构建py2cairo是由于gcc使用了"-march=native"标志。Mac OSX上的gcc(4.2.1)存在问题。然后我重新安装了gcc和python。之后使用waf构建py2cairo时,它获得了“-march=core2”,并且所有内容都已构建完成。
不幸的是,还不是完全好。当我从构建版本中导入cairo时,出现了与brew版本相同的错误(如上所述)。确切的错误消息是:
>>> import cairo
Fatal Python error: Interpreter not initialized (version mismatch?)
Abort trap: 6

然后Python就退出了。

现在看起来问题与Python的框架构建有关。我测试了没有框架构建,它可以正常工作。


1
看起来框架构建实际上是共享构建。我检查了python27库,它是一个Mach-O 64位动态链接的共享库x86_64。 - Rocketman
1
值得一提的是,在 OS X 上至少有三种不同类型的 Python 构建版本:非共享、共享和框架(一种仅限于 OS X 的共享类型)。您可能想查看 py27-cairo 的 MacPorts portfile(http://www.macports.org/ports.php?by=name&substr=py27-cairo)。MacPorts 在处理具有许多依赖项的复杂端口时通常更好。 - Ned Deily
我刚刚发现waf从python的distutils获取CFLAGS,并使用了“-march=native”标志。看起来苹果安装的gcc版本不支持此功能。至少在我的机器上不支持——我尝试使用它编译一个非常简单的文件进行验证。目前还不清楚我在哪里可以控制这个问题,或者完全取消它。 - Rocketman
1个回答

1

为了不让这个问题悬而未决...我想跟进一下我的解决方案和学习要点:

  1. 如上所述,我的OSX版本与gcc编译标志-march=native不兼容。在稍后的版本中,它变成了-march=core2。在清理我的机器后,这基本上得到了修复。

  2. 多年来,我一直在各种MAC OSX安装中弄得一团糟,并接受“迁移选项”。两台机器之前,我安装了版本2.4和2.5的python二进制文件,然后出于各种原因最终转向了macports。然后最终转向了homebrew。当我转向homebrew时,我试图手动清理事情(但当然这可能很具有挑战性)。更糟糕的是,每次我在过去6年里得到新的mac(2次)时,我都选择了“迁移安装”选项,这推动了混乱并使情况变得更糟。因此,当我开始进一步调查时,我发现我的系统上有各种不同版本的python安装 - mac-native、python-native、mac ports、homebrew,甚至可能还有其他的。因此,我最好的猜测是cairo在找到其中一个并尝试针对它进行构建。

我最终通过手动删除一堆旧的Python安装文件,然后使用全新的virtualenv和homebrew安装Python 2.7来解决了这个问题。

警告:我不认为这是最明智的做法。我小心翼翼地没有删除我认为与OSX Lion(我认为它是2.6)附带的Python版本 - 但并不清楚它可能会对依赖于旧版本mac安装的Python的其他东西产生什么影响。最终,我删除了2.3、2.4和两个不同的2.5版本以及某些地方的各种链接。太混乱了!除非你确信自己在做什么(这我不是),否则我不建议采用这种方法。基本上,我想消除已经积攒了6年的Python安装垃圾。

为了安全起见,我可能应该从全新的OSX Lion安装开始,然后添加我的homebrew版本,并从那里开始。我很可能在不久的将来这样做。


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