当前位置: 首页
编程语言
C++语言使用Boost.Python编写Python扩展从入门到精通完整教程

C++语言使用Boost.Python编写Python扩展从入门到精通完整教程

热心网友 时间:2026-06-20
转载

使用Boost Python可将C++代码封装为Python扩展模块。在Ubuntu中通过apt-get安装相关库,编写少量胶水代码即可实现C++类与Python的无缝交互,示例展示了HelloWorld类的构造与打印方法,简化跨语言开发流程。

很久没有更新文章了,今天把近期使用C++封装Python扩展模块的经验做一个系统整理。在实际开发中,经常需要将C++代码包装成Python模块,经过多种方案对比,最终还是觉得boost.python最为顺手。不过网上许多教程描述不够清晰,新手特别容易掉进各种坑里。这里分享一个成功的实战案例,并详细解析那些容易让人困惑的细节,帮助你快速掌握C++编写Python扩展的技巧。

c python boost.python_C++使用boost.python编写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岁了

如果文章中仍有不足之处,欢迎指出,我会尽快修正,感谢你的阅读。

来源:https://blog.csdn.net/weixin_39541869/article/details/110377032

游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

同类文章
更多
Kafka与CentOS其他服务协同配置指南

Kafka与CentOS其他服务协同配置指南

Kafka在CentOS生态中作为数据流通中枢,与EFK日志收集、HDFS存储、HBase、Prometheus+Grafana监控及SparkStreaming流处理系统协同,通过生产者-消费者模式构建实时数据管道,实现解耦、削峰填谷与高效集成。

时间:2026-07-12 06:52
如何使用deluser命令重命名用户的详细操作指南

如何使用deluser命令重命名用户的详细操作指南

在Linux系统管理中,重命名用户需通过删除旧用户并创建新用户实现。操作包括备份数据、用rsync迁移文件、更改文件所有权、删除旧用户及家目录,最后重新登录验证。不同发行版命令略有差异,建议在测试环境演练。

时间:2026-07-12 06:52
详细CentOS系统中C++配置常见问题及解决方法大全

详细CentOS系统中C++配置常见问题及解决方法大全

CentOS配置C++常见问题包括编译器缺失或版本过旧、环境变量错误、依赖库开发包未装、多版本冲突、权限路径问题、内存不足及内核参数不当。需正确安装gcc-c++及devel包,配置PATH与库路径,使用devtoolset或alternatives管理版本,调整权限与ulimit、sysctl参数。

时间:2026-07-12 06:52
CentOS C++环境变量配置方法

CentOS C++环境变量配置方法

在CentOS系统配置C++编译器需设置路径和动态库路径。先验证g++是否已安装,否则使用sudoyuminstallgcc-c++安装。通过whichg++找到安装路径后,在~ bashrc中添加exportPATH=$PATH:该路径并执行source使之生效。动态库路径可用find命令查找后类似加入LD_LIBRARY_PATH。最后用g++编译测试

时间:2026-07-12 06:52
CentOS中C++配置文件位置与路径完整说明

CentOS中C++配置文件位置与路径完整说明

CentOS中C++配置文件包括系统级全局配置( etc profile、 etc bashrc)影响所有用户,用户级配置(~ bashrc)仅影响当前用户,以及第三方库路径和构建工具CMakeLists txt。这些文件共同设置环境变量、库路径及编译选项等详细参数,用于管理相关开发环境。

时间:2026-07-12 06:52
热门专题
更多
刀塔传奇破解版无限钻石下载大全 刀塔传奇破解版无限钻石下载大全
洛克王国正式正版手游下载安装大全 洛克王国正式正版手游下载安装大全
思美人手游下载专区 思美人手游下载专区
好玩的阿拉德之怒游戏下载合集 好玩的阿拉德之怒游戏下载合集
不思议迷宫手游下载合集 不思议迷宫手游下载合集
百宝袋汉化组游戏最新合集 百宝袋汉化组游戏最新合集
jsk游戏合集30款游戏大全 jsk游戏合集30款游戏大全
宾果消消消原版下载大全 宾果消消消原版下载大全
  • 热门数据榜