【发布时间】: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