我正在尝试编译一个在安装时预编译的模块的快速扩展(.pyd
)。下面是我正在尝试做的一个简单的例子。鉴于foo.pyd
:
from foo.bar cimport Bar
cdef class Baz(Bar):
pass
cdef class Baz(Bar):
def __init__(self, *a, **k):
...
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))
我尝试了上述的许多变化,但无济于事。
答案 0 :(得分:4)
cimport
用于C / C ++ API(函数,结构,类)和来自.pxd
文件的读取,这些文件是C / C ++头文件的Cython对应文件。如果您在编译时没有.pxd
库foo
,则不能cimport
。{ Python扩展模块(Windows上的.pyd
,Linux上的.so
)通常根本没有C API:它们只包含外部可见的符号,允许Python模块导入器将其内容识别为Python模块。
此外,如果您想从模块中获取Python类(甚至是作为扩展类型实现的类),则需要import
它。我不认为cdef class
可以从这样的类中继承。