【问题标题】:How to install pycairo on osx?如何在 osx 上安装 pycairo?
【发布时间】:2010-12-02 19:40:24
【问题描述】:

我正在尝试在 OSX 下安装pycairocairo graphics library 的 Python 绑定)。

我开始了

easy_install pycairo

得到:

Requested 'cairo >= 1.8.8' but version of cairo is 1.0.4

error: Setup script exited with Error: cairo >= 1.8.8 not found

所以我去了 cairo 的网站并下载了 cairo 的最新包 (1.8.8),以及名为 pixman 的最新包(两个源包——找不到 osx 二进制文件)

将两者都解压缩,每个都在自己的目录中。 对于 pixman,常规的 ./configure ; make ; sudo make install 工作只是找到 对于 cairo,./configure 似乎有效,但 make 失败:

In file included from cairo-analysis-surface.c:37:
cairoint.h:71:20: error: pixman.h: No such file or directory

我做错了什么?

为什么我必须如此努力才能让软件库在“正常工作”的操作系统上工作?为什么darwin不像linux?

【问题讨论】:

  • 更新:我将所有 .h 文件从 pixman 目录复制到 cairo 的。一个丑陋的蛮力的东西,但它似乎工作:'make ; sudo make install' 似乎工作正常。不过,在尝试安装 pycairo 时,我仍然会收到“Requested 'cairo >= 1.8.8' but cairo version is 1.0.4”。它认为我有 cairo 1.0.4,而忽略了新的。知道为什么吗?我该如何解决?

标签: python macos installation makefile cairo


【解决方案1】:

如果你已经有自制软件,这两个命令应该会有所帮助:

$ brew install cairo --use-clang 
$ brew install py2cairo

对于非 Homebrew 安装的 Python,设置 PYTHONPATH 以查找 pycairo。您可以在 .bashrc/.profile/.whatever 中将 PYTHONPATH 设置为以下内容:

PYTHONPATH=/usr/local/lib/python2.7/site-packages:$PYTHONPATH.

我个人不需要使用最后一部分,但它可能会对您有所帮助。

【讨论】:

  • 如果你使用的是python 3,你可以使用“brew install py3cairo”来代替。
  • Error: invalid option: --use-clang;然后:brew install cairo --cc=clang;然后:Error: cairo: no bottle available!
【解决方案2】:

您似乎在这里混合了各种安装选项。 MacPorts 包系统port install 命令应该自动引入特定包所需的所有依赖项,因此诀窍是从正确的顶级项目开始。对于 python 包,MacPorts 目前有一个通用约定:以py- 开头的包用于 python 2.4,py25- 用于 2.5,py26- 用于 2.6。目前在 MacPorts 中提供了 py-cairopy25-cairopy26-cairo 包。

通过选择py-cairo,您选择了python2.4版本,您可能会发现MacPorts为您构建并安装了python2.4(链接在/opt/local/bin/python2.4),如果您启动它,您可能会发现你可以在那里进口开罗。现在 可能 可以满足您的需求,但 Python 2.4 已经过时且不再受支持,因此,如果您刚刚开始,最好从当前两个版本之一的 Python 2.6 开始蟒蛇。为此,您需要做的就是:

sudo port install py26-cairo

这应该会带来任何缺失的依赖项,主要是 MacPorts python2.6,您可以从 /opt/local/bin/python2.6 运行它。您可能希望在 shell 启动脚本(可能是 .bash_profile)中更改您的 $PATH,以便将 /opt/local/bin 放在搜索路径的早期。

因为安装 Cairo 及其 python 绑定似乎相当复杂,所以坚持使用完整的 MacPorts 解决方案应该更容易更好。这确实意味着您不必要地(并且无害地)安装了几个您不需要的 Python 实例。但是,如果您确实想稍微清理一下,可以使用以下命令轻松删除 MacPorts python24:

sudo port uninstall py-cairo python24

完全删除python.org安装的python比较复杂。我已经解释了过程here。但是,只要您保持笔直,就没有迫切需要删除任何一个。

【讨论】:

  • 我试过你的建议,它成功了。非常感谢。我认为我的主要问题是我一般不了解 macport 和 macos 的机制和约定。我已经阅读了 macports.org 的 macports 介绍和文档,但我从未意识到标题中使用了版本号(我认为它以某种方式使用解析为最新版本或其他内容)
  • 是的,MacPorts python 命名约定相当混乱。如果他们从使用 py24- 而不是 py- 开始,则可能会少一些。很高兴这一切都奏效了!
  • 如何让cairo.HAS_QUARTZ_SURFACE 产生 1?
  • vy32,您不太可能通过在评论中提出不相关的问题来得到答案。创建一个新问题并提供足够的上下文,以便人们给出明智的答案。
【解决方案3】:

好的。我解决了。将解决方案放在这里以供将来参考,它可能会对某人有所帮助。

基本上,整个ports/fink 系统有点乱,osx 在linux-y 世界中并不能很好地发挥作用。

所以,我在 OSX 上安装 pycairo 所需的步骤是:

  • 下载最新的pixman、cairo、pycairo源码版本
  • 提取所有内容。那么:

    cd PIXMAN_DIR ; ./configure ; make ; sudo make install 
    cd CAIRO_DIR ; cp PIXMAN_DIR/pixman/*.h . ; ./configure ; make ; sudo make install
    cd PYCAYRO_DIR; locate cairo.pc 
    

    希望返回几个位置。选择最有可能的一个(开罗最新的一个)。对我来说,它是“/opt/local/lib/pkgconfig/cairo.pc”,然后:

    export PKG_CONFIG_PATH=/opt/local/lib/pkgconfig/
    

    在此之后,仍在 PYCAIRO_DIR 中,执行:

    python setup.py install
    

应该这样做...

【讨论】:

  • 我认为您有问题,因为您将 macports fink 和您自己的代码混合在一起 - 仅使用其中一个;)有效地,这些中的每一个都等效于 Linix 自己的打包系统。我这么说的原因是 /opt/local/bin 来自 Macports 而不是你自己的代码,默认情况下是 /usr/local/bin
  • 您能否添加每个库的下载位置和文件?
【解决方案4】:

port 命令安装用于 darwinports python 安装的库,这与框架构建不同(因此步骤 2 和 3 不应该工作)。请改用sudo easy_install pycairo(尽管您的第 4 步应该与此等效)。

同时查看which python,以检查您是否确实在运行您认为的python。

【讨论】:

  • 这里 (stackoverflow.com/questions/1500866/…) 是另一个有类似问题的人
  • 如果你不小心,像这样使用 easy_install 可能会使事情变得更加复杂,因为它会将 Apple 提供的 python 带入图片中,并且无助于解决根本问题。
  • 我认为 Akusete 的意思是他想从他的 Python2.6.4 框架构建中使用 pycairo(他的第 1 步)。如果他能做到这一点,他可以放弃所有 MacPorts python 的东西,并在未来避免这个问题。但是您的全 MacPorts 解决方案也很好。有什么理由喜欢它吗?
  • 直接获取所有依赖库并正确链接可能很棘手(我没有查看 pycairo 安装文件以查看它们是否检查 MacPorts 位置中的库)。更重要的是,默认情况下,一个普通的easy_install 命令很可能会调用 Apple 提供的 /usr/bin/easy_install 命令,该命令会将 pycairo 安装在 Apple 提供的默认 Python 的 site-packages 目录中,而不是 python.org 2.6.4;为此,您需要为该 python 安装单独的 easy_install(来自 setuptools 或 Distribute)。
  • 如何让cairo.HAS_QUARTZ_SURFACE 产生 1?
【解决方案5】:

在 Mac OS 上,您可以安装多个 Python 版本。如果您决定通过 Fink 或 MacPorts 安装 Python,您可以获得更多。从源代码编译库时,应确保它们指向正确的安装。

我目前在我的机器上安装了 Python 2.5.1 和 Python 2.6.4,我可以分别通过 python2.5python 调用它们。它们位于两个不同的文件夹中: /System/Library/Frameworks/Python.framework/Versions/2.5/Library/Frameworks/Python.framework/Versions/2.6

我在从 tarball 编译 pycairo 1.8.8 时遇到了类似的问题。在这种情况下,INSTALL 文件是您的朋友,因为它包含避免潜在版本冲突的正确说明。您基本上需要指定正确的前缀,以便将包安装在正确的文件夹中。

$ python -c "导入系统;打印系统前缀" # 记下python前缀 $ ./configure --prefix=[python_prefix] $ 制作 $ make install # 可能需要超级用户权限

使用python2.5python 运行这些说明,您将能够为这两个版本(或通过MacPorts / Fink 安装的任何版本)正确安装pycairo。

【讨论】:

    【解决方案6】:

    第 1 步:从终端 ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" < /dev/null 2> /dev/null 运行此程序

    第 2 步: brew install cairo

    第 3 步: pip install pycairo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-13
      • 2011-10-16
      • 2018-06-16
      • 1970-01-01
      • 2012-02-01
      • 2011-09-08
      • 2019-09-26
      相关资源
      最近更新 更多