1. 引言
在深度学习模型部署上经常需要用到python来处理C++推理后的模型后处理部分,那么就可以用到pybind11来对C++代码封装成动态库,方便python进行后处理操作
本验证demo的文件组成:
2.pybind11准备
首先安装一下对应包:
pip install pytest
然后,下载pybind11的源码:
git clone https://github.com/pybind/pybind11.git
进入下载好的pybind11目录中,依次执行cmake和make操作:
mkdir build
cd build
cmake ..
cmake --build . --config Release --target check
3. 准备c++代码
这里提供一个官方的简单代码example.cpp:
#include <pybind11/pybind11.h>
namespace py = pybind11;int add(int i, int j) {return i + j;
}int sub(int i, int j) {return i *j;
}PYBIND11_MODULE(example, m) {m.doc() = "pybind11 example plugin"; // optional module docstringm.def("add", &add, "A function which adds two numbers");m.def("sub", &sub, "A function which subtracts two numbers");
}
4.CMakeLists.txt 制作
cmake_minimum_required(VERSION 3.10)
project(example) add_subdirectory(pybind11) # 添加一个子目录并构建该子目录 ,子目录下应该包含cmakelist.txt和代码文件
pybind11_add_module(example example.cpp)# pybind11 文件夹是在当前目录下CMakeLists.txt下的pybind11源码,并且经过cmake和make操作
5.执行编译,生成动态库so文件
在example.py 同级目录下,执行下面操作
mkdir build
cd build
cmake ..
make
6. test.py 示例代码
import exampleresult_1 = example.add(3,4)
print(result_1)
result_2 = example.sub(3,4)
print (result_2)
7. 将build文件中example.xxxx.so文件移至主目录
就可以执行test.py
得到结果:7,12