将 Python3 + 依赖项嵌入到 C++ 二进制文件中

Embed Python3 + Dependencies into C++ Binary

我在 linux 2.6 上有一个应用程序 运行ning,它实际上控制着一个机器人。我已经编写了一个 c++ 基础结构和 API 以允许用户用 c++ 为机器人编写一个 "Mainloop"。函数签名是 RobotRunLoop(const Robot &robot)。机器人 class 提供所有需要的 API。当前系统在编译时设置环境,然后调用 RobotRunLoop。我希望能够在 python 而不是 c++ 中编写 "mainloop"。所以基本上是 c++ 启动,调用 python 主循环,然后它将使用提供的 api 回调到 c++ 来控制机器人。

我想我可以在 python 中使用类似的机器人对象创建一个类似的 RobotRunLoop,其中包含到 c++ api 的钩子。我希望能够将其编译成二进制文件,然后我可以在机器人上 运行 与纯 C++ 版本相同。

这样做的动机是能够以实验方式更轻松地试验机器学习模型和方法。在 C++ 基础设施上获得一些东西 运行 TensorFlow 或类似的包将是最终目标

这可能吗?如果 python 代码使用了其他包怎么办?我是使用 cython 还是 pybind11(似乎都不能满足我的要求)?

感谢帮助

您可以这样做,请参阅有关 extending and embedding. But the more "standard" approach would to extend Python, not embed it 的 Python 文档。

您将创建一个 Python 模块(使用 python-specific C API 编译一个共享对象)来包装您的机器人 class。我会考虑使用 pybind11 or swig 来帮助解决这个问题。您可以 运行 您的 C++ 初始化代码,可以在加载模块时或(更好)在创建 class 的实例时进行。