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

How python standrad lib invoke C or C++?

cpython "time.py" 中的函数几乎只是 "pass" 定义。我猜它的功能实现在"lib/python2.7/lib-dynload/time.so",所以我想知道cpython解释器如何调用“.so”文件?我知道 ctypes,但我找不到 cpython 中的 "time" 模块在哪里使用它。

简短的回答是 Python 为 C 程序(Python / C API), which allows one to define/instantiate Python objects, including functions, in C code (see extending Python with C). There is a method called Py_InitModule(及其变体)提供了一个 API,这使得实例化一个 Python C 代码中的模块并向其注册方法定义和 set/add 字段。

就 Python 如何加载 "time.so" 而言,它可能使用 dlopen C function, which allows libraries to be opened dynamically at runtime (or, on Windows, the equivalent LoadLibrary)。使用这种方法,可以检索具有特定名称的函数(例如 Python 可以强制任何实现 Python 模块的“.so”文件必须提供具有特殊签名的初始化函数) 然后调用它,允许初始化函数注册各种定义。