在Ubuntu上使用Python 3.2进行rsvg操作

7
我正在尝试在Python 3.2中使用rsvg,但是我一直收到导入错误的信息。我安装了所有的librsvg包以及cairo。我在网上找不到关于安装什么其他软件才能让它正常工作的任何信息。我听说rsvg模块自2005年以来就没有更新过了,所以它是否与Python 3.2不兼容,或者我是否可以尝试安装其他东西来解决它?另外,如果rsvg不能工作,是否有任何简单的方法通过Python来显示SVG文件(基本上只是展示图片)?
编辑:我得到的错误是:“ImportError: No module named rsvg”
这个错误在Python2中不会出现。
提前感谢。

你遇到了什么错误?能否将其添加到你的问题中? - Marius
我认为PyQt应该能够显示SVG图像。它适用于Python 3 - 寻找包python3-pyqt4 - Thomas K
你可以通过 ctypes 进行包装,参见 https://dev59.com/VlfUa4cB1Zd3GeqPJp1j#14943090。为了获取它的 Python 绑定,我必须安装大量的软件包,所以我只在极少数需要时使用 ctypes - mmgp
1个回答

17

我曾经遇到了很多困难,试图弄清楚如何做这个。我希望其他人可以找到这个答案并节省大量时间!

对于Python 3,使用Python语言绑定的一些最初以C编写的库(包括GTKClutterlibrsvg)已被GObject introspection库所取代。 Python代码会动态生成来自C“对象”的Python对象。

为了在Python 3上使用librsvg,首先安装必要的GObject introspection库(除了Python 3 Cairo库)。例如,在Ubuntu 13.10上:

sudo apt-get install gir1.2-rsvg-2.0 python3-cairo python-gi-cairo python3-gi

然后使用以下代码进行测试。

#!/usr/bin/env python3                                                          

# `gi.repository` is a special Python package that dynamically generates objects
import gi
gi.require_version('Rsvg', '2.0')
from gi.repository import Rsvg
import cairo

INPUTFILE = 'tiger.svg'

if __name__ == '__main__':
    # create the cairo context                                                  
    surface = cairo.SVGSurface('myoutput.svg', 580, 530)
    context = cairo.Context(surface)

    # use rsvg to render the cairo context                                      
    handle = Rsvg.Handle()
    svg = handle.new_from_file(INPUTFILE)
    svg.render_cairo(context)
为了在您的项目中实现这一点,
  1. cairo.SVGSurface更改为您要绘制的任何surface,并且
  2. 修改INPUTFILE的值为您希望呈现的SVG文件的名称。

2
还有在Python中,需要执行sudo apt-get install python3-gi命令,并且在from gi.repository import Rsvg之前,先执行from gi import require_versionrequire_version('Rsvg', '2.0') - Locoluis
在Ubuntu 18上,即使安装了所有这些软件包,我仍然会收到错误提示:“ModuleNotFoundError: No module named 'gi'”。 - Cerin

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