Evolution Gym
というツールを使おうと思い、依存パッケージをインストールした所、インストールに失敗する状況があるようだ。私の環境では、 h5py
は whl
をインストールしていたため、ビルドは発生しておらずビルド済みバイナリをインストールしてた。しかしソースコードからビルドする際には上手くいかないようだった。そこで原因となっている h5py
の該当のバージョンのソースコードをダウンロードしビルドしてみる事にした。tarballを解凍しビルドコマンドを実行するとエラーが発生する。それは Cython
によるエラーだった。このエラーのトラブルシューティングをするために Cython
について知る必要が出てきた。そこでCythonについて考える事にした。
Hello world
まずは公式ドキュメントに記載されている一番最初の部分だけをおさらいする事にした。
pyx
ファイルを作成する。今回は print
関数を使って"Hello world"を出力しているだけだから Cython
を使う意味はないけれど、まずはここから始める。
print("Hello world!")
helloworld.pyx
をビルドしてインストールするために、 setup.py
を用意する。
from setuptools import setup
from Cython.Build import cythonize
setup(
ext_modules = cythonize("helloworld.pyx")
)
準備が整ったらインストールする。
ビルドとインストールができたら Python
のインタラクティブシェルを起動し、 helloworld
モジュールをインポートする。
「Hello world!」が表示される事が確認できた。
該当のエラーは何か?
問題となったエラーは、他のモジュールをインポートしようとして、 Expected an identifier
と言われている。
特に class
の所にマークが付いている。
from ._objects cimport class ObjectID
from ~ cimport class ~
という構文が使えるものなのか調べてみた所、どうやらこの構文は、削除されたようだった。"動くけれど動くとは言っていない"といった具合だったのかもしれない。
該当のissueもあった。
https://github.com/cython/cython/pull/4904
過去のコードはビルドできない事もありそうだ。