如果我在外部库中有C函数void foo()
,我可以在module1.pyx
中执行
cdef extern from "fooHeader.h":
void foo();
...
foo()
但是,如果不使用包装函数,我可以将此函数公开用于其他Cython模块吗?
例如,使用module1.pxd
:
cdef extern void foo()
不会在module2.pyx
:
from module1 cimport foo
foo()
以未定义的符号错误中止。
答案 0 :(得分:0)
典型的方法是创建一个包装器,因为当你将这些函数暴露给 Python 代码时,你通常想要拦截类型等。在我的头脑中,你可能最简单的方法就是使用Cython的包含文件工具,并使用.pxi
个文件:
https://cython.readthedocs.io/en/latest/src/reference/language_basics.html#include-file
链接的摘录:
我该如何使用它?
- 在.pxi文件中包含include语句,例如:include“spamstuff.pxi”
- include语句可以出现在Cython文件中的任何位置以及任何缩进级别
- .pxi文件中的代码需要以“零”缩进级别为根。
- 包含的代码本身可以包含其他包含语句。
因此,您需要将cdef extern <...>
内容放入.pxi
文件中并将其包含在所有用户中。
(旁注:我不记得你是否可以通过.pxd
接口文件公开extern模块。可能也可以工作,但我没有检查过。 )