Python 子类化cython类:“cimport”初始化时未找到pxd文件

Python 子类化cython类:“cimport”初始化时未找到pxd文件,python,cython,distutils,setup.py,cythonize,Python,Cython,Distutils,Setup.py,Cythonize,我刚刚在cython中偶然发现了一些奇怪的行为,我希望有人能启发我 我有两个包A和B,都是用ditudil构建的,因为我有几个Cython类,其中很多包C++类。p> 在包A中,我有一个cython类,我在.pxd文件中声明了它,并在相应的.pyx文件中完全声明了它。我还有许多其他类,它们是包A中BaseAClass的子类 现在在包B中,我已经能够构建接受BaseAClass成员的类,只需执行以下操作 # in package B tree, .pyx file cimport A.stuff.

我刚刚在cython中偶然发现了一些奇怪的行为,我希望有人能启发我

我有两个包A和B,都是用ditudil构建的,因为我有几个Cython类,其中很多包C++类。p> 在包A中,我有一个cython类,我在.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
我在编译和使用这些类方面没有问题

但是,如果我尝试将BaseAClass子类化到包B中:

# in package B tree, .pyx file
cimport A.stuff._A as _A
cdef BClass(_A.BaseAClass):
    """put a constructor here"""
我试着用cythonize来表示我没有找到错误“\u A.pxd”。然而,如果我这样做

# 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。还要注意,我使用了一个与scipy类似的cythonize.py,并且我已经到处都有了uu init uuuuuuuuuuuuuuupy文件,我甚至尝试添加了一个uuuu init uuuuuuuuuuuux.pxd文件,但没有任何帮助。

导入应该从stuff cimport_A写入,其中stuff.pxd是一个定义文件,与执行导入的.pyx文件位于同一目录中

cimport A.stuff._aas_A使Cython查找名为_A.pxd的定义文件,这可能是意外行为

Cython可能不应该首先接受以cimport X.sub_包形式作为Y的导入。

当您将numpy作为np导入时如何?例如,我的意思是不接受cimport XX.something.something作为YY的形式。常规的cimport X as Y可以工作,但不支持子包。要么这样,要么正确处理那个案子。也许值得把它作为Cython回购协议的一个问题提出来。