gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 00:07:11 27 4
gpt4 key购买 nike

我正在尝试为在安装时预编译的模块 (.pyd) 编译一个快速扩展。下面是我正在尝试做的一个简单示例。给定 foo.pyd:

baz.pxd

from foo.bar cimport Bar

cdef class Baz(Bar):
pass

baz.pyx

cdef class Baz(Bar):
def __init__(self, *a, **k):
...

设置.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 文件中读取,这些文件是 C/C++ header 的 Cython 对应物。如果在编译时没有 foo 库的 .pxd,则不能从它cimport。 Python 扩展模块(Windows 上的 .pyd,Linux 上的 .so)通常根本没有 C API:它们只包含允许 Python 模块导入器的外部可见符号将它们的内容识别为 Python 模块。

此外,如果您想从模块中获取一个 Python 类(即使是作为扩展类型实现的类),您需要导入它。不过,我不认为 cdef 类 可以从这样的类继承。

关于python - 我如何在 cython 中使用预编译库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23530710/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com