我有一个在 C++ 中实现反射的项目,以便自动生成 Python 绑定(bind)。目前,反射(reflect)的所有内容都被添加到 Python 中的单个模块中。不过,我希望能够创建一个 Python 包,这样我就可以执行诸如 import MyProject.Submodule
之类的操作,以避免在添加新类型时污染单个命名空间。
但是,使用the existing embedding/extending guide in Python ,我只能创建单独的模块。
我已经能够做这样的事情:
// Create the MyProject module
PyObject *m = PyModule_Create(&module);
// Add the submodule to the MyProject module object
PyModule_AddObject(m, "submodule", CreateSubmodule);
但是如果我这样做,import MyProject.submodule
将不会导入我的子模块,我必须使用import MyProject
然后使用MyProject.submodule
引用子模块。
有没有一种方法可以从 Python 的 C API 定义包,并且与完全在 Python 中定义的包一致?
最佳答案
我通过查看 os.py
设法自己解决了这个问题处理创建其子模块。
除了将子模块作为对象添加到它所在的包中(如问题中发布的代码所示)之外,您还需要将模块添加到模块字典中:
PyObject *moduleDict = PyImport_GetModuleDict();
PyDict_SetItemString(moduleDict, "package.submodule", submoduleObject);
关于python - 使用 C API 创建 Python 包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64656536/