我在编译不同包中的 cdef-ed 类型时遇到问题,我在 cython 文档中找不到解释。
我的 python src 树的根目录中有这个 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 是一个 cdef-ed 类型,在 flink/pytk/defs/FragIdx.pyx 中定义:
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 中列出。
如果有人能对此有所了解,我将不胜感激,非常感谢!
丹尼尔