rsvg с Python 3.2 на Ubuntu
Я пытаюсь использовать rsvg в Python 3.2, но получаю ошибку импорта. Я установил все пакеты librsvg вместе с cairo. Я не могу найти в Интернете ничего о том, что еще нужно установить, чтобы заставить его работать. Я слышал, что модуль rsvg не обновлялся с 2005 года, поэтому он просто не совместим с Python 3.2 или есть что-то еще, что я могу попробовать установить? В качестве альтернативы, если rsvg не работает, есть ли у кого-нибудь предложения по простому способу отображения SVG-файла через Python (в основном просто показывает изображение)?
РЕДАКТИРОВАТЬ: я получаю сообщение об ошибке: "ImportError: нет модуля с именем rsvg"
Эта ошибка не отображается в python2
заранее спасибо
1 ответ
Я испытал много трудностей, пытаясь понять, как это сделать. Я надеюсь, что другие найдут этот ответ и сэкономят много времени!
В Python 3 привязки языка Python для нескольких библиотек, изначально написанных на C (включая GTK, Clutter и librsvg), были заменены библиотеками интроспекции GObject, кодом Python, который динамически генерирует объекты Python из C-объектов.
Для того, чтобы использовать librsvg
в Python 3 сначала установите необходимые библиотеки самоанализа GObject (в дополнение к библиотеке Python 3 Cairo). Например, в Ubuntu 13.10:
sudo apt-get install gir1.2-rsvg-2.0 python3-cairo
Затем проверьте это с помощью следующего кода.
#!/usr/bin/env python3
# `gi.repository` is a special Python package that dynamically generates objects
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)
Для того, чтобы реализовать это для вашего проекта,
- менять
cairo.SVGSurface
быть любой поверхностью, на которой вы собираетесь рисовать, и - изменить значение
INPUTFILE
быть именем файла SVG, который вы хотите визуализировать.