methaneのブログ

このブログに乗せているサンプルコードはすべてNYSLです。

Python3.0 への移行準備

http://coreblog.org/ats/why-python-30-is-still-deprecated

最も大きな理由。それはCで書かれたエクステンションの3.0対応がけっこう大変だから。
...
データベース接続モジュール,テンプレートエンジンとか,お世話になっているCエクステンションは多い。直接使って無くても,フレームワークがそういうエクステンションを使っていることが多い。その他にも,PILのようなライブラリ,wxPythonのようなGUIフレームワークラッパは修正点が多くて大変だと思う。これらのエクステンションの多くが3.0に対応してくれないと,僕は完全に3.0には移行できない。それまで数年かかるだろう,ということだ。

まったく同感だったんだけど、最近はPython界が僕が思うより速く動いている事に驚いている。数年というのは3年以下かもしれない。

Pythonの「バージョン間互換性重視」スタイルは言語と標準ライブラリだけでなくて Python/C API にも及んでいる。Python3でも、いくつかの型が変更されたけれど参照カウント等の基礎は基本的にそのままになっている。
そして、その互換性を重視した文化は、多くの拡張ライブラリ作成ツールを生んだ。そのツールたちも、Python3に続々対応してきている。基本が変わらないから、そこそこの手間で対応できるらしい。

ツール群とそのツールを使った有名なライブラリをあげてみる。

Pythonだけではなく多くの言語に対応している C/C++ のラッパ作成ツール。Python3.0対応済み。

    • wxPython wxWidgetsのbinding。Python3対応は検討中。wxWidgetsも次の3.0が下位互換性を捨てるメジャーバージョンアップなので大変そう。
  • Cython

Pythonライクな構文で拡張ライブラリを作成できるツール。Python3対応済み

    • lxml libxml2のPythonicなwrapper。 objectifyを使うと baz に foo.bar とアクセスできる。現在beta版でPython3対応
  • SIP

SWIGライクなツール。Python専用で、SWIGより効率的なコードを生成する。 Python3対応中。

    • PyQt Nokiaに買収されてイケイケなQtのPython binding. SIPと共に対応中。PyQt4.5くらいからPython3対応するかも?

C++の超有名ライブラリboostに含まれる、C++クラスのPython wrapper。 Google Summer of Code 2009 でPython3対応プロジェクトあり。

    • PythonMagic ImageMagickのwrapper。だけどもうメンテナンスされてない。
    • 有名どころは無いけどC++のプロジェクトでPython Interfaceを作るのに使われているのを時々見かける。

Cのソースを一から書いている多数のライブラリはPython3対応には「そこそこの手間」がかかり、たくさんのライブラリがそろうには数年の時間がかかるかもしれない。
でも、数個の拡張モジュール作成ツールが「そこそこの手間」でPython3対応ができれば、それを使ったたくさんのライブラリが簡単にPython3対応できるようになる。

Python3のマイナーバージョンを俺が勝手に位置づけてみた。

  • Python3.0 - alpha 先行調査(地雷探索)と基本的なライブラリの移植用
  • Python3.1 - beta 新しい物好き用
  • Python3.2 - Release 一般人用