首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python /API如何在不使用Py_CompileString的情况下从PyImport_ExecCodeModule编译的代码对象生成模块对象?

Python /API如何在不使用Py_CompileString的情况下从PyImport_ExecCodeModule编译的代码对象生成模块对象?
EN

Stack Overflow用户
提问于 2022-10-31 05:38:42
回答 1查看 20关注 0票数 0

我可以直接使用PyImport_ExecCodeModule生成一个模块对象。然而,我想要的是当它没有被执行时得到它。执行是关键,我不接受。实际上,我的最终目标是在执行模块之前使用pybind11将一些pybind11函数嵌入到python模块中。就像这样:

代码语言:javascript
复制
C/C++
const char *myCode="print('hello world')";
PyObject* codeObject=Py_CompileString(myCode, "", Py_file_input);
pybind11::module module=py::reinterpret_steal<pybind11::module>(PyImport_ExecCodeModule("1", codeObject);
module.def("func1", [](){});
module.def("func2", [](){});
......

现在,我希望"func1“和"func2”的定义在PyImport_ExecCodeModule前面,这样我就可以在python代码中调用"func1“和"func2”。

注意:我知道API“pybind11 11::exec”,但由于某种原因不能调用它。我必须获得一个模块对象,但不能执行python代码。我该怎么办?

代码语言:javascript
复制
C/C++
const char *myCode="print('hello world')";
PyObject* codeObject=Py_CompileString(myCode, "", Py_file_input);
pybind11::module module=py::reinterpret_steal<pybind11::module>(PyImport_ExecCodeModule("1", codeObject);
module.def("func1", [](){});
module.def("func2", [](){});
......
EN

回答 1

Stack Overflow用户

发布于 2022-10-31 06:39:41

使用PyImport_AddModule预先创建一个模块实例?

代码语言:javascript
复制
pybind11::module module = py::reinterpret_steal<pybind11::module>(PyImport_AddModule("1"));
module.def("func1", [](){});
module.def("func2", [](){});

const char *myCode = "print('hello world')";
// const char *myCode = "func1()";
PyObject* codeObject=Py_CompileString(myCode, "", Py_file_input);
module = py::reinterpret_steal<pybind11::module>(PyImport_ExecCodeModule("1", codeObject));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74259137

复制
相关文章

相似问题

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