网站首页 > 技术文章 正文
有小伙伴很好奇,怎么样实现python调用C++接口?哈哈,手把手教程来了。
第一步:我们需要安装pybind11这个纯头文件的库,目前该库支持c++11及以上版本,在你的环境中通过命令行输入:
apt-get install python3-dev
apt-get install python3-pip
pip install pybind11
第二步:通过宏“PYBIND11_MODULE”,传入Python 模块名和 C++ 实例对象名的两个参数:
// pybind.cpp
#include <pybind11/pybind11.h> // pybind11的头文件
namespace py = pybind11; // 给pybind11命名空间名称用个简单的替换
PYBIND11_MODULE(pythondemo, m) // 定义Python模块,名称为pythondemo
{
m.def("info", // 定义模块pythondemo一个叫info的Python函数
[]() // lambda表达式
{
py::print("当前C++的版本是", __cplusplus); // pybind11自己的打印函数
}
);
m.def("add", // 定义模块pythondemo一个叫add的Python函数
[](int a, int b) // 有参数的lambda表达式
{
py::print("a = ", a, " b = ", b);
return a + b;
}
);
}
第三步:通过命令编译c++源码:
g++ pybind.cpp -std=c++11 -shared -fPIC `python3 -m pybind11 --includes` -o pythondemo`python3-config --extension-suffix`
这条命令之后会产生一个动态库:
pythondemo.cpython-310-x86_64-linux-gnu.so
对上面的这条命令做一下介绍:
g++ pybind.cpp :需要编译的源文件
-std=c++11 -shared -fPIC:编译成动态库
`python3 -m pybind11 --includes` :获得包含路径
-o pythondemo`python3-config --extension-suffix` :生成的动态库名字,pythondemo和C++代码中的模块名保持一致
第四步:写python代码,调用很方便的:
import pythondemo # 导入pybind11模块
pythondemo.info() # 调用C++写的函数
x = pythondemo.add(1,2) # 调用C++写的函数
print(x)
执行结果:
好了,现在环境都应该是可以了,我们下一期讲讲怎么通过class的方式被python调用,以及python如何调用C++常用的string,vector等标准容器。
猜你喜欢
- 2025-06-24 Python调用Docker API的使用方式(pycharm docker 调试)
- 2025-06-24 青少年Python编程系列28:Python中函数的递归调用
- 2025-06-24 python调用sqlite数据库案例(python 调用数据库)
- 2025-06-24 【Python机器学习系列】基于Flask来构建API调用机器学习模型服务
- 2025-06-24 Python编程调用Deepseek API创建智能体
- 2025-06-24 python多装饰器针对函数、类、方法的调用顺序说明
- 2025-06-24 Python Qt GUI设计:Python调用UI文件的两种方法(基础篇—3)
- 2025-06-24 Python | Django 外部脚本调用 models 数据库
- 2025-06-24 自学Python第九天——操作列表(python操作步骤)
- 2025-06-24 做Python开发时遇到需求实现,必须调用Java方法,可以这么做
- 06-24Python调用Docker API的使用方式(pycharm docker 调试)
- 06-24青少年Python编程系列28:Python中函数的递归调用
- 06-24python调用sqlite数据库案例(python 调用数据库)
- 06-24【Python机器学习系列】基于Flask来构建API调用机器学习模型服务
- 06-24通过pybind11来实现python调用C++接口(一)
- 06-24Python编程调用Deepseek API创建智能体
- 06-24python多装饰器针对函数、类、方法的调用顺序说明
- 06-24Python Qt GUI设计:Python调用UI文件的两种方法(基础篇—3)
- 270℃Python短文,Python中的嵌套条件语句(六)
- 268℃python笔记:for循环嵌套。end=""的作用,图形打印
- 266℃PythonNet:实现Python与.Net代码相互调用!
- 262℃Python实现字符串小写转大写并写入文件
- 261℃Python操作Sqlserver数据库(多库同时异步执行:增删改查)
- 121℃原来2025是完美的平方年,一起探索六种平方的算吧
- 101℃Python 和 JavaScript 终于联姻了!PythonMonkey 要火?
- 95℃Ollama v0.4.5-v0.4.7 更新集合:Ollama Python 库改进、新模型支持
- 最近发表
-
- Python调用Docker API的使用方式(pycharm docker 调试)
- 青少年Python编程系列28:Python中函数的递归调用
- python调用sqlite数据库案例(python 调用数据库)
- 【Python机器学习系列】基于Flask来构建API调用机器学习模型服务
- 通过pybind11来实现python调用C++接口(一)
- Python编程调用Deepseek API创建智能体
- python多装饰器针对函数、类、方法的调用顺序说明
- Python Qt GUI设计:Python调用UI文件的两种方法(基础篇—3)
- Python | Django 外部脚本调用 models 数据库
- 自学Python第九天——操作列表(python操作步骤)
- 标签列表
-
- python中类 (31)
- python 迭代 (34)
- python 小写 (35)
- python怎么输出 (33)
- python 日志 (35)
- python语音 (31)
- python 工程师 (34)
- python3 安装 (31)
- python音乐 (31)
- 安卓 python (32)
- python 小游戏 (32)
- python 安卓 (31)
- python聚类 (34)
- python向量 (31)
- python大全 (31)
- python次方 (33)
- python桌面 (32)
- python总结 (34)
- python浏览器 (32)
- python 请求 (32)
- python 前端 (32)
- python验证码 (33)
- python 题目 (32)
- python 文件写 (33)
- python中的用法 (32)