子类化cython类:“cimport”时找不到pxd文件

2024-05-13 18:59:34 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我有两个包A和B,都是用distutils构建的,因为我有几个cython类(其中很多是包装c++类)。在

在包A中,我有一个cython类,我调用BaseAClassforward在.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

^{pr2}$

我试着确认我得到了错误'_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文件,但是没有用。在


Tags: 文件intree声明packagecythonfile中子
1条回答
网友
1楼 · 发布于 2024-05-13 18:59:34

导入应该写成from stuff cimport _A,其中stuff.pxd是一个定义文件,与执行导入的.pyx文件位于同一目录中。在

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

Cython首先可能不应该接受cimport X.sub_package as Y形式的导入。在

相关问题 更多 >