我剛剛偶然發現了一些奇怪的行爲在cython中,我希望有人能夠啓發我。子類化cython類:pxd文件沒有找到'cimport'ing
我有兩個包A和B,都使用distutils構建,因爲我有幾個cython類(其中許多包裝C++類)。
在包A中,我有一個cython類,我把它稱爲BaseAClass
,它在.pxd文件中聲明並在相應的.pyx文件中完全聲明。我有一個在包A.繼承BaseAClass
現在
在包裝BI已經能夠建立一個採取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
:
# 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
文件,但它沒有幫助。
如何將cimport numpy設置爲np?請參閱[在這裏](https://cython.readthedocs.io/en/latest/src/tutorial/numpy.html#adding-types) – stefano
我的意思是「cimport XX.something.something_else」的形式,因爲YY'不應該被接受。常規的'cimport X as Y'可以工作,但不包含子包。要麼或正確處理這種情況。可能值得將它作爲Cython回購問題提出。 – danny