我正试图为安装时预编译的模块(.pyd
(编译一个快速扩展。下面是我尝试做的一个简单的例子
baz.pxd
from foo.bar cimport Bar
cdef class Baz(Bar):
pass
baz.pyx
cdef class Baz(Bar):
def __init__(self, *a, **k):
...
setup.py
from distutils.core import setup
from Cython.Build import cythonize
from distutils.extension import Extension
extensions = [Extension('baz', ['baz.pyx',], libraries=['foo.pyd',])]
setup(name='baz', ext_modules=cythonize(extensions))
我试过上面的许多变体,但都没有用。
cimport
用于C/C++API(函数、结构、类(,并从.pxd
文件中读取,CCD_4是C/C++头文件的Cython对应文件。如果在编译时foo
库没有.pxd
,则无法从中获得cimport
。Python扩展模块(Windows上为.pyd
,Linux上为.so
(通常根本没有C API:它们只包含外部可见的符号,允许Python模块导入器将其内容识别为Python模块。
此外,如果你想从一个模块中获得一个Python类(即使是一个实现为扩展类型的类(,你需要import
。不过,我认为cdef class
不允许从这样的类继承。