结论:
-
首选PyBind11:综合性能、易用性最佳(GitHub⭐48k+)
-
优先考虑Cython :涉及大量科学计算或已有Cython代码
避免Boost.Python (历史包袱重)和SWIG(配置复杂),除非维护旧项目。
python调用C++接口

C++调用python接口
在C++中使用Python库,特别是使用pybind11
,是一个非常强大的方法,可以让你在C++项目中轻松地利用Python的强大功能和庞大的库。以下是如何使用pybind11
来调用Python库的步骤:
步骤 1: 安装 pybind11
首先,你需要安装pybind11
。可以通过pip安装Python包,并通过CMake在你的C++项目中包含它。
pip install pybind11
在你的C++项目中,确保你的CMakeLists.txt文件能够找到并链接pybind11
。
cmake_minimum_required(VERSION 3.4)
project(pybind11_example)
# 设置pybind11的路径
set(PYBIND11_PYTHON_VERSION 3.8) # 根据你的Python版本进行调整
find_package(pybind11 REQUIRED)
# 添加你的可执行文件或库
add_executable(example example.cpp)
target_link_libraries(example PRIVATE pybind11::module)
步骤 2: 编写C++代码来调用Python库
假设你想调用一个Python库,比如numpy
。首先,确保你的Python环境中已经安装了numpy
。
#include <pybind11/pybind11.h>
#include <pybind11/embed.h> // 包含嵌入Python解释器的头文件
#include <iostream>
namespace py = pybind11;
int main() {
// 初始化Python解释器(嵌入模式)
py::scoped_interpreter guard{};
// 导入numpy模块
py::module np = py::module_::import("numpy");
py::object array = np.attr("array");
// 创建一个numpy数组并使用它
py::object my_array = array({1, 2, 3, 4, 5});
std::cout << py::repr(my_array) << std::endl;
return 0;
}
步骤 3: 编译和运行你的程序
使用CMake构建你的项目。确保你的环境变量中包含了正确的Python路径,这样CMake才能找到Python解释器。
mkdir build
cd build
cmake ..
make
./example
注意事项:
-
Python版本兼容性 :确保你的C++代码中使用的Python版本与系统中安装的版本相匹配。在CMake中设置
PYBIND11_PYTHON_VERSION
可以帮助管理这一点。 -
环境变量 :在Windows上,你可能需要设置环境变量如
PYTHONHOME
和PATH
来正确找到Python解释器。在Linux或macOS上,通常CMake可以自动找到Python。 -
依赖管理:如果项目中依赖特定的Python包,确保这些包在运行C++程序的环境中可用。
通过上述步骤,你可以在C++项目中成功调用Python库,利用Python的强大功能。