Python如何调用C语言?

3

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

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


3
为什么不使用动态链接库(DLL)呢?这正是正在发生的事情。请看这里:https://docs.python.org/2/extending/extending.html - Not_a_Golfer
Python-这门语言?Python-解释器?Python-字节码解析器?在屏幕上执行某项操作之前的某个地方,它不再是“Python”,而只是一个程序调用另一个程序。 - Jongware
1
Python的C(和C++)接口有很好的文档记录。 - too honest for this site
1个回答

10
cPython有两种主要调用C代码的方式:一种是加载共享库并调用其符号,另一种是将C代码打包为Python二进制模块,然后像使用普通Python模块一样从Python代码中调用它们,这就是标准库中高性能内容的实现方式,例如json
使用ctypes模块加载共享库并从中调用函数相当简单,您可以在此处找到许多示例:https://docs.python.org/3/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

不,我认为 json 不是用 C 构建的,而是使用纯 Python 脚本。 - Xantium
2
@Simon,绝对是这样的:https://github.com/python/cpython/blob/master/Modules/_json.c。你提供的Python代码使用了一些导入技巧,以透明的方式加载C部分。 - Not_a_Golfer
1
好的,我的错误。也许在你的回答中包含链接可以避免未来的混淆 :) - Xantium

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接