このBlogは移転しました。今後は aish.dev を御覧ください。

PyrexかCythonか

【Q】 Pythonの拡張モジュール作成言語として、PyrexCython のどちらを使うべきでしょうか?

【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ではWindowsPythonの標準コンパイラであるMicrosoft Visual C++ でビルドすることができない。コンパイラとしてMingwを使えばビルド可能ではあるが、Visual C++ユーザにとってはわざわざMingw環境を構築せずに使えた方がありがたい。

Python 2.6/Visual C++ 2008以降では、Cythonでも問題なくビルドできるようだが、それ以前のバージョンもサポートしたければ Pyrexを使った方が無難だろう。

といったところだ。自作パッケージを公開し、広く普及することを目指すのであれば、当面Pyrexで開発することも選択肢にはいる。将来的にPyrexからCythonに移行しなければならなくなるかもしれないが、Pyrex->Cythonの互換性はかなり高いので、それほど大きな負担にはならないだろう。