如何在Ubuntu 10.04上为Python 3安装pycairo

5 投票
3 回答
6134 浏览
提问于 2025-04-16 18:55

我正在尝试为我自定义构建的 Python 3.1 安装 pycairo 1.10.0。不过,

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 版本就是它自己运行的那个版本,所以我试着摸索,结果到了这个地步:

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 个回答

2

这明显是pycairo安装程序里的一个错误,它试图去找Python的可执行文件在哪里(其实它应该直接使用运行时的Python可执行文件)。

我试着去找这个问题,但这个代码使用了自己完全定制的构建系统(不太清楚为什么要这样),而且代码的结构非常奇怪,令人惊讶的是,代码的主要部分居然隐藏(!)在一个叫.waf3-1.6.4-e3c1e08604b18a10567cfcd2d02eb6e6的目录里,里面的Python代码也是我见过的最难读的。所以,要理解这些代码并帮助你解决这个可能很简单的错误,我可能需要花几个小时。

如果你真的需要这个库,我建议你联系作者,礼貌地请他修复这个错误。

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(如果你是通过包管理器安装的,可能不需要这样做)。

10

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

撰写回答