所以我想通过cython从c调用一些python代码.我设法从c调用cython代码.我也可以从cython中调用python代码.但是当我把它们全部加在一起时,有些东西会丢失.
这是我的python代码(quacker.pyx):
def quack():
print "Quack!"
Run Code Online (Sandbox Code Playgroud)
这是我的cython"bridge"(caller.pyx):
from quacker import quack
cdef public void call_quack():
quack()
Run Code Online (Sandbox Code Playgroud)
这是c代码(main.c):
#include <Python.h>
#include "caller.h"
int main() {
Py_Initialize();
initcaller();
call_quack();
Py_Finalize();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我运行这个时,我得到了这个例外:
Exception NameError: "name 'quack' is not defined" in 'caller.call_quack' ignored
我怀疑的遗失的部分:
initquacker()quacker.hquacker.h-only quacker.ccaller.c不导入quacker.h或调用initquacker()我不太确定它甚至可以做我想做的事情,但在我看来它应该是.我很想听听你的任何意见.
编辑:
这是我cythonize/compile/link/run的方式:
$ cython *.pyx
$ cc -c *.c -I/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7
$ cc -L/System/Library/Frameworks/Python.framework/Versions/2.7/lib -L/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/config -lpython2.7 -ldl …Run Code Online (Sandbox Code Playgroud)