python和C++相互调用使用

结论

  • 首选PyBind11:综合性能、易用性最佳(GitHub⭐48k+)

  • 优先考虑Cython :涉及大量科学计算或已有Cython代码

    避免Boost.Python (历史包袱重)和SWIG(配置复杂),除非维护旧项目。

python调用C++接口

C++调用python接口

在C++中使用Python库,特别是使用pybind11,是一个非常强大的方法,可以让你在C++项目中轻松地利用Python的强大功能和庞大的库。以下是如何使用pybind11来调用Python库的步骤:

步骤 1: 安装 pybind11

首先,你需要安装pybind11。可以通过pip安装Python包,并通过CMake在你的C++项目中包含它。

pip install pybind11

在你的C++项目中,确保你的CMakeLists.txt文件能够找到并链接pybind11

cmake_minimum_required(VERSION 3.4)

project(pybind11_example)

# 设置pybind11的路径

set(PYBIND11_PYTHON_VERSION 3.8) # 根据你的Python版本进行调整

find_package(pybind11 REQUIRED)

# 添加你的可执行文件或库

add_executable(example example.cpp)

target_link_libraries(example PRIVATE pybind11::module)

步骤 2: 编写C++代码来调用Python库

假设你想调用一个Python库,比如numpy。首先,确保你的Python环境中已经安装了numpy

#include <pybind11/pybind11.h>

#include <pybind11/embed.h> // 包含嵌入Python解释器的头文件

#include <iostream>

namespace py = pybind11;

int main() {

// 初始化Python解释器(嵌入模式)

py::scoped_interpreter guard{};

// 导入numpy模块

py::module np = py::module_::import("numpy");

py::object array = np.attr("array");

// 创建一个numpy数组并使用它

py::object my_array = array({1, 2, 3, 4, 5});

std::cout << py::repr(my_array) << std::endl;

return 0;

}

步骤 3: 编译和运行你的程序

使用CMake构建你的项目。确保你的环境变量中包含了正确的Python路径,这样CMake才能找到Python解释器。

mkdir build

cd build

cmake ..

make

./example

注意事项:

  • Python版本兼容性 :确保你的C++代码中使用的Python版本与系统中安装的版本相匹配。在CMake中设置PYBIND11_PYTHON_VERSION可以帮助管理这一点。

  • 环境变量 :在Windows上,你可能需要设置环境变量如PYTHONHOMEPATH来正确找到Python解释器。在Linux或macOS上,通常CMake可以自动找到Python。

  • 依赖管理:如果项目中依赖特定的Python包,确保这些包在运行C++程序的环境中可用。

通过上述步骤,你可以在C++项目中成功调用Python库,利用Python的强大功能。

C++与Python高效融合:pybind11实战指南-CSDN博客

python调用C++库-CSDN博客

相关推荐
weixin_4407305016 分钟前
使用pytest中方法控制执行步骤(test_begin.py、test_end.py,@pytest.mark.run(order=1))
开发语言·python·pytest
库玛西20 分钟前
深入浅出Linux select网络模型:从底层位图原理到C++面向对象高级封装
linux·服务器·网络·c++·ubuntu
2402_8828938629 分钟前
深入浅出 unordered_map 与 unordered_set——从使用到底层差异
c++·哈希·unordered_map·unordered_set
geovindu44 分钟前
CSharp: Command Pattern
开发语言·后端·c#·.net·.netcore·命令模式·行为模式
今天要早睡_1 小时前
C++ 核心语法速过:命名空间、引用、函数重载与 nullptr 深度解析
android·java·c++
心易行者1 小时前
Python自动化测试7步落地法:用python在线运行省掉90%环境配置时间
java·开发语言·人工智能·python·log4j·ai编程
汉克老师1 小时前
CSP-J 初赛(以满分为目标):第二十七课 《图的遍历——BFS广度优先搜索——像“水波纹”一样,一层一层地搜索》
c++·csp-j·小学生·学c++编程
闻缺陷则喜何志丹2 小时前
【动态规划】P3609 [USACO17JAN] Hoof, Paper, Scissor G
c++·算法·动态规划·洛谷
tedcloud1232 小时前
OpenLogi 怎么搭建?用 Rust 打造一个轻量的 Logitech 外设管理工具
linux·运维·服务器·开发语言·后端·rust·开源
汉克老师2 小时前
CSP-J 初赛(以满分为目标):第二十六课 《图的遍历——DFS深度优先搜索——从“树的先序遍历”走进真正的图世界》
c++·csp-j·小学生·学c++编程