python - 使用 C API 创建 Python 包

标签 python c python-3.x

我有一个在 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/

相关文章:

Python Twisted Conch - 如何通过多个连接停止 react 器?

python - PhantomJS 和 Python : Kill current driver open new one error

python - python中的两个相邻列表

c - 特定 sockaddr_in 变量名出现意外编译错误

python - 如何在元组上使用 apply 属性

python - 名称错误 : name is not defined; a variable defined if a conditon is met

c - 如何修复 'Segmentation fault (core dumped)'

C - 无法释放 char** 指针内存 - 错误 _CrtIsValidHeapPointer

python - 对于相同大小的列表,为什么深复制比浅复制慢得多?

python - 分块读取大文件,分块压缩和写入