python standrad lib如何调用C或C ++?

时间:2015-07-19 02:31:22

标签: python c interpreter cpython

来自cpython的“time.py”中的函数几乎只是“通过”定义。我想它的函数的实现是在“lib / python2.7 / lib-dynload / time.so”,所以我想知道cpython解释器如何调用“.so”文件?我知道 ctypes ,但我无法找到cpython中的“time”模块使用它。

1 个答案:

答案 0 :(得分:2)

简短的回答是Python为C程序提供了一个API(Python / C API),它允许用C语言定义/实例化Python对象,包括函数(参见extending Python with C)。有一个名为Py_InitModule的方法(及其变体),它可以在C代码中实例化Python模块,并注册方法定义并为其设置/添加字段。

就Python如何加载" time.so"而言,它可能使用dlopen C函数来实现,它允许在运行时动态打开库(或者在Windows上,相当于LoadLibrary)。使用这种方法,可以检索具有特定名称的函数(例如,Python可以强制实现任何实现Python模块的文件,必须提供具有特殊签名的初始化函数)然后调用它,允许初始化函数注册各种定义。