如何使用Homebrew安装Python库,例如Py2Cairo?

9

以下是我目前完成的工作:

我已经安装了Homebrew:

/usr/bin/ruby -e "$(/usr/bin/curl -fsSL https://raw.github.com/mxcl/homebrew/master/Library/Contributions/install_homebrew.rb)"

然后安装Python:brew install python

然后安装py2cairo:brew install py2cairo

这两个似乎都安装成功了,当我输入which python时,我得到的是:usr/local/bin/python,我相信这是Homebrew的版本。

我已经按照许多Homebrew指南的建议编辑了我的路径:

export PATH=/usr/local/bin:/usr/local/share/python:$PATH

以下是我从echo $PATH中得到的内容:/usr/local/bin:/usr/local/share/python:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin
我还可以输入python --version并得到python 2.7.3,这似乎是正确的,因为如果我查看/usr/local/Cellar/py2cairo/1.10.0/README,它会说:
Dependencies
------------
    cairo   >= 1.10.0
    Python  >= 2.6 

然而,尽管进行了上述操作,我仍无法将py2cairo库导入python。当我尝试导入时,会出现以下情况:
Sal:~ Lockyer$ python
Python 2.7.3 (default, May  6 2012, 13:47:31) 
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.9.00)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import cairo
Fatal Python error: Interpreter not initialized (version mismatch?)
Abort trap: 6

我认为大多数人在这种情况下使用 pipeasy_install,但我不认为这些工具支持 py2cairo。运行 pip-2.7 install py2cairo 时出现以下结果:

Downloading/unpacking py2cairo
  Could not find any downloads that satisfy the requirement py2cairo
No distributions at all found for py2cairo
Storing complete log in /Users/Lockyer/Library/Logs/pip.log

我认为我可能只是错过了一个最后的步骤,需要想办法告诉Python从哪里导入库...我是否忘记将某些内容添加到我的路径中?

当我运行ls -l /usr/local/bin/python时,这是我得到的结果:

lrwxr-xr-x  1 Lockyer  admin  33  6 May 13:48 /usr/local/bin/python -> ../Cellar/python/2.7.3/bin/python

当我运行 otool -L /usr/local/Cellar/py2cairo/1.10.0/lib/python2.7/site-packages/cairo/_cairo.so 时,我得到以下结果:

/usr/local/Cellar/py2cairo/1.10.0/lib/python2.7/site-packages/cairo/_cairo.so:
    /private/tmp/homebrew-py2cairo-1.10.0-BtmY/py2cairo-1.10.0/build_directory/src/_cairo.so (compatibility version 0.0.0, current version 0.0.0)
    /usr/local/Cellar/cairo/1.10.2/lib/libcairo.2.dylib (compatibility version 11003.0.0, current version 11003.2.0)
    /System/Library/Frameworks/Python.framework/Versions/2.7/Python (compatibility version 2.7.0, current version 2.7.1)
    /usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1094.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0)

/System/Library/Frameworks/Python.framework/Versions移动到我的桌面,并再次运行brew install py2cairo似乎已经解决了错误。但不知道为什么它会构建依赖Lion的python,因为它似乎不是路径中的第一个...

如果您之前安装了Python,可能仍然是那个版本。请发布以下命令的结果:ls -l /usr/local/bin/python - jdi
我已经编辑了问题并附上了我的结果,看起来对我来说是符合预期的?但我可能漏掉了什么... - Lockyer
是的,看起来没问题。我认为@Dougal可能已经发现了你的问题,他建议cairo本身可能没有正确构建。你缺少底层的C扩展。 - jdi
我认为你应该将你问题的最后一段作为正确答案提供,而不是下面那个。我已经尝试了这个帖子中的所有方法,唯一有效的是你的解决方案。关于这个话题也有一些在GitHub上的争论(https://github.com/mxcl/homebrew/issues/12893)。 - Rodrigo
4个回答

6
我也遇到了同样的错误。通过一些搜索,我发现这个问题已经在GitHub上的项目页面上被检测出来了。
这似乎是关于waf如何处理库导入的问题,我并没有完全理解。修复已经提交并正在等待批准。
如果有人在他们接受修复之前仍然遇到这个问题,可以按照这个答案中提出的命令安装py2cairo的修复公式。
brew rm -f py2cairo
brew install  https://raw.githubusercontent.com/2bits/homebrew/15b3e67/Library/Formula/py2cairo.rb

当修复程序获得批准后,简单的 brew update 命令即可解决问题。

2
FYI,它在最新的Homebrew中已经修复了。brew updatebrew rm -f py2cairo && brew install py2cairo对我有用。感谢所有调查此问题的人。你们节省了我几个小时的麻烦。 - Neil Traft
3
a4e87cd已经不存在了,请尝试使用以下命令进行安装:brew install https://github.com/2bits/homebrew/raw/15b3e67/Library/Formula/py2cairo.rb。请注意,该命令需要安装Homebrew软件包管理器。 - Dr BDO Adams
404。请使用^^^ https://github.com/2bits/homebrew/raw/15b3e67/Library/Formula/py2cairo.rb。 - circuitry

4
根据您的其他评论,您已经解决了库路径问题,但是遇到了“Fatal Python error: Interpreter not initialized (version mismatch?)”错误。以下是解决方法。
  1. 确保您安装了Xcode 4.3
  2. 确保已安装Xcode命令行工具
  3. brew tap homebrew/dupes && brew install homebrew/dupes/apple-gcc42
  4. sudo ln -s /usr/local/bin/gcc-4.2 /usr/bin/gcc-4.2
  5. 使用 brew --config 确认(应显示GCC-4.2)
  6. brew uninstall cairo py2cairo
  7. brew install py2cairo --use-gcc

我曾经也遇到同样的问题,直到我使用gcc构建它,而xcode 4.3显然不包含它。

另外,如果您是homebrew python安装的话,我并没有使用它。我使用标准apple python安装,并将 /usr/local/lib/python2.7/site-packages 放在PYTHONPATH的最前面。


嗯,是的,将/usr/local/lib/python2.7/site-packages添加到我的PATH并使用默认的Python安装可能会更好。这样做可能比移动库文件更不可靠...不过我最终并不需要通过Homebrew安装gcc。 - Lockyer
@Lockyer:在每种组合中我都遇到了崩溃,直到我最终将GCC安装并链接到正确的位置,并且homebrew确认它后,我使用了“--use-gcc”标志。 - jdi
@Rodrigo:这不是完整的错误信息,只是命令执行失败了。你已经安装了gcc,对吧? - jdi
@jdi 非常感谢您的反馈,但我已经按照问题的最后一段建议解决了问题:在安装py2cairo之前将/System/Library/Frameworks/Python.framework/Versions移动到桌面。正如您在下面看到的那样,我还发现了一个更加优雅的解决方案,这是通过项目提出的修复措施实现的。 - Rodrigo

3

在安装pycairo时,似乎waf安装程序文件找到了错误的Python版本。你可以运行以下命令:

otool -L /usr/local/Cellar/py2cairo/1.10.0/lib/python2.7/site-packages/cairo/_cairo.so

确定 C 扩展链接的是哪个 Python 版本?我的版本包含如下行:
/System/Library/Frameworks/Python.framework/Versions/2.7/Python (compatibility version 2.7.0, current version 2.7.1)

但我使用的是系统自带的Python,而不是Homebrew安装的Python。


很抱歉,我之前尝试过那个方法,但是失败了。当我在写这个问题的解释时,搞砸了。我刚刚又试了一次,并在问题上进行了编辑以展示结果。 - Lockyer
啊哈,问题不同了。尝试在/usr/local/Cellar/python/2.7.3/lib/python2.7/site-packages/cairo//usr/local/Cellar/py2cairo中查找名为_cairo.so的文件,这是py2cairo使用的C扩展。可能是找不到路径的问题,或者它可能没有正确构建。 - Danica
嗯——不确定为什么它在lib/python2.6中;当我刚刚操作时,我得到了lib/python2.7。看起来py2cairo的waf安装程序在安装时选择了错误的Python版本。一个简单的解决方法可能是(现在你已经通过homebrew获得了依赖项cairo)只需使用pip-2.7安装py2cairo... 你也可以尝试brew uninstall py2cairo; brew install py2cairo,看看是否会再次发生——如果你之前刚刚安装了brew/python,可能是环境变化导致的。 - Danica
嗯,我的包含相同的字符串:/System/Library/Frameworks/Python.framework/Versions/2.7/Python (compatibility version 2.7.0, current version 2.7.1)(请参见问题以获取其余输出),这是否意味着它是使用Lion的Python构建的,而我正在尝试在Homebrew中运行它? - Lockyer
因为即使这个答案提供了关于问题的信息,但接受它作为“答案”是误导性的,因为它没有提供解决问题的有效方法,所以我会将其点踩。对我有效的唯一方法是在问题的最后一段提出的解决方法。 - Rodrigo
显示剩余4条评论

0
对我来说,brew rm -f py2cairobrew install py2cairo 也起作用了。
而不是


brew rm -f py2cairo

尝试

brew install  https://raw.githubusercontent.com/2bits/homebrew/15b3e67/Library/Formula/py2cairo.rb

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