【发布时间】:2012-06-10 01:01:29
【问题描述】:
我正在尝试使用 brew 在 python 2.7.3 的框架构建 (Mac OSX Lion) 上安装 py2cairo。到目前为止,我一直没有成功。
首先,我尝试了一个简单的
brew install py2cairo
这似乎只适用于非框架构建的 python。当我在我的框架上执行此操作时,一旦我导入带有不兼容二进制错误的 cairo,就会生成 python 错误。
其次,我尝试通过从 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)
我已经在How to install PyCairo 1.10 on Mac OSX with default python 尝试了所有方法,但没有任何帮助。
在我看来,这可能无法找到 python2.7 库和头文件,因为它是一个框架构建。那可能吗?我正在查看 brew 公式,似乎框架构建在构建时没有设置 --enable-share 。我不确定这在这里是否相关——但也许是一种可能性。
其他任何见解都会很棒。提前致谢。
更新:
我发现无法构建 py2cairo 与 gcc 使用“-march=native”标志有关。 Mac OSX 上的 gcc (4.2.1) 有这个问题。然后我重新安装了 gcc 和 python。之后,当使用 waf 构建 py2cairo 时,它得到了“-march=core2”并且一切都构建了。
不幸的是,并非一切都很好。当我从 brew 版本(如上所述)获得的构建中导入 cairo 时,我得到了同样的错误。确切的错误信息是:
>>> import cairo
Fatal Python error: Interpreter not initialized (version mismatch?)
Abort trap: 6
然后python退出。
现在看来问题与 python 的框架构建有关。我在没有构建框架的情况下对其进行了测试,它运行良好。
【问题讨论】:
-
看起来框架构建毕竟是共享构建。我检查了python27库,它是一个Mach-O 64位动态链接共享库x86_64。
-
作为记录,在 OS X 上至少有三种不同类型的 Python 构建:非共享、共享和框架(OS X 唯一的共享类型)。您可能想查看 py27-cairo (macports.org/ports.php?by=name&substr=py27-cairo) 的 MacPorts 端口文件。 MacPorts 通常更擅长处理具有许多依赖项的复杂端口。
-
我刚刚发现 waf 正在从 python 的 distutils 获取 CFLAGS,并且正在使用标志“-march=native”。看来苹果安装的 gcc 版本不适用于此。至少在我的机器上没有——我通过尝试用它编译一个非常简单的文件来验证这一点。仍然不清楚我可以在哪里控制它 - 或者完全取消它。