☝️

Ubuntu(WSL)でcythonを試してみる

2021/05/17に公開

概要

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