subclassing cython class:'cimport'ing 时找不到 pxd 文件
subclassing cython class: pxd file not found when 'cimport'ing
我刚刚在 cython 中偶然发现了一些奇怪的行为,我希望有人能够启发我。
我有两个包 A 和 B,都是使用 distutils 构建的,因为我有几个 cython classes(其中许多包装 c++ classes)。
在包 A 中,我有一个 cython class,我称之为 BaseAClass
forward 在 .pxd 文件中声明并在相应的 .pyx 中完全声明。我还有许多其他 classes 子 class BaseAClass
在包 A 中。
现在,在包 B 中,我已经能够构建 classes,它采用 BaseAClass
成员,只需执行
# in package B tree, .pyx file
cimport A.stuff._A as _A
cdef BClass(object):
cdef _A.BaseAClass my_aclass
def __cinit__(self, aclass):
self.my_aclass = aclass
我在编译和使用这些 classes 时没有问题。
但是如果我尝试在包 B 中子class BaseAClass
:
# in package B tree, .pyx file
cimport A.stuff._A as _A
cdef BClass(_A.BaseAClass):
"""put a constructor here"""
并且我尝试使用 cythonize 时出现错误 '_A.pxd' not found
。但是,如果我这样做
# in package B tree, .pyx file
cdef BClass(A.stuff._A.BaseAClass):
"""put a constructor and methods here"""
没问题!希望有人知道发生了什么事!
请注意,当我编译时,我传递了额外的标志“-I /path/to/packageA/stuff”以确保包 A 中的 pxd 文件可用于包 B。另请注意,我使用了类似的 cythonize.py 用于 scipy 并且我已经到处都有 __init__.py
文件,我什至尝试添加 __init__.pxd
文件但它没有帮助。
导入应写为 from stuff cimport _A
,其中 stuff.pxd
是与执行导入的 .pyx
文件位于同一目录中的定义文件。
行 cimport A.stuff._A as _A
使 Cython 查找名为 _A.pxd
的定义文件,这可能是意外行为。
Cython 可能首先不应接受 cimport X.sub_package as Y
形式的导入。
我刚刚在 cython 中偶然发现了一些奇怪的行为,我希望有人能够启发我。
我有两个包 A 和 B,都是使用 distutils 构建的,因为我有几个 cython classes(其中许多包装 c++ classes)。
在包 A 中,我有一个 cython class,我称之为 BaseAClass
forward 在 .pxd 文件中声明并在相应的 .pyx 中完全声明。我还有许多其他 classes 子 class BaseAClass
在包 A 中。
现在,在包 B 中,我已经能够构建 classes,它采用 BaseAClass
成员,只需执行
# in package B tree, .pyx file
cimport A.stuff._A as _A
cdef BClass(object):
cdef _A.BaseAClass my_aclass
def __cinit__(self, aclass):
self.my_aclass = aclass
我在编译和使用这些 classes 时没有问题。
但是如果我尝试在包 B 中子class BaseAClass
:
# in package B tree, .pyx file
cimport A.stuff._A as _A
cdef BClass(_A.BaseAClass):
"""put a constructor here"""
并且我尝试使用 cythonize 时出现错误 '_A.pxd' not found
。但是,如果我这样做
# in package B tree, .pyx file
cdef BClass(A.stuff._A.BaseAClass):
"""put a constructor and methods here"""
没问题!希望有人知道发生了什么事!
请注意,当我编译时,我传递了额外的标志“-I /path/to/packageA/stuff”以确保包 A 中的 pxd 文件可用于包 B。另请注意,我使用了类似的 cythonize.py 用于 scipy 并且我已经到处都有 __init__.py
文件,我什至尝试添加 __init__.pxd
文件但它没有帮助。
导入应写为 from stuff cimport _A
,其中 stuff.pxd
是与执行导入的 .pyx
文件位于同一目录中的定义文件。
行 cimport A.stuff._A as _A
使 Cython 查找名为 _A.pxd
的定义文件,这可能是意外行为。
Cython 可能首先不应接受 cimport X.sub_package as Y
形式的导入。