私はcythonのいくつかの奇妙な振る舞いを見つけただけで、誰かが私を啓発できることを願っています。cythonクラスをサブクラス化する: 'cimport'ingのときにpxdファイルが見つかりません
私は2つのパッケージAとBを持っていますが、どちらもdistutilsを使ってビルドされています。これはいくつかのcythonクラス(その多くはC++クラスをラップしています)です。
パッケージAでは、私はBaseAClass
を.pxdファイルで宣言し、対応する.pyxで完全に宣言したcythonクラスを持っています。私は単に
# 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
メンバーを取るクラスを構築することができましたパッケージBIに
今すぐパッケージAにBaseAClass
をサブクラス化する他の多くのクラスを持っていると私はコンパイルと使用して問題がありませんこれらのクラス。
は、しかし、私は、パッケージBにBaseAClass
をサブクラス化しようとした場合:
# in package B tree, .pyx file
cimport A.stuff._A as _A
cdef BClass(_A.BaseAClass):
"""put a constructor here"""
と私はエラー'_A.pxd' not found
を取得cythonizeしてみてください。但し、私がすれば
# in package B tree, .pyx file
cdef BClass(A.stuff._A.BaseAClass):
"""put a constructor and methods here"""
問題ありません!うまくいけば、誰かが何が起こっているのかを知っているでしょう!
私がコンパイルするとき、パッケージAのpxdファイルがパッケージBで利用可能であることを確認するために、追加フラグ "-I/path/to/packageA/stuff"を渡すことに注意してください。同様のcythonize .pyはscipyのために使用され、私はすでに__init__.py
のファイルをどこにも持っていて、私は__init__.pxd
というファイルを追加しようとしましたが、助けにはなりませんでした。
あなたは 'numpy as np'をどう思いますか?たとえば、[here](https://cython.readthedocs.io/en/latest/src/tutorial/numpy.html#adding-types)を参照してください。 – stefano
私は '' CYMORT XX.something.something_else as YY'という形式は意味しません受け付けます。通常の 'cimport X as Y'は動作しますが、サブパッケージは動作しません。どちらか、またはそのケースを正しく処理します。 Cythonのレポの問題としてそれを上げる価値があるかもしれません。 – danny