使用C API创建Python包 我有一个项目,它在C++中实现反射,以便自动生成Python绑定。目前,所有反映的内容都添加到Python中的单个模块中。但是,我希望能够创建一个Python包,这样我就可以像导入MyProject.Submodule这样做,以避免在添加新类型时污染单个名称空间
但是,使用,我只能创建单个模块 我可以做这样的事情:使用C API创建Python包 我有一个项目,它在C++中实现反射,以便自动生成Python绑定。目前,所有反映的内容都添加到Python中的单个模块中。但是,我希望能够创建一个Python包,这样我就可以像导入MyProject.Submodule这样做,以避免在添加新类型时污染单个名称空间,python,c,python-3.x,Python,C,Python 3.x,但是,使用,我只能创建单个模块 我可以做这样的事情: //创建MyProject模块 PyObject*m=PyModule\u创建(&module); //将子模块添加到MyProject模块对象 PyModule_AddObject(m,“子模块”,CreateSubmodule); 但是如果我这样做,import MyProject.submodule不会导入我的子模块,我必须使用import MyProject然后使用MyProject.submodule引用子模块 有没有一种方法可以
//创建MyProject模块
PyObject*m=PyModule\u创建(&module);
//将子模块添加到MyProject模块对象
PyModule_AddObject(m,“子模块”,CreateSubmodule);
但是如果我这样做,import MyProject.submodule
不会导入我的子模块,我必须使用import MyProject
然后使用MyProject.submodule
引用子模块
有没有一种方法可以从Python的C API中定义与完全用Python定义的包一致工作的包?我通过查看
os.py
如何处理其子模块的创建,自己设法弄明白了这一点
除了将子模块作为对象添加到其所在的包中(如问题中发布的代码所示),您还需要将该模块添加到模块字典中:
PyObject *moduleDict = PyImport_GetModuleDict();
PyDict_SetItemString(moduleDict, "package.submodule", submoduleObject);