如何使用cython中的预编译库



我正试图为安装时预编译的模块(.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不允许从这样的类继承。

相关内容

  • 没有找到相关文章

最新更新