首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用C API创建Python包

使用C API创建Python包
EN

Stack Overflow用户
提问于 2020-11-03 11:45:33
回答 1查看 86关注 0票数 0

我有一个项目,它在C++中实现反射,以便自动生成Python绑定。目前,反射的所有内容都被添加到Python中的单个模块中。但是,我希望能够创建一个Python包,这样我就可以做像import MyProject.Submodule这样的事情,以避免在添加新类型时污染单个名称空间。

但是,使用the existing embedding/extending guide in Python,我只能创建单独的模块。

我已经能够做这样的事情:

代码语言:javascript
运行
复制
// 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中定义的包一致的包?

EN

回答 1

Stack Overflow用户

发布于 2020-11-15 02:44:22

通过查看os.py如何创建其子模块,我设法自己弄清楚了这一点。

除了将子模块作为对象添加到它所在的包中,正如问题中发布的代码所做的那样,您还需要将模块添加到模块字典:

代码语言:javascript
运行
复制
PyObject *moduleDict = PyImport_GetModuleDict();
PyDict_SetItemString(moduleDict, "package.submodule", submoduleObject);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64656536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档