【问题标题】:Create Python package using C API使用 C API 创建 Python 包
【发布时间】:2020-11-03 03:45:33
【问题描述】:

我有一个在 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 定义的包一致的包?

【问题讨论】:

    标签: python c python-3.x


    【解决方案1】:

    通过查看os.py 如何处理创建其子模块,我设法自己解决了这个问题。

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

    PyObject *moduleDict = PyImport_GetModuleDict();
    PyDict_SetItemString(moduleDict, "package.submodule", submoduleObject);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-19
      • 2012-01-09
      • 2011-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-20
      相关资源
      最近更新 更多