【问题标题】:Build of py2cairo fails in Mac OS X with Homebrew使用 Homebrew 在 Mac OS X 中构建 py2cairo 失败
【发布时间】:2026-02-24 06:25:02
【问题描述】:

我做出了一个值得商榷的决定,直接在 Python 而不是 R 中进行一些网络分析。但是,我无法安装所有 igraph 依赖项,最终使用 py2cairo 失败。

将 Xcode 更新到最新版本后,使用 Homebrew 安装 cairo

brew install cairo

那里有一些针对依赖库的警告,brew link 步骤失败。在 chown 了几个目录之后,我再次运行 brew link,它成功了。

然后,我使用pip 卸载并重新安装了python-igraph

现在我需要从源代码安装 py2cairo(我在 virtualenv 中运行 Python 2.7.6),因此从以下源下载它:

git clone git://git.cairographics.org/git/py2cairo

Install pycairo in virtualenv 之后,我运行./waf configure --prefix=$VIRTUAL_ENV 没有任何问题。

运行 ./waf build 时出现以下错误:

ld: warning: ignoring file /usr/local/Cellar/cairo/1.14.2_1/lib/libcairo.dylib, file was built for x86_64 which is not the architecture being linked (i386): /usr/local/Cellar/cairo/1.14.2_1/lib/libcairo.dylib
[...]
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

然后我尝试切换到使用autogen.sh。第一个问题是我的机器上缺少 pkg.m4,所以我尝试再次使用 Homebrew 重新安装 pkg-config。没用。所以我从这里http://web.mit.edu/barnowl/src/pkg-config/pkg-config-0.23/pkg.m4下载了pkg.m4,然后用Homebrew安装了libtools,并将autogen中的引用更改为glibtoolize等。

但随后autogen.sh 终止并出现以下错误:

autogen.sh: running `aclocal'
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/m4:/usr/local/Cellar/automake/1.15/share/aclocal/pkg.m4:155: ERROR: end of file in comment
autom4te: /usr/bin/m4 failed with exit status: 1
aclocal: error: echo failed with exit status: 1

【问题讨论】:

  • 您可能在您的virtualenv 中运行为i386 架构构建的Python,但是您从Homebrew 安装的Cairo 版本是为x86_64。您可以尝试使用为x86_64 构建的不同版本的 Python 吗?
  • 当我运行 platform.architecture() 时,我得到 `('64bit','') 并且 sys.maxsize 是 9223372036854775807。我可能还在以某种方式在 32 位模式下运行吗?
  • 可能不是,但在您运行 waf build 后,ld 打印的错误消息仍明确指出您正在为 i386 架构(即 32 位)链接某些内容,而 libcairo.dylib仅提供 64 位架构代码。 可能waf 正在尝试构建一个“通用”库(也包含 32 位和 64 位代码)。我会尝试 brew uninstall cairo && brew install cairo --universal - 这也应该为 32 位和 64 位拱门构建 Cairo,这样您就可以从 waf build 链接到它。
  • System Python 是一个通用的构建,正如 Tamás 所暗示的。像他建议的那样,使用通用的 cairo,或者使用一条细长的蟒蛇(比如 Homebrew 的)应该会有所帮助。您还可以使用 brew 安装 py2cairo,然后使用 --system-site-packages 创建您的 virtualenv。

标签: python homebrew igraph cairo pycairo


【解决方案1】:

export ARCHFLAGS='-arch x86_64' # this is for Mac os x ./waf clean ./waf configure --prefix=`python -c "import sys; print sys.prefix"` ./waf build ./waf install

这在我的 Mac 上运行良好

【讨论】: