千家信息网

Python怎么调用C++通过Pybind11制作Python接口

发表于:2025-11-13 作者:千家信息网编辑
千家信息网最后更新 2025年11月13日,本文小编为大家详细介绍"Python怎么调用C++通过Pybind11制作Python接口",内容详细,步骤清晰,细节处理妥当,希望这篇"Python怎么调用C++通过Pybind11制作Python
千家信息网最后更新 2025年11月13日Python怎么调用C++通过Pybind11制作Python接口

本文小编为大家详细介绍"Python怎么调用C++通过Pybind11制作Python接口",内容详细,步骤清晰,细节处理妥当,希望这篇"Python怎么调用C++通过Pybind11制作Python接口"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

1. pybind11简介与环境安装

pybind11是一个轻量级的只包含头文件的库,它主要是用来在已有的 C++代码的基础上做扩展,它的语法和目标非常像Boost.Python,但Boost.Python为了兼容现有的基本所有的C++编译器而变得非常复杂和庞大,而因此付出的代价是很多晦涩的模板技巧以及很多不必要的对旧版编译器的支持。Pybind11摒弃了这些支持,它只支持python2.7以上以及C++ 11以上的编译器,使得它比Boost.Python更加简洁高效。

为了使用pybind11,我们需要支持C++ 11标准的编译器(GCC 4.8以上,VS 2015 Update 3以上)以及python 2.7以上的版本,还需要下载CMake,有了这些以后,

  1. 首先,我们从 pybind11 github网址上下载源码。

  2. cmake工程之前,要先安装pytest pip install pytest,否则会出错

  3. 用CMake编译并运行测试用例:

进入pybind11的目录,cd testscmake ..cmake --build . --config Release --target check

如果所有测试用例都通过了,说明安装成功了。

2. python调用C++

下载编译好pybind11之后,我们就可以开始对着官方的pybind11 Tutorial进行学习了,详细的入门教程及语法请参考官方文档,这里,我们简单演示下如何编写供python调用的C++模块.
首先,我们编写一个C++源文件,命名为example.cpp

#include namespace py = pybind11;int add(int i, int j){ return i + j;}PYBIND11_MODULE(example, m){ // optional module docstring m.doc() = "pybind11 example plugin"; // expose add function, and add keyword arguments and default arguments m.def("add", &add, "A function which adds two numbers", py::arg("i")=1, py::arg("j")=2); // exporting variables m.attr("the_answer") = 42; py::object world = py::cast("World"); m.attr("what") = world;}

2.1 使用window编译

我没有实验,所以可以参考别的教程

2.2 CMake的编译方法

当然,我们也可以使用CMake进行编译。首先写一个CMakeLists.txt

cmake_minimum_required(VERSION 2.8.12)project(example) add_subdirectory(pybind11)pybind11_add_module(example example.cpp)

这里要求example.cpp放在和pybind11同一级的目录下,因为我们在CMakeLists.txt中调用了同目录pybind11和同目录的example.cpp文件。在当前目录下执行

cmake .make

会生成example.cpython-36m-x86_64-linux-gnu.so文件。这个文件就是python可以调用的文件。还是在相同目录下运行python,进入python命令行

import exampleexample.add(3, 4)[out]: 7

3、中级调用

上面是一个简单的例子,有时我们需要的功能可能很复杂。

生成模型设计库调用问题。

比如你的cpp文件中引用了其他的第三方库,这个时候我们生成的so文件,可能是需要依赖第三方库的。

本地myopencv.cpp文件

#include #include #include #include #include namespace py = pybind11;void read_img(std::string img_path){ cv::Mat image = cv::imread(img_path, CV_LOAD_IMAGE_COLOR);}PYBIND11_MODULE(myopencv, m){ m.def("read_img", &read_img, "get image size");}

CMakeLists.txt可以写成下面这样

cmake_minimum_required(VERSION 2.8.12)project(myopencv)add_subdirectory(pybind11)pybind11_add_module(myopencv myopencv.cpp)

通过cmkae编译通过

cmake .make

产生myopencv.cpython-36m-x86_64-linux-gnu.so文件
在python中调用

import myopencv

读到这里,这篇"Python怎么调用C++通过Pybind11制作Python接口"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。

C++ 编译 文件 目录 编译器 支持 接口 制作 文章 生成 复杂 内容 官方 教程 第三方 语法 参考 学习 测试 运行 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 ark服务器管理工具在哪下 成都宠物网络技术 2021网络安全手抄报简单 应用软件开发密钥 教育部初中生网络安全 数据库怎么建立索引和视图 网信办乡镇网络安全小结 宁波镇海区浪潮刀片服务器 国家网络安全工作的要求 现代化的信息网络技术智能化 维护网络安全我们任重道远 iphone网络安全性设置 自己开服务器地址 小型公司服务器需要多大 网络安全工作三定方案是指 核心业务数据库平台 惠普打印机的服务器是什么 电池放电数据库结构 thinkphp数据库配置文件 富拉尔基区全明软件开发工作室 公交网络安全自查报告范文 网络安全 存在 问题 管理型软件开发个人发展规划 南瑞水利水电工软件开发招聘 邮件服务器安全协议 崩坏三全平台服务器什么时候开的 河北什么是软件开发质量保障 计算机网络技术规划评估调整 互联网算不算高科技 网络安全的画画图片
0