python - 使用 pybind11 通过预先存在的嵌入式 python 解释器公开 C++ 功能
问题描述
我是第一次尝试这种类型的编码,因此请原谅我缺乏知识。
要求:我有一个 C++ 代码,其中嵌入了 python 解释器,以便我可以使用 pybind11 导入/使用带有 C++ 的 python 库。此外,我想对这个完整的 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 “为简单函数创建绑定”部分。但是当 python 解释器已经嵌入到 C++ 代码中时,我无法弄清楚如何做同样的事情。
希望我的要求很明确。对此的任何评论都会非常有帮助!
提前致谢!
解决方案
scoped_interpreter_guard
只是一个RAII 包装器initialize_interpreter
和. finalize_interpreter
您可以只调用finalize_interpreter
自己而不是Py_Finalize
.
推荐阅读
- vba - 带有 application.worksheetfunction 的数组上的不匹配错误
- node.js - image.onload 没有在 node.js 中触发
- autodesk-forge - 对 Forge/BIM360 Docs 文件列表进行分页的最佳方法是什么?
- .htaccess - 重定向到 SSL 和非 www
- excel - 如何使用 Oracle Forms 获取 Excel 文件的最后一行
- wordpress - 使用购买的产品的术语 ID 更新 ACF 字段 - WooCommerce
- python - 如何在多个进程之间共享全局列表变量?
- android - Android 和 Xamarin.Android 中的常见动画静态类不会停止动画
- java - 尽管清除它,实体中的列表对象仍返回到以前的状态
- autodesk-forge - 对 Forge/BIM360 Docs 文件列表进行排序的最佳方法是什么?