【Q】 Pythonの拡張モジュール作成言語として、Pyrex と Cython のどちらを使うべきでしょうか?
【A】 できるだけCythonを使いましょう
Pyrex は Greg Ewing氏による Pythonの拡張モジュール作成言語であり、CythonはPyrexをベースにStefan Behnel氏らを中心として開発されている。Pyrexの作者 Greg は Pyrex の開発をオープンソース的な手法で行うのを好まず、長年ソースコードリポジトリの公開やバグトラッカの開設に難色を示し続けた。で、ついに分裂してCythonプロジェクトのフォークという流れになってしまったのである。
現在ではPyrexの開発は停滞しており、GregもCythonのメーリングリストで議論したり修正をコミットしたりしているので、今後積極的にPyrexを使うことはお勧めできない。機能的にもCythonの方が上であり、Python3 のサポートを考えても Cython を使うべきであろう。
しかし、Pyrexを使う理由がないでもない。
- ソースパッケージのビルドが簡単
setuptoolsやdistributeにはPyrexのサポートが含まれており、ソースパッケージに生成された *.c ファイル等が含まれていれば、Pyrexがインストールされていない環境でもビルドすることができる。ユーザに不要なパッケージのインストールを強制しないのはありがたい。
Python 2.5以前のWindows版をサポートする場合、CythonではWindows版Pythonの標準コンパイラであるMicrosoft Visual C++ でビルドすることができない。コンパイラとしてMingwを使えばビルド可能ではあるが、Visual C++ユーザにとってはわざわざMingw環境を構築せずに使えた方がありがたい。
Python 2.6/Visual C++ 2008以降では、Cythonでも問題なくビルドできるようだが、それ以前のバージョンもサポートしたければ Pyrexを使った方が無難だろう。
といったところだ。自作パッケージを公開し、広く普及することを目指すのであれば、当面Pyrexで開発することも選択肢にはいる。将来的にPyrexからCythonに移行しなければならなくなるかもしれないが、Pyrex->Cythonの互換性はかなり高いので、それほど大きな負担にはならないだろう。