Python如何调用C?

Zac*_*Zac 2 c python dynamic-linking

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

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

Not*_*fer 9

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.python:https: //www.boost.org/doc/libs/1_65_0/libs/python/doc/html/tutorial/index.html

  • @Simon 哦,它绝对是:https://github.com/python/cpython/blob/master/Modules/_json.c。您链接的 python 代码使用一些导入技巧来透明地加载它的 C 部分。 (2认同)