如何在Ubuntu 10.04上安装适用于Python 3的Pycairo?

5
我正在尝试安装Pycairo 1.10.0,以便与我自定义构建的Python 3.1一起使用。然而,
sudo /flower/bin/easy_install-3.1 pycairo

出现错误:

XXX@XXXX:/adventures$ sudo /flower/bin/easy_install-3.1 pycairo
install_dir /flower/lib/python3.1/site-packages/
Searching for pycairo
Reading http://pypi.python.org/simple/pycairo/
Reading http://cairographics.org/pycairo
Best match: pycairo 1.10.0
Downloading http://cairographics.org/releases/pycairo-1.10.0.tar.bz2
Processing pycairo-1.10.0.tar.bz2
error: Couldn't find a setup script in /tmp/easy_install-zeG9HB/pycairo-1.10.0.tar.bz2

实际上,在该下载文件中并没有 setup.py 文件;相反,INSTALL 说明如下:

Install Procedure
-----------------
$ ./waf --help     # shows available waf options
$ ./waf configure  # use --prefix and --libdir if necessary
                   # --prefix=/usr --libdir=/usr/lib64  for Fedora 64-bit
$ ./waf build
$ ./waf install

Use
$ python3 ./waf ...
if you have python2 and python3 installed, and the default is python 2.


Testing
-------
See test/README

我理解这句话是在告诉我应该:
sudo /flower/bin/python3.1 ./waf configure --prefix=/flower/pycairo/

或类似方式; 然而,这会导致以下错误:
  ./options()
Setting top to                           : /tmp/pycairo-1.10.0 
Setting out to                           : /tmp/pycairo-1.10.0/build_directory 
  ./configure()
Checking for 'gcc' (c compiler)          : ok 
Checking for program python              : /usr/bin/python 
python executable '/usr/bin/python' different from sys.executable '/flower/bin/python3.1'
Checking for python version              : (2, 6, 5, 'final', 0) 
The python version is too old, expecting (3, 1, 0)

所以我查看了源代码,似乎没有办法告诉这个“waf”工具目标Python版本就是运行它自己的版本,因此我摸索了一番并达到了这个程度:

waf
Checking for 'gcc' (c compiler)          : ok 
Checking for program python              : /usr/bin/python 
#############293 /flower/bin/python3.1
Checking for python version              : (3, 1, 2, 'final', 0) 
Checking for library python3.1 in LIBDIR : yes 
Checking for program python3.1-config    : not found 
Checking for program python-config-3.1   : not found 
Checking for header Python.h             : Could not find the python development headers 
Checking for []                          : not found 
The configuration failed

我确实有一个文件/flower/bin/python3.1-config,所以我不明白。处理所有这些的Python代码相当难。有什么建议吗?是否有适用于pycairo + python 3的*.deb或类似包可供使用?找不到任何信息。
3个回答

10

通过查看子目录中的python.py文件,我决定在执行python3的waf之前设置一个环境变量:
export PYTHON="python3"
然后安装神奇地成功了...


3
这是整个互联网上唯一帮助我正确配置该项的提示。但现在该死的构建失败了!有什么建议吗? - batman
2
这对我在OSX上非常有帮助,谢谢!现在,如果我能解决下一个问题(找不到程序pkg-config)就好了...编辑:sudo port install pkgconfig 救了我。 - Aweb

4
我正在使用Ubuntu Karmic,但是安装时使用的是从源代码编译的python2.7版本,这是我发现的一个解决方法。我认为这可能有所帮助,但请谨慎使用。
我发现一些讨论线程中有类似的安装问题,可以在这里找到。
虽然它不是同一个Python版本,但是您可以为waf设置一些标志。
在使用以下命令后,我成功解决了Python.h部分的问题。
LDFLAGS="-lm -ldl -lutil" ./waf configure

由于我已经从源代码编译了Python2.7,因此需要使用CFLAGS重新定向路径。最终命令如下:

CFLAGS="-l/usr/local/include/python2.7 -l/usr/local/bin" LDFLAGS="-lm -ldl -lutil" ./waf configure

我对LDFLAGS的工作原理一无所知,因此请小心使用。

另外(这是一种危险的方法),如果您不想设置CFLAGS,我在Python的/local/bin中进行了符号链接,链接到我的Python2.7版本,同样的方式也适用于将python-config链接到python2.7-config(如果您是通过软件包管理器安装的,则可能不需要执行此操作)


2
这显然是pycairo安装程序中的一个错误,它试图找出Python exe的位置(而它应该做的是简单地使用运行它的Python exe)。
我试图找到它,但这个代码正在使用它自己完全定制的构建系统(不知道为什么),而且代码布局非常奇怪,令人惊讶的是,主要部分的代码被隐藏在一个名为.waf3-1.6.4-e3c1e08604b18a10567cfcd2d02eb6e6的目录中,并写成了一些我见过的最难读的Python代码。因此,我需要花费几个小时来理解这段代码并帮助您解决可能是微不足道的错误。
如果您确实需要这个库,我建议您联系作者,并友好地询问他是否可以修复这个错误。

2
非常感谢您的回复。我一直很害怕说这个,因为我很容易失控,但这是我与(py)cairo 的第 n 次经历,事实就是:整个项目难以理解,构建系统也很糟糕。有一个列表,但它只在 SourceForge 上,并由 Mailman 运行。当你点击“报告错误”时,你必须先输入一个你没有的登录名。它几乎看起来像是故意不可访问。我想我只能放弃了。很遗憾,因为 cairo 本身非常有前途,我相信 Firefox 使用它来渲染网页。 - flow
@flow: 我尝试了一个简化的构建过程,本应该可以工作,但是它找不到一个 config.h 文件,我不知道它应该从哪里来。 - Lennart Regebro
1
@flow: 话虽如此,似乎PyCairo本身有合理的代码实践,但“waf”安装系统却是完全疯狂的。我认为对于那些了解代码的人来说,切换到distutils或其他合理的东西应该是相当简单的。但最有可能的情况是作者是distutils-hating群体的一员,所以你必须fork它。 - Lennart Regebro

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