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)

Для того, чтобы реализовать это для вашего проекта,

  1. менять cairo.SVGSurface быть любой поверхностью, на которой вы собираетесь рисовать, и
  2. изменить значение INPUTFILE быть именем файла SVG, который вы хотите визуализировать.
Другие вопросы по тегам