C++语言使用Boost.Python编写Python扩展从入门到精通完整教程
使用Boost Python可将C++代码封装为Python扩展模块。在Ubuntu中通过apt-get安装相关库,编写少量胶水代码即可实现C++类与Python的无缝交互,示例展示了HelloWorld类的构造与打印方法,简化跨语言开发流程。
很久没有更新文章了,今天把近期使用C++封装Python扩展模块的经验做一个系统整理。在实际开发中,经常需要将C++代码包装成Python模块,经过多种方案对比,最终还是觉得boost.python最为顺手。不过网上许多教程描述不够清晰,新手特别容易掉进各种坑里。这里分享一个成功的实战案例,并详细解析那些容易让人困惑的细节,帮助你快速掌握C++编写Python扩展的技巧。

boost.python入门
概述与优势
用C++编写Python扩展模块有多种实现方式,选择boost.python的原因在于它相对简洁,只需编写少量胶水代码,就能把更多精力集中在C++核心逻辑上。关于boost.python的具体背景这里不再展开,感兴趣的朋友可以自行搜索了解更多。
安装方法
这里主要介绍Ubuntu系统下的安装方式:
sudo apt-get install libboost-all-dev
# 或者
sudo apt-get install libboost-python-dev
# 此方式未经验证,读者可自行尝试
通过源码安装也是可行的,但需要提前配置好环境变量,否则编译时容易出错。当然,你也可以在编译时直接指定所需的路径。
实例演示
C++ 代码详解
下面这个示例重点说明了容易混淆的地方,帮助你避开常见陷阱。
#include
#include
#include // 必须引入这个头文件
using namespace boost::python;
class HelloWorld {
public:
HelloWorld(const std::string& name, int age);
void printInfo();
private:
std::string m_name;
int m_age;
};
HelloWorld::HelloWorld(const std::string& name, int age) : m_name(name), m_age(age) {}
void HelloWorld::printInfo() {
std::cout << "我叫" << m_name << ", " << m_age << "岁了" << std::endl;
}
void ceshi() {
std::cout << "ceshi" << std::endl;
}
BOOST_PYTHON_MODULE(helloworld) {
// 类导出成Python可调用的动态链接库的方式
class_("helloworld", init())
.def("printinfo", &HelloWorld::printInfo);
// 普通函数导出成Python可调用的动态链接库的方式
def("ceshi", &ceshi);
}
编译命令说明
以下命令用于生成动态链接库,请根据实际环境调整参数。
# python3
g++ -shared -o helloworld.so -fPIC -I/usr/include/python3.6m/ helloworld.cpp -lpython3.6m -lboost_python3
# python2
g++ -shared -o helloworld.so -fPIC -I/usr/include/python2.7/ helloworld.cpp -lpython -lboost_python
参数含义解析
-shared:指示编译器生成动态链接库。-o:指定输出文件名称。-fPIC:生成位置无关代码,这是动态库必须的选项。-I(大写的i):将后面的目录添加到头文件搜索路径中。-l:指定要链接的库名称。
如果编译过程没有报错,当前目录下会生成一个名为helloworld.so的动态链接库文件。你可以直接在当前目录下进入Python Shell进行测试,也可以将该文件放入Python的site-packages目录,这样在任何位置都能导入使用。
测试验证
>>> import helloworld
>>> hw = helloworld.helloworld("lanyulei", 18)
>>> hw.printinfo()
我叫lanyulei, 18岁了
如果文章中仍有不足之处,欢迎指出,我会尽快修正,感谢你的阅读。
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
Kafka与CentOS其他服务协同配置指南
Kafka在CentOS生态中作为数据流通中枢,与EFK日志收集、HDFS存储、HBase、Prometheus+Grafana监控及SparkStreaming流处理系统协同,通过生产者-消费者模式构建实时数据管道,实现解耦、削峰填谷与高效集成。
如何使用deluser命令重命名用户的详细操作指南
在Linux系统管理中,重命名用户需通过删除旧用户并创建新用户实现。操作包括备份数据、用rsync迁移文件、更改文件所有权、删除旧用户及家目录,最后重新登录验证。不同发行版命令略有差异,建议在测试环境演练。
详细CentOS系统中C++配置常见问题及解决方法大全
CentOS配置C++常见问题包括编译器缺失或版本过旧、环境变量错误、依赖库开发包未装、多版本冲突、权限路径问题、内存不足及内核参数不当。需正确安装gcc-c++及devel包,配置PATH与库路径,使用devtoolset或alternatives管理版本,调整权限与ulimit、sysctl参数。
CentOS C++环境变量配置方法
在CentOS系统配置C++编译器需设置路径和动态库路径。先验证g++是否已安装,否则使用sudoyuminstallgcc-c++安装。通过whichg++找到安装路径后,在~ bashrc中添加exportPATH=$PATH:该路径并执行source使之生效。动态库路径可用find命令查找后类似加入LD_LIBRARY_PATH。最后用g++编译测试
CentOS中C++配置文件位置与路径完整说明
CentOS中C++配置文件包括系统级全局配置( etc profile、 etc bashrc)影响所有用户,用户级配置(~ bashrc)仅影响当前用户,以及第三方库路径和构建工具CMakeLists txt。这些文件共同设置环境变量、库路径及编译选项等详细参数,用于管理相关开发环境。
- 热门数据榜
相关攻略
2026-07-12 06:52
2026-07-12 06:52
2026-07-12 06:52
2026-07-12 06:52
2026-07-12 06:52
2026-07-12 06:51
2026-07-12 06:51
2026-07-12 06:51
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程

