欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

在 Ubuntu 上使用 Pybind11 调用 Python 接口的 C++ 示例。

最编程 2024-07-15 09:25:55
...

Pybind11 是一个轻量级的库,它提供了在 C++ 中无缝集成 Python 代码的能力。使用 Pybind11,你可以很容易地从 C++ 调用 Python 代码,反之亦然。下面我将通过一个简单的例子来展示如何在 Ubuntu 系统上使用 Pybind11 从 C++ 调用 Python 接口。

安装 Pybind11

首先,确保你的系统已经安装了 Python 和 C++ 编译器。接下来,你可以通过 pip 安装 Pybind11:

pip3 install pybind11

或者,你可以从源代码安装 Pybind11,如果你需要更高级的自定义选项(推荐):

git clone https://github.com/pybind/pybind11.git
cd pybind11
mkdir build
cd build
cmake ..
make check -j 4
sudo make install

报错!!!

解决办法: 

pip3 install pytest

安装在标准路径:

 

示例:C++ 调用 Python 函数

假设我们有一个 Python 脚本 add_numbers.py,它包含一个简单的函数,如下所示:

add_numbers.py

def add_numbers(a, b):
    return a + b

CMakeLists.txt

# 设置 CMake 的最低版本要求和项目名称
cmake_minimum_required(VERSION 3.10)
project(Test)
cmake_policy(SET CMP0048 NEW) # 设置 CMake 策略

# 寻找必要的依赖包
find_package(PythonLibs 3.6 REQUIRED)
find_package(pybind11 REQUIRED)  # 在标准路径下,

include_directories(${PYTHON_INCLUDE_DIRS})
include_directories(${pybind11_INCLUDE_DIRS})

# 定义目标(可执行文件)和其依赖的库
add_executable(Test main.cpp)
target_link_libraries(Test ${PYTHON_LIBRARIES} pybind11::pybind11)

main.cpp

#include <pybind11/pybind11.h>
#include <pybind11/embed.h> // 使用 Pybind11 嵌入 Python 解释器

#include <iostream>
namespace py = pybind11;

int main() {
    py::scoped_interpreter guard{}; // 启动 Python 解释器

    // 注意修改路径以匹配你的实际环境
    py::module_ sys = py::module_::import("sys");
    sys.attr("path").attr("append")("/home/fairlee/Programs"); // 添加 Python 脚本所在目录

    py::module_ calc = py::module_::import("hello"); // 加载 Python 模块
    auto result = calc.attr("add_numbers")(9, 3.14).cast<double>(); // 调用函数并转换返回值为 double 类型

    std::cout << "The result is: " << result << std::endl;

    return 0;
}

编译成功后,你可以运行生成的可执行文件。C++ 程序将调用 Python 脚本中定义的加法函数,计算并打印出 9 + 3.14 的结果。

推荐阅读