我刚刚在赛顿偶然发现了一些奇怪的行为,我希望有人能启发我。在
我有两个包A和B,都是用distutils构建的,因为我有几个cython类(其中很多是包装c++类)。在
在包A中,我有一个cython类,我调用BaseAClass
forward在.pxd文件中声明,并在相应的.pyx中完全声明。我还有许多其他类在包A中子类BaseAClass
现在在包B中,我已经能够构建包含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
我在编译和使用这些类时没有问题。在
但是,如果我试图在包B中子类BaseAClass
:
我试着确认我得到了错误'_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可用西索尼兹.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
形式的导入。在相关问题 更多 >
编程相关推荐