異なるパッケージでcdef-ed型をコンパイルする際に問題が発生し、cythonのドキュメントで説明が見つかりませんでした。
Pythonsrcツリーのルートに次のsetup.pyがあります。
from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
setup(
cmdclass = {'build_ext': build_ext},
ext_modules = [
Extension("flink.pytk.defs.FragIdx",
sources = ["flink/pytk/defs/FragIdx.pyx"]),
Extension("flink.pytk.fragments.STK_idx",
sources = ["flink/pytk/fragments/STK_idx.pyx"])
]
)
FragIdxは、flink / pytk / defs/FragIdx.pyxで定義されているcdef-edタイプです。
cdef class FragIdx:
cdef public FragIdx parent
cdef public FragIdx root
cdef public tuple label
...
また、STK_idxはFragIdxの拡張であり、flink / pytk / Fragments/STK_idx.pyxで定義されています。
from flink.pytk.defs.FragIdx import FragIdx
cdef class STK_idx(FragIdx):
...
投稿の冒頭に記載されているsetup.pyを使用してコンパイルしようとすると、FragIdxは正常にコンパイルされますが、STK_idxに関しては、次のエラーメッセージが表示されます。
flink/pytk/fragments/STK_idx.pyx:5:5: 'FragIdx' is not a type name
ソースツリーのルートディレクトリが$PYTHONPATHにリストされていることに注意してください。
誰かがこれに光を当てることができれば本当にありがたいです、どうもありがとう!
ダニエレ