Python如何调用C?

时间:2018-07-15 11:05:39

标签: python c dynamic-linking

Python究竟如何调用C库?例如,我相信Tensorflow主要是用C编写的,但是可以在Python中使用。我正在考虑用我自己的(解释的)编程语言(用Go编写,但我想这将是一个类似的过程)来实现类似的事情。

当Python程序调用C函数时会发生什么?我在考虑RPC或DLL,但它们似乎都不太可能。

1 个答案:

答案 0 :(得分:7)

cPython有两种主要的C代码调用方式:通过加载共享库并调用其符号,或者通过将C代码打包为Python二进制模块,然后从Python代码中调用它们,就好像它们是普通的Python模块一样。如何实现标准库中的高性能内容-例如json

使用ctypes模块加载共享库并从中调用函数非常简单,您可以在此处找到很多示例:https://docs.python.org/2/library/ctypes.html

将C代码打包为二进制Python模块需要大量的样板并特别注意细节,例如引用计数,空指针等,并在此处进行了记录:https://docs.python.org/2/extending/extending.html

有几个库可以自动执行该过程并为您生成绑定代码。一个示例是boost.pythonhttps://www.boost.org/doc/libs/1_65_0/libs/python/doc/html/tutorial/index.html