我知道有很多方法可以将C函数接口到python:thePython C APIscipy.weavectypespyrex/cythonSWIGBoost.Python。他们每个人最适合做什么?为什么我应该使用给定的方法而不是其他方法?当我需要在python和c之间选择绑定时,应该考虑什么?
我知道一些讨论,但它们似乎都不完整…
Psyco
http://wiki.cython.org/SWIG
我知道关于stackoverflow的一些问题也是相关的。例如:
http://sage.math.washington.edu/tmp/sage-2.8.12.alpha0/doc/prog/node35.html
About interfacing an existing C library

最佳答案

我并没有使用所有这些方法,尽管我已经在某一点或另一点调查了它们…
python c-api:用于编写编译到可以在python中导入的python模块的C代码。或者编写一个python模块,作为“粘合”代码与一些C库进行接口。
weave:允许您将一些C代码插入到您的python代码中,如果您使用numpy和scipy来做数值工作,请查看这个。C代码将作为一个字符串,例如weave.inline(“printf(”%s,“foo”)。
ctypes:一个允许您从Python代码调用C代码的Python模块。基本上,导入共享库,然后调用它的API。一些工作需要整理这些电话中的数据。如果你想使用你或其他人写的现有C库,我就从这里开始。
pyrex/cython:允许您编写python代码(使用一些特殊的语法),这些代码将生成C代码(可以作为python模块导入),显然,运行速度比通过python解释器运行时要快。这有点像“python c-api”路由,只是它为您生成了C代码。如果您有一些代码块是您的瓶颈,并且速度非常慢,那么很有用。使用cython重写该函数并从调用代码导入它。
SWIG:为C/C++库生成包装代码。最后应该得到一个可以导入和使用的python模块。
巨蟒:这是我最不了解的。在我看来,虽然您自己编写包装层,但在Boost宏/函数的帮助下,它与Swig类似。
psyco:让你的python代码快一点,我从来没有这么幸运过。我不会浪费你的时间。分析您的代码,找到瓶颈并使用上面的技术之一加速它们。

10-04 21:58
查看更多