Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将C(或C+;+;)与Python接口有哪些不同的选项?_Python_C_Interfacing - Fatal编程技术网

将C(或C+;+;)与Python接口有哪些不同的选项?

将C(或C+;+;)与Python接口有哪些不同的选项?,python,c,interfacing,Python,C,Interfacing,我知道有很多方法可以将C函数接口到Python中。。。它们各自的最佳用途是什么?为什么我应该使用给定的方法而不是其他方法?当我需要在Python和C之间选择绑定时,应该考虑什么 我知道关于这个的一些讨论,但它们似乎都不完整 我知道关于StackOverflow的一些问题也是相关的。例如: 这只是对您问题的一部分的简短回答,但是: ctypes可能是最好的选择,因为您有一个预先存在的C库,希望与Python一起使用 当您想用C编写利用Python方面的东西,或者想用C编写Python

我知道有很多方法可以将C函数接口到Python中。。。它们各自的最佳用途是什么?为什么我应该使用给定的方法而不是其他方法?当我需要在Python和C之间选择绑定时,应该考虑什么

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

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


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

ctypes
可能是最好的选择,因为您有一个预先存在的C库,希望与Python一起使用

当您想用C编写利用Python方面的东西,或者想用C编写Python的扩展时,Python C API是最好的(Cython是另一种方式)


当然,这两种方法可能会在您的问题中所链接的SO问题的一些答案中详细阐述。

我没有使用所有这些方法,尽管我在某一点或另一点上对它们进行了调查

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

scipy.weave:允许您在python代码中插入一些C代码,如果您使用NumPy和scipy进行数值计算,请查看以下内容。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代码的速度提高一点,我在这方面的运气从来没有这么好。我不会浪费你的时间。分析代码,找出瓶颈,并使用上述技术之一加快速度。

-1。这个问题太宽泛了。@Steven Rumbalski:我不同意。这是一个很好的问题,尽管我想我很想听听用户实际尝试了什么。@Platinum Azure:我在-1上含糊其辞了一些,但最终决定这个问题的好答案必须非常长且详细。“这在很大程度上也是主观的。”史蒂文·伦巴尔斯基,我同意——我觉得这是“我下一步应该学什么语言”问题的一个稍微狭隘的版本@Charles Brunet,我认为你应该编辑这个以反映你的具体需求。你想做什么?对于这个问题,有太多的选择,我不同意。如果您知道需要一个到python的c绑定,但是您不知道需要了解的绑定是什么,那么您怎么能问一个更具体的问题呢?我最近尝试了SWIG和ctypes,ctypes结果不是那么令人头痛。你可以编译你的C/C++作为共享库,然后从Python脚本导入和调用函数。但是, cType 不能轻易地创建C++类对象。陈家胜 没错,这就是德格兰特的答案所在。(尽管它总是可以为C++部分提供C接口包装器。)