rsvg с Python 3.2 в Ubuntu

Я пытаюсь использовать rsvg в Python 3.2, но все время получаю ошибку импорта. Я установил все пакеты librsvg вместе с cairo. Я не могу найти в Интернете ничего о том, что еще установить, чтобы заставить его работать. Я слышал, что модуль rsvg не обновлялся с 2005 года, так что он просто несовместим с Python 3.2 или есть что-то еще, что я могу попробовать установить? В качестве альтернативы, если rsvg не работает, есть ли у кого-нибудь предложения по простому способу отображения файла SVG через Python (в основном, просто показать изображение)?

РЕДАКТИРОВАТЬ: я получаю ошибку: 'ImportError: нет модуля с именем rsvg'

Эта ошибка не отображается в python2

заранее спасибо


person drewlaqua    schedule 01.05.2012    source источник
comment
Какую ошибку вы получаете? Вы можете добавить это к своему вопросу?   -  person Marius    schedule 01.05.2012
comment
Я думаю, PyQt должен отображать изображение SVG. Он работает с Python 3 - ищите пакет python3-pyqt4.   -  person Thomas K    schedule 01.05.2012
comment
Вы можете обернуть его через ctypes, см. stackoverflow.com/a/14943090/1832154. Мне нужно установить огромное количество пакетов, чтобы получить для него привязки python, поэтому я просто использую ctypes, когда мне это редко нужно.   -  person mmgp    schedule 18.02.2013


Ответы (1)


Мне было очень трудно понять, как это сделать. Я надеюсь, что другие найдут этот ответ и сэкономят много времени!

Для Python 3: привязки к языку Python для нескольких библиотек, изначально написанных на C (включая GTK, Беспорядок и 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 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 на любую поверхность, на которой вы собираетесь рисовать, и
  2. измените значение INPUTFILE на имя файла SVG, который вы хотите визуализировать.
person argentpepper    schedule 02.11.2013
comment
Также sudo apt-get install python3-gi и в Python: from gi import require_version и require_version('Rsvg', '2.0') перед from gi.repository import Rsvg. - person Locoluis; 17.10.2017
comment
В Ubuntu 18, даже если все эти пакеты установлены, я получаю сообщение об ошибке ModuleNotFoundError: No module named 'gi' - person Cerin; 17.05.2020