Ubuntu(WSL)でcythonを試してみる
概要
WSLでCythonを使って簡単なPythonコードをcythonizeしてみる。
Cythonとは
PythonとC/C++を相互に使用するためのライブラリです。PythonのコードをCのソースに変換したり、コンパイルしたりすることができます。またsetup.pyを設定することで、Cの既存ソースをPythonから使うことができます。PythonでできるコードをCで書くことで下記のようなメリットがあります。
- 高速化、最適化ができる。Pythonは一般にインタープリタ言語で遅いので、Cを使うと高速化することができます。
- Cにしか開かれていない低レイヤーなAPIをたたくことができる。
環境構築
gccのインストール
今回はCのコンパイラとしてgccを使うのでaptでインストールしておきます。
Windowsネイティブで使う場合はVisualStudioを使ってVisualC++入れるか、MinGWのgccを入れておきます。
cythonのインストール
pipでcythonをインストールします。
pip install cython
下記に示すcythonizeコマンドを使用するために、cythonのバージョンが0.29.14より上であることを確かめておきます。
サンプルプログラムを作ってみる
試しに下記のようなhelloworldのプログラムを作ります。
def hello(name):
return "hello, {}".format(name)
上記の内容をsmplib.pyx
という拡張子で保存します。
新しいCythonではcythonize
コマンドでpyxファイルからCのソースを生成したり、Pythonからimportできる形でコンパイルすることができます。
-b
オプションを使うことで、Pythonでimport可能なバイナリを出力することができます。使わないとCのソースだけが出力されますが、出力されたcソースをコンパイルするにはpyxの場合と同様にcythonizeでコンパイルします。
cythonize -b smplib.pyx
WSLの場合、smplib.cpython-36m-x86_64-linux-gnu.so
のような名前で共有ライブラリが出力されます。これが置かれたディレクトリでPythonを起動するとimportすることができます。
import smplib
print(smplib.hello("myname"))
# => hello, myname
-a
フラグを使うと、PythonコードがどのようにCに変換されているかを表すhtmlファイルを出力することができます。
Discussion