pybind11是一个轻量级的仅头文件库,主要用于创建现有C++代码的Python绑定。
Github地址: https://github.com/pybind/pybind11
官方文档: https://pybind11.readthedocs.io/en/latest/basics.html
背景:在实际项目中使用该库的原因
1、CPU密集型函数由C++执行要优于python执行;
2、C++是编译型语言、Python是解释型语言故无法隐藏代码,核心代码由C++实现可以避免别人直接看到实现逻辑;
3、第三方SDK如果是C++提供的,可由pybind11进行封装提供给python调用。
1 pybind11编译安装
1、基础环境需要有python3、cmake
2、从github上下载pybind11源码,下载地址 https://github.com/pybind/pybind11
3、编译安装pybind11源码
mkdir build
cd build
cmake ..
cmake --build . --config Release
make -j4
make install
2 C++使用pybind11生成动态库
目录结构为:
1、新建src文件夹并在该文件夹下编写example.cpp
源文件。
#include <pybind11/pybind11.h>
#include <iostream>
#include <string>
std::string Hello() {
return "Hello, World";
}
PYBIND11_MODULE(example, m) {
m.doc() = "pybind11 example plugin"; // optional module docstring
m.def("Hello", &Hello, "A function which return Hello World");
}
2、编写CMakeLists.txt
文件
cmake_minimum_required(VERSION 2.8.12)
project(example)
find_package(pybind11 REQUIRED)
pybind11_add_module(example src/example.cpp)
3、编译生成动态库so文件
mkdir build
cd build
cmake ..
make
编译后的目录结构为:
在example.cpython-37m-x86_64-linux-gnu.so
同级目录下运行python3调用example库中的函数。