Cha*_*net 14 c python interfacing
我知道有很多方法可以将C函数连接到Python:Python C API,scipy.weave,ctypes,pyrex/cython,SWIG,Boost.Python,Psyco ......它们最适合什么?为什么我应该使用给定的方法而不是其他方法?当我需要选择Python和C之间的绑定时应该考虑什么?
我知道有关于此的一些讨论,但它们似乎都不完整......
我知道StackOverflow上的一些问题也是相关的.例如:
我没有使用过所有这些方法,尽管我已经在某个时刻对它们进行了调查......
Python C API:用于编写可编译为可以在Python中导入的python模块的C代码.或者编写一个Python模块,作为"粘合"代码与某些C库接口.
scipy.weave:如果你使用NumPy和SciPy进行数值工作,可以将C代码的一部分推送到你的python代码中,看看这个.例如,C代码将作为字符串,例如weave.inline('printf("%s",foo)').
ctypes:一个python模块,允许您从python代码调用C代码.您基本上导入共享库,然后调用其API.有些工作需要将数据输入和输出这些调用.如果您正在考虑使用您或其他人编写的现有C库,我将从这里开始.
pyrex/cython:允许您编写Python代码(使用一些特殊语法),这些代码将生成C代码(可以作为Python模块导入),并且显然比运行Python解释器时运行得更快.这有点像"Python C API"路由,只为它生成C代码.如果你有一些代码是你的瓶颈并且非常慢,那么这很有用.使用cython重写该函数并从调用代码中导入它.
SWIG:为C/C++库生成包装器代码.您应该最终得到一个可以导入和使用的python模块.
Boost.Python:这是我最不了解的.在我看来,它类似于SWIG,尽管你自己编写了包装层,但是在Boost宏/函数的帮助下提供了很多帮助.
Psyco:加快你的python代码,我从来没有多少运气.我不会浪费你的时间.使用上述技术之一描述您的代码,找到瓶颈并加快速度.