Debian/UbuntuにおけるPyGIのパッケージに関するその後のメモ(2012/4/11時点)
Python 3でCairoによる描画が動作しなかった不具合についてのその後
不具合の内容についておさらい
(これまでの)Debian/Ubuntuにおいて、Python 3でPyGIを使用した際にGTK+のGtkDrawingAreaなどでCairoによる描画処理が実行できず、端末にTypeError: Couldn't find conversion for foreign struct 'cairo.Context'
と表示される。
原因
GTK+のGtkDrawingAreaなどでCairoによる描画処理を行うためには、PyGObjectのパッケージをビルドする際にCairoサポートを有効にする必要があるが、PyGI自体はPython 3に対応済みなので、Python 3でもPython 3向けのCairoの言語バインディング(「py3cairo」と呼ばれることがある)がシステムにインストールされていればこれを用いてCairoが利用できる。実際、他のディストリではPython 3でも問題なくPyGIでCairoが利用できている。しかし、(これまでの)DebianではPython 3向けのCairoの言語バインディングがバージョンの関係でまだパッケージ化されておらず、Ubuntu 11.10ではDebianにパッケージがないために独自にUbuntu向けに「python3-cairo」パッケージが用意されていた。しかし、何故かUbuntu 11.10のPyGIのパッケージでは(py3cairoが利用できるにも関わらず)Debianと同様にPython 3ではCairoサポートが無効化されており、前述の不具合が発生する原因となっていた。
また、Debianではこれに加えて前述のように「py3cairoが利用できない」という問題もあった。
問題の解決
Python 3向けのCairoの言語バインディング(「python3-cairo」パッケージ)がついにDebianに追加された。これに伴い、DebianのPyGI(ソースパッケージ名「pygobject」)の「3.2.0-3」というバージョンで以前Ubuntuの同パッケージ宛てにバグ報告した際に添付したパッチに基づいた変更(後述のパッケージ名関係の変更の部分で一部パッチとは異なるところがある)が入ってPython 3でもPyGIでCairoが無効化されずに利用できるようになり、Ubuntuのパッケージについても12.04から利用できるようになる見通し。2012/4/11時点ではpackages.ubuntu.com上で12.04向けのバイナリパッケージは確認できていないが、「pygobject」のソースパッケージは「3.2.0-3」になっており、近い内に修正済みのものに置き換わって新しく「python3-gi-cairo」というパッケージが利用可能になるものと思われる。
(2012/4/12)Ubuntu 12.04向けの「python3-gi-cairo」パッケージの存在を確認した。