Python究竟如何调用C库?例如,我相信Tensorflow主要是用C编写的,但也可以在Python中使用。我正在考虑用我自己的(解释型)编程语言(用Go语言编写,但我认为这是一个类似的过程)实现类似的东西。当Python程序调用C函数时会发生什么?我想可能是RPC或DLL,但两者似乎都不太可能。
zzwlnbp81#
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.python就是一个例子:https://www.boost.org/doc/libs/1_65_0/libs/python/doc/html/tutorial/index.html
ctypes
boost.python
1条答案
按热度按时间zzwlnbp81#
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.python
就是一个例子:https://www.boost.org/doc/libs/1_65_0/libs/python/doc/html/tutorial/index.html