Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用C API创建Python包 我有一个项目,它在C++中实现反射,以便自动生成Python绑定。目前,所有反映的内容都添加到Python中的单个模块中。但是,我希望能够创建一个Python包,这样我就可以像导入MyProject.Submodule这样做,以避免在添加新类型时污染单个名称空间_Python_C_Python 3.x - Fatal编程技术网

使用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);