Python如何调用C?

How does Python call C?

Python 究竟如何才能调用 C 库?例如 Tensorflow,我相信主要是用 C 编写的,但可以从 Python 开始使用。我正在考虑用我自己的(解释的)编程语言(用 Go 编写,但我认为这将是一个类似的过程)实现类似的东西。

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

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