我有一个项目,它在C++中实现反射,以便自动生成Python绑定。目前,反射的所有内容都被添加到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中定义的包一致的包?
发布于 2020-11-15 02:44:22
通过查看os.py
如何创建其子模块,我设法自己弄清楚了这一点。
除了将子模块作为对象添加到它所在的包中,正如问题中发布的代码所做的那样,您还需要将模块添加到模块字典:
PyObject *moduleDict = PyImport_GetModuleDict();
PyDict_SetItemString(moduleDict, "package.submodule", submoduleObject);
https://stackoverflow.com/questions/64656536
复制相似问题