Python源码之初始化(五)-initmain()
初始化执行到initmain()的时候
PyImport_GetModuleDict() 返回的是interp->modules, 是一个dict
包含了 sys, _codecs, builtins, zipimport等
接着PyModule_New("__main__"), 创建一个__main__ module,
并在__main__ module的dict里面加入 __name__, __doc__, __package__ 三个key,这和所有module的创建一样
然后把这个__main__ 模块加入到interp->modules
在退出initmain()之前,系统把 __builtins__模块加入__main__模块的dict中
static voidinitmain(void){ PyObject *m, *d; m = PyImport_AddModule("__main__"); if (m == NULL) Py_FatalError("can't create __main__ module"); d = PyModule_GetDict(m); if (PyDict_GetItemString(d, "__builtins__") == NULL) { PyObject *bimod = PyImport_ImportModule("builtins"); if (bimod == NULL || PyDict_SetItemString(d, "__builtins__", bimod) != 0) Py_FatalError("can't add __builtins__ to __main__"); Py_DECREF(bimod); }}