【问题标题】:how to install pycairo for python 3 on Ubuntu 10.04如何在 Ubuntu 10.04 上为 python 3 安装 pycairo
【发布时间】:2011-09-08 02:51:46
【问题描述】:

我正在尝试安装 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 thingie,目标 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 或类似的东西?找不到。

【问题讨论】:

    标签: python python-3.x ubuntu-10.04 cairo pycairo


    【解决方案1】:

    我使用的是 Ubuntu Karmic,但安装的是从源代码编译的 python2.7,所以这是我在我的案例中找到的解决方法。我虽然可能会有所帮助,但请谨慎使用。

    我发现了一些有类似安装问题的讨论帖here

    虽然不是同一个 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】:

      通过查看该子目录中的 python.py 文件,我决定在通过 python3 执行 waf 之前尝试设置环境变量:
      导出 PYTHON="python3"
      然后安装就莫名其妙的成功了……

      【讨论】:

      • 这是整个互联网上帮助我正确配置事物的一个技巧。但是现在该死的构建失败了!对此有什么建议吗?
      • 这对我在 OSX 上的帮助很大,谢谢!现在,如果我只能解决下一个问题(找不到程序 pkg-config)... 编辑:sudo port install pkgconfig 是我的救星
      【解决方案3】:

      这显然是 pycairo 安装程序中的一个错误,它试图找出 Python exe 在哪里(它应该做的是简单地使用运行它的 Python exe)。

      我试图找到它,但是这段代码使用了它自己的完全自定义的构建系统(这并不奇怪)并且代码的布局非常奇怪,令人惊讶的是代码的主要部分隐藏( !) 在名为.waf3-1.6.4-e3c1e08604b18a10567cfcd2d02eb6e6 的目录中,并用我见过的一些最不可读的Python 代码编写。因此,我需要几个小时才能理解这段代码并帮助您解决可能是一个微不足道的错误。

      如果你真的需要这个库,我建议你联系作者并很好地询问他是否可以修复错误。

      【讨论】:

      • 非常感谢您的回复。我不敢这么说,因为我很容易离开,但这是我在 (py)cairo 的第 n 次体验,这是真的:整个项目难以理解,构建系统非常糟糕。有一个列表,但它仅在 sourceforge 上并由 mailman 运行。当您单击“报告错误”时,您必须首先输入您没有的登录名。它几乎看起来像是故意无法访问的。我猜我只需要离开它。很遗憾,因为 cairo 本身非常有前途,我相信 firefox 用它来渲染网页。
      • @flow:我尝试了一个“应该”有效的简化构建过程,但是它找不到我不知道它应该来自哪里的 config.h。
      • @flow:也就是说,PyCairo 本身似乎有合理的代码实践,它是完全疯狂的“waf”安装系统。我认为对于理解代码的人来说切换到 distutils 或其他理智的东西会相当简单。但很可能作者是讨厌 distutils 的人群中的一员,所以你必须分叉它。
      猜你喜欢
      • 1970-01-01
      • 2012-10-04
      • 2012-05-28
      • 1970-01-01
      • 2012-11-25
      • 2012-08-04
      • 2012-03-15
      • 2011-07-30
      • 1970-01-01
      相关资源
      最近更新 更多