試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

Debian/UbuntuにおけるPyGIのパッケージに関するその後のメモ(2012/4/11時点)

  1. Python 3でCairoによる描画が動作しなかった不具合についてのその後
    1. 不具合の内容についておさらい
    2. 原因
    3. 問題の解決
  2. パッケージ名の一部変更

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」パッケージの存在を確認した。

パッケージ名の一部変更

PyGIの機能を提供するパッケージは、Ubuntu 11.10時点では「python-gobject」(Python 2用)と「python3-gobject」(Python 3用)となっていたが、その後Debianにおいてそれぞれ「python-gi」(Python 2用)と「python3-gi」(Python 3用)に名前が変更されたことを受けてUbuntuでも12.04からはこれらの名前のパッケージ名になる。また、PyGIでCairoを使用するための追加パッケージは「python-gobject-cairo」(Python 2用・Python 3用はなし)だったのが「python-gi-cairo」(Python 2用)と「python3-gi-cairo」(Python 3用・今回追加されるもの)という名前になる。