相关疑难解决方法(0)

通过cython从c调用python代码

所以我想通过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.h
  • Cython没有产生任何quacker.h-only quacker.c
  • caller.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)

c python cython

19
推荐指数
2
解决办法
6548
查看次数

标签 统计

c ×1

cython ×1

python ×1