【问题标题】:Cannot Install py2cairo on Mac OSX无法在 Mac OSX 上安装 py2cairo
【发布时间】: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 版本不适用于此。至少在我的机器上没有——我通过尝试用它编译一个非常简单的文件来验证这一点。仍然不清楚我可以在哪里控制它 - 或者完全取消它。

标签: python macos homebrew waf


【解决方案1】:

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

  1. 如上所述,我的 OSX 版本与 gcc 编译标志不兼容,称为 -march=native。在以后的版本中,它以 -march=core2 的形式出现。在清理我的机器后,这几乎可以通过编译器/版本更改自行修复。

  2. 多年来,我对所有各种 MAC OSX 的安装都一团糟——并且接受了“迁移选项”。两台机器前 - 我安装了 2.4 和 2.5 版本的 python 二进制文件,然后由于各种原因最终去了 macports。然后最终去了自制。当我去自制软件时,我尝试用手清理东西(但这当然可能具有挑战性)。更糟糕的是——在过去的 6 年中,每次我得到一台新的 mac(2 次)时,我都会选择“迁移安装”选项,这会推动混乱并使其变得更糟。因此,当我开始进一步研究时——我安装了各种不同版本的 python——mac-native、python-native、mac 端口、自制程序,甚至可能还有其他系统在我的系统上。所以我最好的猜测是,cairo 以某种方式找到了其中之一并试图与之对抗。

我最终通过手动删除一堆旧的 python 安装解决了这个问题,然后重新开始安装 python 2.7 的新 virtualenv 和 homebrew。

警告:我认为这不是最明智的做法。我小心翼翼地没有删除我认为 OSX Lion 自带的 Python 版本(我认为它是 2.6)——但目前尚不清楚它可能如何影响可能依赖于较旧的 mac 安装的 python 的其他一些事情。我最终删除了一个 2.3、一个 2.4 和两个不同的 2.5 - 以及某些地方的各种链接。真是一团糟!除非您完全确定自己在做什么(我不是),否则我不会建议这种方法。我基本上是想杀死已经收集了 6 年的 python install crud。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-27
    • 2015-08-27
    • 2013-05-08
    • 1970-01-01
    • 2021-04-22
    • 1970-01-01
    • 2018-04-07
    • 2012-04-21
    相关资源
    最近更新 更多