如何在Mac OSX上使用默认的Python安装PyCairo 1.10

16

有人在Mac上使用新的waf构建安装Pycairo 1.10吗?它失败了,提示无法找到Python头文件。

3个回答

13

我认为Mac OS X上的waf严重损坏 :(

以下是我的解决方法。在python waf configure无法找到Python.h后,我查看了位于build_directory中的config.log文件,并发现失败的真正原因是不兼容的架构。waf脚本尝试使用i386架构构建具有CPython调用的简单源文件。由于我的Python是为x86_64架构构建的,因此它无法执行。

我猜你可以将Python重新构建为通用二进制文件,但我没有尝试过。但是,可以使用x86_64架构构建pycairo。以下是方法。


我的设置:

$ python --version
Python 2.7.2

$ type python
python is /usr/local/bin/python

$ file /usr/local/bin/python
/usr/local/bin/python: Mach-O 64-bit executable x86_64

$ brew --version
0.8

重要提示:我的Python版本是为x86_64架构构建的。在执行下面描述的步骤之前,请确保您的架构也是如此。

brew代表homebrew。您必须使用它而不是fink或MacPorts,以便以下步骤适用于您。


现在,为了安装cairo和pycairo,我要执行以下操作:

  1. brew install cairo(截至今天版本为1.10.2

  2. 获取python 2.x的pycairo源代码(如果你获取快照,则名称为py2cairo,而pycairo现在需要python 3.x)。我使用了来自master分支的源代码(提交f3435910d8f5365b45ebd4216f4043383c9e3e19)

  3. 在你选择的编辑器中打开wscript,在函数configure中找到env = ctx.env这行,并在其下面添加以下行

    env.append_unique('CFLAGS', ['-arch', 'x86_64'])

  4. 保存文件

  5. 在终端中运行以下命令:

    export CC=/usr/bin/gcc

    export PKG_CONFIG_PATH=/usr/local/Cellar/cairo/1.10.2/lib/pkgconfig/

    重要提示:后面的路径只有在你通过homebrew安装cairo时才能生效

  6. 然后按照pycairo的INSTALL文件中所述运行waf命令:

    python waf configure

    python waf build

    python waf install

这应该可以解决问题。如果对你没有用,我认为最好在pycairo邮件列表上提出这个话题(如果有的话)。


哈哈,我尝试了一下,因为我想检查一下brew,结果它成功了。谢谢。 - user317033
小问题 - 你实际上没有使用默认的Python吗? - jabley
@jabley 默认的Python版本太老了。2.7版本增加了许多有用的小功能。- http://www.python.org/getit/releases/2.7/ - Alexei Sholik
2
我必须按照这里的说明(http://www.niconomicon.net/blog/2011/10/09/2120.wrestling.python.snow.leopard) 进行一些额外的步骤来正确设置LD_LIBRARY_PATH和其他几个环境变量。 - llimllib
2
我按照这些步骤操作,但是出现了错误“Cairo pkgconfig 需要 xcb-shm 包,但未安装”。我将 PKG_CONFIG_PATH 更改为 export PKG_CONFIG_PATH=/usr/local/Cellar/cairo/<VERSION>/lib/pkgconfig/:/opt/X11/lib/pkgconfig,然后配置步骤就成功了。来源:https://github.com/mxcl/homebrew/issues/14123 - Jonathan Drake

12

对于任何需要安装py2cairo在OSX Lion上的人,我使用了稍微不同的方法,并参考llimllib的链接成功安装。希望这能有所帮助:

python waf clean
export PYTHONPATH=/Library/Frameworks/Python.framework/Versions/2.7/
export LD_LIBRARY_PATH=/Library/Frameworks/Python.framework/Versions/2.7/:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/Library/Frameworks/Python.framework/Versions/2.7/lib:$LD_LIBRARY_PATH
export LINKFLAGS='-search_dylibs_first  -L /Library/Frameworks/Python.framework/Versions/2.7/lib/'
export ARCHFLAGS='-arch x86_64'
export CC=/usr/bin/gcc-4.2
export PKG_CONFIG_PATH=/usr/local/Cellar/cairo/1.10.2/lib/pkgconfig/

python waf configure --prefix=$PYTHONPATH
python waf build
python waf install

2
使用Mac Ports cairo库对我很有效,只是没有设置pkg_config_path,上述标志就足够了。 - Dr BDO Adams
1
没有使用CC或PKG_CONFIG_PATH标志,对我来说可行。 - lorcan

3

Android的步骤几乎可以工作了。需要使用以下命令(来自llimllib):

export ARCHFLAGS='-arch x86_64'

在第5步中,然后python waf install就可以成功了。


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