首页 > 解决方案 > Python如何调用C?

问题描述

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

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

标签: pythoncdynamic-linking

解决方案


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


推荐阅读