使用 pybind11 通过预先存在的嵌入式 python 解释器公开 C++ 功能
Using pybind11 to expose C++ functionality with preexisting embedded python interpreter
我是第一次尝试这种类型的编码,因此请原谅我的知识不足。
要求:我有一个 C++ 代码,其中嵌入了 python 解释器,这样我就可以 import/use python 使用 C++ 使用 pybind11 的库。此外,我想包装这个完整的 C++ 代码(连同 python 解释器部分)并将其作为模块公开给 python。为清楚起见,请考虑以下示例:
**Main_code.cpp:**
#include <iostream>
#include <pybind11/embed.h> // everything needed for embedding
int main() {
pybind11::scoped_interpreter guard{}; // start the interpreter and keep it alive
pybind11::module sys = pybind11::module::import("sys");
pybind11::print(sys.attr("path"));
return 0;
}
我想将此代码公开给 python(比如作为名为 Cpp_func 的模块)并使用“import Cpp_func”在 py 脚本中导入“
”
到目前为止我尝试过的:
使用 pybind11,我可以设法扩展示例 cpp 代码,而无需将 python 解释器嵌入到 python。示例取自 pybind11 文档 https://pybind11.readthedocs.io/en/latest/basics.html 'Creating bindings for a simple function' 部分。但是当 python 解释器已经嵌入到 C++ 代码中时,我无法弄清楚如何做同样的事情。
希望我的要求很明确。对此的任何评论都将非常有帮助!
提前致谢!
scoped_interpreter_guard
只是 RAII wrapper 围绕 initialize_interpreter
和 finalize_interpreter
。您可以自己调用 finalize_interpreter
而不是 Py_Finalize
.
我是第一次尝试这种类型的编码,因此请原谅我的知识不足。
要求:我有一个 C++ 代码,其中嵌入了 python 解释器,这样我就可以 import/use python 使用 C++ 使用 pybind11 的库。此外,我想包装这个完整的 C++ 代码(连同 python 解释器部分)并将其作为模块公开给 python。为清楚起见,请考虑以下示例:
**Main_code.cpp:**
#include <iostream>
#include <pybind11/embed.h> // everything needed for embedding
int main() {
pybind11::scoped_interpreter guard{}; // start the interpreter and keep it alive
pybind11::module sys = pybind11::module::import("sys");
pybind11::print(sys.attr("path"));
return 0;
}
我想将此代码公开给 python(比如作为名为 Cpp_func 的模块)并使用“import Cpp_func”在 py 脚本中导入“
”到目前为止我尝试过的: 使用 pybind11,我可以设法扩展示例 cpp 代码,而无需将 python 解释器嵌入到 python。示例取自 pybind11 文档 https://pybind11.readthedocs.io/en/latest/basics.html 'Creating bindings for a simple function' 部分。但是当 python 解释器已经嵌入到 C++ 代码中时,我无法弄清楚如何做同样的事情。
希望我的要求很明确。对此的任何评论都将非常有帮助!
提前致谢!
scoped_interpreter_guard
只是 RAII wrapper 围绕 initialize_interpreter
和 finalize_interpreter
。您可以自己调用 finalize_interpreter
而不是 Py_Finalize
.