用Python接口C(或C++)有什么不同的选择?

2024-06-16 11:19:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道有很多方法可以将C函数接口到Python中:Python C APIscipy.weavectypespyrex/cythonSWIGBoost.PythonPsyco。。。他们每一个最适合做什么?为什么我要用一个给定的方法而不是其他方法?当我需要在Python和C之间选择绑定时,应该考虑什么?在

我知道一些关于这个的讨论,但它们似乎都是不完整的。。。在

我知道关于StackOverflow的一些问题也是相关的。例如:


Tags: 方法函数orgapihttpwikiscipyctypes
2条回答

这只是对您问题的一部分的简短回答,但是:

ctypes可能是最好的,当您有一个预先存在的C库,您想与Python一起使用。在

当您想用C编写一些利用Python特性的东西,或者想用C编写Python的扩展时,pythoncapi是最好的选择

当然,这两个问题可能会在你的问题中链接到的一些SO问题的答案中进行更详细的阐述。在

我并没有使用所有这些方法,尽管我在某一点或另一点上都调查过。。。在

pythoncapi:用于编写编译成Python模块的C代码,该模块可以在Python中导入。或者编写一个Python模块,作为与某个C库接口的“粘合”代码。在

细纹织物:允许您在python代码中插入一些C代码,如果您正在使用NumPy和SciPy来做数字运算,请仔细研究一下。C代码应该是一个字符串,就像,编织.inline例如('printf(“%s”,foo)')。在

ctypes:一个python模块,允许您从python代码调用C代码。您基本上导入共享库,然后调用它的API。需要做一些工作来整理这些电话的数据。如果你想使用你或其他人编写的现有C库,我将从这里开始。在

pyrex/cython:允许您编写Python代码(使用一些特殊语法),这些代码将生成C代码(可以作为Python模块导入),显然,它的运行速度比通过Python解释器运行的要快。这有点像“pythoncapi”路由,只是它为您生成C代码。如果您有一些代码块是您的瓶颈,并且非常慢,则非常有用。使用cython重写该函数并从调用代码导入它。在

<> > Stase:为C/C++库生成包装代码。最后应该得到一个可以导入和使用的python模块。在

Boost.Python:这是我所知最少的一个。在我看来,它类似于SWIG,虽然你自己编写包装层,但有很多来自Boost宏/函数的帮助。在

Psyco:将python代码加速一点,我从来没有这么幸运过。我不会浪费你的时间。分析您的代码,找到您的瓶颈,并使用上述技术之一加速它们。在

相关问题 更多 >