目前有 Pybind11 / Boost.Python / SWIG 这几个主流高效绑定方案的对比和推荐:
🔥 高效 C++ 到 Python 绑定工具推荐
| 工具 |
性能特点 |
编译速度 |
二进制大小 |
运行效率 |
易用性 |
是否推荐 |
| nanobind |
极速绑定库 |
✅ 快 |
✅ 小 |
✅ 高 |
⚠️ 中等 |
✅ 推荐 |
| cppyy |
JIT + Cling |
⚠️ 动态绑定 |
⚠️ 无编译 |
⚠️ 略慢 |
✅ 高 |
✅ 原型开发推荐 |
| litgen |
自动化绑定生成器 |
⚠️ 依赖 srcML |
✅ 自动生成 |
✅ 中等 |
✅ 高 |
✅ 自动生成推荐 |
| Cython (C++ 模式) |
混合语言 |
⚠️ 较慢 |
⚠️ 大 |
✅ 高 |
⚠️ 中等 |
⚠️ 一般 |
| SWIG |
跨语言绑定 |
⚠️ 较慢 |
⚠️ 大 |
⚠️ 中等 |
⚠️ 低 |
⚠️ 不推荐 |
| Boost.Python |
古老经典 |
❌ 很慢 |
❌ 很大 |
⚠️ 低 |
⚠️ 低 |
❌ 不推荐 |
🚀 推荐首选:nanobind
✅ 优势总结:
- 编译速度快:比 Pybind11 快 4x
- 二进制小:比 Pybind11 小 5x
- 运行效率高:比 Pybind11 快 10x
- 零依赖:仅需 Python 和 C++17 编译器
- 支持 STL 容器:vector、map、tuple 等
- 支持 NumPy 数组:nb::ndarray
- 支持类型标注:.pyi 文件生成(stubgen)
🧩 示例代码:
cpp
复制代码
#include <nanobind/nanobind.h>
struct Dog {
std::string name;
void bark() { printf("%s barks!\n", name.c_str()); }
};
NB_MODULE(example, m) {
nb::class_<Dog>(m, "Dog")
.def(nb::init<>())
.def_rw("name", &Dog::name)
.def("bark", &Dog::bark);
}
🛠 构建方式:
bash
复制代码
mkdir build && cd build
cmake ..
make
🧪 替代选择:cppyy
✅ 优势总结:
- 无需编译绑定代码
- 动态加载 C++ 头文件
- 适合快速原型开发
- 支持 PyPy
🧩 示例代码(Python):
python
复制代码
import cppyy
cppyy.include("dog.h")
d = cppyy.gbl.Dog()
d.name = "Buddy"
d.bark()
⚠️ 注意事项:
- 使用 Cling/LLVM,部署环境需要安装额外依赖
- 对模板支持良好,但运行时性能略低于 nanobind
- 不适合生产环境中的静态绑定
🧱 自动绑定生成:litgen
✅ 优势总结:
- 自动从 C++ 头文件生成 Python 绑定
- 支持 Pybind11 和 nanobind
- 文档自动生成(docstring)
- 基于 srcML 解析器
🧩 示例流程:
- 写一个 C++ 函数:
cpp
复制代码
// math.h
int square(int x);
- 使用 litgen 生成绑定代码:
bash
复制代码
litgen -i math.h -o bindings.cpp --pybind11 false --nanobind true
- 编译并导入:
bash
复制代码
g++ -shared -fPIC bindings.cpp -o _math.so
- Python 中使用:
python
复制代码
import math
print(math.square(4)) # 输出 16
📦 总结:根据你的需求选工具
| 场景 |
推荐工具 |
说明 |
| 高性能嵌入式项目 |
nanobind |
最佳选择,轻量高效 |
| 快速原型开发 |
cppyy |
零编译,动态调用 |
| 大量结构体自动绑定 |
litgen + nanobind |
自动生成绑定代码 |
| 跨语言调用 |
SWIG |
支持多语言,但性能一般 |
| 旧项目维护 |
Pybind11 |
社区活跃,文档丰富 |
| Windows/.NET 项目 |
C++/CLI + Python.NET |
仅限 Windows 平台 |
✅ 如果你正在做 CTP 接口绑定
建议采用以下组合:
| 工具 |
用途 |
nanobind |
主体绑定(结构体、函数) |
litgen |
自动提取结构体字段生成 .cpp 绑定代码 |
stubgen |
生成 .pyi 类型存根,提升 IDE 支持 |
推荐 swig和litgen,这是目前的主流方案,文档齐全