Python如何调用C?
Python究竟如何调用C库?例如,我认为Tensorflow主要是用C编写的,但可以从Python中使用。我正在考虑用我自己的(解释的)编程语言(用Go编写,但我认为这将是一个类似的过程)实现类似的东西Python如何调用C?,python,c,dynamic-linking,Python,C,Dynamic Linking,Python究竟如何调用C库?例如,我认为Tensorflow主要是用C编写的,但可以从Python中使用。我正在考虑用我自己的(解释的)编程语言(用Go编写,但我认为这将是一个类似的过程)实现类似的东西 当Python程序调用C函数时会发生什么?我在考虑RPC或DLL,但两者似乎都不太可能。cPython有两种调用C代码的主要方法:要么加载共享库并调用其符号,要么将C代码打包为Python二进制模块,然后从Python代码中调用它们,就好像它们是普通的Python模块一样,这就是标准库中高性能
当Python程序调用C函数时会发生什么?我在考虑RPC或DLL,但两者似乎都不太可能。cPython有两种调用C代码的主要方法:要么加载共享库并调用其符号,要么将C代码打包为Python二进制模块,然后从Python代码中调用它们,就好像它们是普通的Python模块一样,这就是标准库中高性能内容的实现方式-例如 使用
ctypes
模块加载共享库并从中调用函数相当简单,您可以在这里找到许多示例:
将您的C代码打包为二进制Python模块需要大量的样板文件和对引用计数、空指针等细节的仔细关注,本文对此进行了说明:
有几个库可以自动执行该过程并为您生成绑定代码。一个例子是
boost.python
:为什么不使用DLL?这就是正在发生的事情。请看这里:Python语言?Python解释器?Python字节码解析器?在屏幕上执行某些操作之前,它不再是“Python”,而只是一个程序调用另一个程序。Python的C(和C++)接口有很好的文档记录。不,我认为它不是用C构建的,而是使用纯Pythonscripts@Simon哦,肯定是。您链接的python代码使用了一些导入技巧来透明地加载它的C部分。我的错误。也许在你的答案中加入链接以避免将来的混淆:)