在虚拟环境中安装pycairo

33

我尝试在一个虚拟环境中安装pycairo以便在Django项目中使用。我运行了pip install pycairo==1.10.0命令,它能够找到并下载该软件包,而不像其他命令如pip install pycairo等,但是在开始安装软件包时,它会抛出错误。

以下是日志:

Downloading/unpacking pycairo==1.10.0
  Running setup.py egg_info for package pycairo
    Traceback (most recent call last):
      File "<string>", line 14, in <module>
    IOError: [Errno 2] No such file or directory:
'/home/radu/Desktop/djangos/workout/venv/build/pycairo/setup.py'
Complete output from command python setup.py egg_info:
Traceback (most recent call last):

File "<string>", line 14, in <module>

IOError: [Errno 2] No such file or directory:
'/home/radu/Desktop/djangos/workout/venv/build/pycairo/setup.py'

----------------------------------------
Command python setup.py egg_info failed with error code 1 in 
/home/radu/Desktop/djangos/workout/venv/build/pycairo
Storing complete log in /home/radu/.pip/pip.log

你能否给我一些提示该怎么做?我应该尝试为这个包编写一个setup.py文件,然后再尝试安装它吗?(我不确定这是否是一个解决方案,我仍在努力弄清楚我能做些什么)。

提前感谢!


1
相关错误:https://bugs.freedesktop.org/show_bug.cgi?id=58772 - guettli
6个回答

67

大家好消息!

我刚发布了cairocffi:http://packages.python.org/cairocffi/

它是pycairo的替代品,可以在virtualenv中使用pip安装,在Python 2和3以及PyPy上运行。

pip install cairocffi

在你的代码中:

import cairocffi as cairo
# Enjoy the same API as Pycairo.

欢迎反馈意见。(尽管问题跟踪器可能比这里更好)。


1
这非常出色,而且似乎比pycairo有更好的文档记录。 - David Eads
1
@Vebjorn Ljosa,如果您能提供一个带有样例代码和期望/实际结果的错误报告,那将非常感激,即使您无法隔离问题。现在我完全不知道如何帮助您 :/ - Simon Sapin
1
@SimonSapin,是的,我理解并且道歉。而且,为了记录,完全有可能是我在做一些非规范操作。但愿我有时间去分离一个测试案例。 - Vebjorn Ljosa
7
行!在与cairo的艰苦斗争中,这被证明是最简单的解决方案。只需确保您已安装了libffi-dev($ sudo apt-get install libffi-dev)。 - odedfos
不要忘记执行 yum install libffi-devel 和 python-devel 命令。 - jedierikb
显示剩余5条评论

24

虽然使用pip无法很好地安装py2cairo,但您仍然可以按照发行版中“INSTALL”文件中的构建说明将py2cairo安装到虚拟环境中。

为了构建软件包,您需要在操作系统上安装cairo-dev / cairo-devel软件包。

请执行以下操作以安装到虚拟环境:

  1. 下载,解压并进入py2cairo目录
  2. 激活您的虚拟环境
  3. 按照标准构建过程进行

./waf configure --prefix=$VIRTUAL_ENV

./waf build

./waf install


1
这对我有用,但首先我必须执行以下操作:“export PYTHON=$VIRTUAL_ENV/bin/python”。由于某种原因,进入virtualenv不会设置全局$PYTHON变量。 - Ben Davis
遇到了这个错误:检查 'cairo' >= 1.10.2 :未找到。配置失败 通过brew安装了cairo:1.12.16_1。 - Ben
2
在配置步骤中,在“检查程序python2.7-config”后立即出现错误command ['/path/to/venv/bin/python', '/usr/bin/python2.7-config', '--includes'] returned 1。有人知道如何解决吗? - fpghost
4
我发现使这个工具生效的唯一方法是使用 git 开发分支进行克隆安装:git clone git://git.cairographics.org/git/py2cairo,并使用 autogen.sh --prefix=/path/to/venv;make; make install 安装脚本进行安装。看起来 pycairo 使用的 waf 版本已经过时,仍然认为 python2.7-config 是一个 Python 脚本而不是 Bash;即使对我来说补丁也没有帮助。 - fpghost
1
@fpghost 在 Ubuntu 14.10 上的虚拟环境中,使用 autogen.sh 成功运行了 Python 2.7.8。 - Burnash

11

目前,pycairo不支持通过pip/distutils进行安装。该项目的安装文档指示使用waf或autotools。

要在虚拟环境中使用pycairo,您需要:

  • 最好通过您的发行版软件包系统范围内安装pycairo
  • 然后,可以选择以下任一方法:
    1. 使用--system-site-packages选项创建虚拟环境,或者事后删除lib/pythonX.Y/no-global-site-packages.txt文件。
    2. 或者添加一个符号链接到cairo包(包含_cairo.so的目录)。类似于这样的内容:
      ln -s /usr/lib/python2.7/site-packages/cairo ./venv/lib/python2.7/site-packages
      

当然,第1种方法的缺点是您将无法从虚拟环境与系统范围内安装的其他软件包隔离开来。


1
git版本的pycairo(适用于Python 3)最近获得了setup.py,并且使用pip安装非常完美。希望下一个版本能解决所有这些问题(也适用于Python 2的py2cairo)。 - Simon Sapin

4

对于想要在Homebrew和virtualenv--no-site-packages中使用pycairo(适用于Python 2.7)的任何人...这是我的解决方案:

  1. brew install py2cairo

  2. Then, find the path where Homebrew installed it to, will be something like:

    ls -l /usr/local/lib/python2.7/site-packages/cairo/
    total 24
    lrwxr-xr-x  1 anentropic  admin   80 10 Jun 14:26 __init__.py -> ../../../../Cellar/py2cairo/1.10.0/lib/python2.7/site-packages/cairo/__init__.py
    lrwxr-xr-x  1 anentropic  admin   78 10 Jun 14:26 _cairo.so -> ../../../../Cellar/py2cairo/1.10.0/lib/python2.7/site-packages/cairo/_cairo.so
    
  3. You want to find the path at the base of those symlinks, something like:
    /usr/local/Cellar/py2cairo/1.10.0/lib/python2.7/site-packages

  4. Then create a .pth file in your virtualenv site packages:
    echo "/usr/local/Cellar/py2cairo/1.10.0/lib/python2.7/site-packages" > venv/lib/python2.7/site-packages/cairo.pth

(也许您需要停用并重新激活虚拟环境以获得好运,不确定)


1
已在OS X Mavericks上进行了测试,运行良好。还解决了Graphite的“ImportError: Could not find Cairo”问题。 - Ben
在 OS X 10.8 上安装并尝试导入 cairo 后,它会给出致命的 Python 错误:PyThreadState_Get:没有当前线程 Abort trap: 6。 - Burnash

1
如果在虚拟环境中安装caiocffi失败,并且无法获得python-dev libffi-dev(ArchLinux),则设置环境变量PKG_CONFIG_PATH=/usr/lib/libffi-3.2.1/include可以解决问题。请注意,不要删除HTML标签。

-1
如果您正在使用Homebrew,您可以安装pycairo(Python 3+)和py2cairo(Python 2.6-2.7)配方: brew install pycairo

1
有人问如何在Virtualenv中安装pycairo,但回答并没有解决这个问题。 - Jai Prakash

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