7

Python 3.2 で rsvg を使用しようとしていますが、インポート エラーが発生し続けます。すべての librsvg パッケージを cairo とともにインストールしました。それを機能させるために他に何をインストールするかについて、オンラインで何も見つかりません。rsvg モジュールは 2005 年以降更新されていないと聞きましたが、それは単に Python 3.2 と互換性がないのでしょうか、それとも他にインストールできるものはありますか? あるいは、rsvg が機能しない場合、Python を介して SVG ファイルを表示する簡単な方法 (基本的には画像を表示するだけ) について何か提案はありますか?

編集:私が得るエラーは次のとおりです:「ImportError: No module named rsvg」

このエラーは python2 では表示されません

前もって感謝します

4

1 に答える 1

16

これを行う方法を理解しようとして、私は多くの困難を経験しました。他の人がこの答えを見つけて、多くの時間を節約できることを願っています!

Python 3 では、もともと C で書かれたいくつかのライブラリ ( GTKClutter、およびlibrsvgを含む) の Python 言語バインディングは、 GObject イントロスペクションライブラリ (C の「オブジェクト」から Python オブジェクトを動的に生成する Python コード) に置き換えられました。

Python 3 で使用するlibrsvgには、まず必要な 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 ファイルの名前に変更します。
于 2013-11-02T16:27:44.080 に答える