背景
有时需要python调用cpp编写的函数(比如做一些高性能计算),这时可以考虑使用pybind11来对你的cpp代码封装成库方便python调用.
使用方法
- 安装pybind11
python -m pip install pybind11
- 链接cpp
最好的教程自然是官方的,入门请看链接
如果你需要使用cmake来集成,可以用下面的方式集成
find_package(pybind11 CONFIG REQUIRED)
# Create an extension module
add_library(mylib MODULE main.cpp)
target_link_libraries(mylib PUBLIC pybind11::module)
# Or embed the Python interpreter into an executable
add_executable(myexe main.cpp)
target_link_libraries(myexe PUBLIC pybind11::embed)
当然,有时我们的安装位置cmake找不到,可以用下面命令来指定pybind11包的查找路径.
python3.8 -m pybind11 --cmakedir
# /home/lyy/.local/lib/python3.8/site-packages/pybind11/share/cmake/pybind11
ls /home/lyy/.local/lib/python3.8/site-packages/pybind11/share/cmake/pybind11
# FindPythonLibsNew.cmake pybind11Common.cmake pybind11Config.cmake pybind11ConfigVersion.cmake pybind11NewTools.cmake pybind11Targets.cmake pybind11Tools.cmake
可以看到pybind11的cmake安装路径并不是cmake默认的查找路径,pybind11Config.cmake中有这么几行:
``pybind11_DIR``
CMake variable, set to directory containing this Config file.
所以可以在cmakelists中添加下面一行来指定查找路径
set(pybind11_DIR /home/lyy/.local/lib/python3.8/site-packages/pybind11/share/cmake/pybind11)
接下来再去find_package就不会有问题了.
pybind11对opencv的支持
github有个仓库pybind11_opencv_numpy, 作者定义了一个ndarray_converter来让cpp代码与python共享一个numpy数据,速度还是很快的.