我可以直接使用PyImport_ExecCodeModule生成一个模块对象。然而,我想要的是当它没有被执行时得到它。执行是关键,我不接受。实际上,我的最终目标是在执行模块之前使用pybind11将一些pybind11函数嵌入到python模块中。就像这样:
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代码。我该怎么办?
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", [](){});
......发布于 2022-10-31 06:39:41
使用PyImport_AddModule预先创建一个模块实例?
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));https://stackoverflow.com/questions/74259137
复制相似问题