我如何在cython中使用预编译的库?

Noo*_*bot 6 python compilation cython

我正在尝试编译一个在install(.pyd)上预编译的模块的快速扩展.下面是我正在尝试做的一个简单的例子.鉴于foo.pyd:

baz.pxd

from foo.bar cimport Bar

cdef class Baz(Bar):
    pass
Run Code Online (Sandbox Code Playgroud)

baz.pyx

cdef class Baz(Bar):
    def __init__(self, *a, **k):
        ...
Run Code Online (Sandbox Code Playgroud)

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))
Run Code Online (Sandbox Code Playgroud)

我已尝试过上述的许多变化,但无济于事.

Fre*_*Foo 5

cimport用于 C/C++ API(函数、结构、类)并从.pxd文件中读取,这些文件是 C/C++ 头文件的 Cython 对应物。如果你没有.pxdfoo在编译时库,你不能cimport从它。Python 扩展模块(.pyd在 Windows 上,.so在 Linux 上)通常根本没有 C API:它们只包含外部可见的符号,允许 Python 模块导入器将它们的内容识别为 Python 模块。

此外,如果您想从模块中获取 Python 类(甚至是作为扩展类型实现的类),则需要使用import它。不过,我认为cdef class不允许从这样的类继承。