频 道 直 达 - 新闻 - 培训 - 软件 - 教程 - 前沿 - 组网 - 系统应用 - 安全 - 编程 - 存储 - 操作系统 - 数据库 - 服务器 - 专题 - 产品 - 案例库 - 读书 - 博客 - BBS
51CTO.COM_中国最大的网络技术网站
找资料:

8.1.1 扩展概述

作者: 孙广磊 出处:人民邮电出版社  2007-10-16 12:58    砖    好    评论   进入论坛
阅读提示:《征服Python—语言基础与典型应用》第八章主要讲的是Python扩展和嵌入,本节介绍了扩展Python。

第8章  Python扩展和嵌入

由于Python是解释性的脚本语言,执行速度较慢。在某些需要提高脚本执行效率的情况下,可以考虑扩展Python,用C/C++来完成对效率要求高的部分。另外,由于Python功能强大,完全可以将其嵌入到C/C++中,以简化程序,减少代码。

8.1  扩展Python

Python提供了支持C/C++接口,可以方便地使用C/C++来扩展Python。用C/C++编写的Python扩展主要用于完成底层的系统操作,以及提高执行速度等。

8.1.1  扩展概述
Python提供了接口API,通过使用API函数可以编写Python扩展。在Windows下可以使用VC来编译Python扩展。在UNIX和Linux下则可以使用gcc来编译。

1.设置编程环境
使用VC时需要设置一些头文件以及库文件的包含目录。如果使用VC++ 6.0,则设置过程如下所示。
(1)单击【Tools】|【Options】命令,弹出如图8-1所示的对话框。
(2)单击【Directories】标签,选择【Show directories for】下拉列表框中的【Include files】项,将Python安装目录下的INCLUDE目录添加到【Directories】列表中,如图8-2所示。
(3)选择【Show directories for】下拉列表框中的【Library files】项,将Python安装目录下的LIBS目录添加到【Directories】列表中,如图8-3所示。
(4)单击【OK】按钮完成操作。
如果使用Visual Studio 2005,则设置过程如下所示。
(1)单击【工具】|【选项】命令,弹出如图8-4所示的对话框。
(2)双击左侧列表树中的【项目和解决方案】项,选择【VC++目录】项,如图8-5所示。
(3)选择【显示以下内容的目录】下拉列表框中的【包含文件】项,将Python安装目录下的include目录添加到列表中,如图8-6所示。

图8-1  Options对话框

图8-2  添加头文件

 图8-3  添加库文件

图8-4  选项对话框
  
图8-5  设置VC++目录

图8-6  添加头文件
        
(4)选择【显示以下内容的目录】下拉列表框中的【库文件】项,将Python安装目录下的libs目录添加到列表中,如图8-7所示。
(5)单击【确定】按钮完成操作。
图8-7  添加库文件
 
2.创建工程
在Visual C++ 6.0中创建Python扩展过程如下所示。
(1)单击【File】|【New】命令,弹出创建工程对话框。单击【Projects】标签,选择左侧列表中的【Win32 Dynamic-Link Library】项,在【Project name】文本框中输入工程名“myext”,如图8-8所示。
(2)单击【OK】按钮,弹出如图8-9所示的工程设置对话框。选中【An empty DLL project.】单选框。
图8-8  创建工程对话框
 
图8-9  工程设置对话框

(3)单击【Finish】按钮弹出如图8-10所示的确认对话框。单击【OK】按钮完成工程创建。
(4)单击【File】|【New】命令弹出创建文件对话框,单击【Files】标签。选择左侧列表中的【C++ Source File】项,在【File】文本框中输入文件名“myext.c”,如图8-11所示。
图8-10  确认对话框  
图8-11  添加文件
 

(5)单击【OK】按钮,在“myext.c”中添加如下内容。
    #include  
#include
PyObject *show(PyObject *self, PyObject *args)
{
char *message;
const char *title = NULL;
HWND hwnd = NULL;
int r;
if (!PyArg_ParseTuple(args, "iss", &hwnd, &message, &title))
return NULL;
r = MessageBox(hwnd,message, title, MB_OK);
return Py_BuildValue("i", r);
}
static PyMethodDef myextMethods[] =
{
{"show", show, METH_VARARGS,"show a messagebox"},
{NULL,NULL}
};
PyMODINIT_FUNC initmyext()
{
PyObject *mod;
mod = Py_InitModule("myext",myextMethods);
}

(6)单击【Project】|【Settings】命令,弹出如图8-12所示的工程设置对话框。
(7)选择【Settings For】下拉列表框中的【Win32 Release】项。单击【Link】标签,将【Outpub file name】文本框中的“Release/myext.dll”改为“Release/myext.pyd”,如图8-13所示。
图8-12  工程设置对话框
  图8-13  设置Link选项
 

(8)单击【C/C++】标签,选择【Category】下拉列表框中的【Code Generation】项,选择【Use run-time library】下拉列表框中的【Multithreaded DLL】项,如图8-14所示。
(9)单击【OK】按钮完成工程设置。
(10)单击【Build】|【Batch Build】命令,弹出如图8-15所示的对话框,将【myext-Win32 Debug】单选框前的勾去掉。单击【Build】按钮生成Python扩展。
图8-14  设置C/C++选项
图8-15  编译工程

编译完成后将在工程目录下的Release目录中生成“myext.pyd”文件,其为所编写的Python扩展。编写“usemyext.py”调用“myext.pyd”中的函数。代码如下所示。
    # -*- coding:utf-8 -*-
# file: usemyext.py
#
import myext           # 导入myext模块
print myext.show(0, 'Extend Python', 'Python')  # 调用show函数

脚本运行后如图8-16所示。
由于Python官方的安装程序中不包含debug版的库文件,不能生成debug版的Python扩展,因此上述设置都是针对release版。如果需要生成debug版的Python扩展,则需要自己编译Python生成debug版的库文件。另外,使用Visual Studio 2005编译Python扩展与上述过程类似,这里不再赘述。

图8-16  使用Python扩展

【责任编辑:杜书 TEL:(010)68476606】

回书目   上一节   下一节
专题
Windows Home Server 家用服务器专题
Linux——从菜鸟到高手
C++是垃圾语言?!
VC++基础开发专题
Windows Server 2008专题
我也说两句

匿名发表

(如果看不清请点击图片进行更换)


中 国 最 大 的 网 络 技 术 网 站 ·
技 术 成 就 梦 想
订阅技术快讯
电子杂志下载
名称:SQL Server数据库管理精品黄皮书
简介:书中文章经过精挑细选,便于用户能根据自己的实际工作和学习,快速在本书寻找到相关资料。内容涵盖了SQL Server的安装与升级、语句查询、数据备份和恢复、自动化任务、数据同步、数据字典、安全和预防、性能和优化、集群等各方面应用信息,以及DBA管理人员在数据库管理工作中
名称:2007路由技术大全
简介:《2007路由技术大全》由51CTO.com网站特别策划制作,该书包括路由器技术、路由器产品、路由器配置、安全设置、路由器故障处理、路由器密码恢复,以及广大网友在实践使用中的心得经验和技巧文章,内容注重实用性,适用于初学者入门,也适合多年从业者提高,是一本实践和理论完
名称:网络安全精品应用黄皮书
简介:《2007精品网络安全黄皮书》包括了9个大类24个小类, 800余篇文章,内容包含了熊猫烧香病毒、DDOS攻击、ARP病等热点问题的介绍及解决方案。从病毒查杀、防范、系统、数据等各方面的安全设置到黑客技术的了解、防范,涉及到了安全应用的全部领域, 由浅至深内容全面。
浏览器的战国时代
浏览器的战国时代
ARP攻击防范与解决方案
ARP攻击防范与解决方案
NAC安全访问控制
NAC安全访问控制
· NAC安全访问控制
· 网络布线测试仪器
· Windows Server 2008专..
· Windows远程桌面应用
· 网络故障排除宝典
· 运营商封堵ADSL共享 中..
· 解析35岁技术人的价值..
· 世纪枭雄比尔盖茨的王..
· 主流品牌防火墙配置
· ASP.NET开发教程
· 超级计算机TOP500专题
· Vista SP1对决XP SP3
· SQL Server 2008/2005..
· 程序员如何成长?
· C#技术开发指南
· 虚拟化技术还有点“虚”
ARP攻击防范与解决方案
ARP攻击防范与解决方案
SQL Server 2008/2005全解
SQL Server 2008/2005全解
SOA 面向服务架构
SOA 面向服务架构
· SOA 面向服务架构
· SQL Server 2008/2005..
· Apache技术专题
· 三层交换技术专题
· SQL Server入门到精通
· Windows远程桌面应用
· C#技术开发指南
· Apache技术专题
· Windows集群服务应用
· C#技术开发指南
· 国际文档格式标准开战
· 路由器设置与口令恢复
· Linux 集群技术专题
· PHP开发应用手册
· SOA 面向服务架构
· 企业数据恢复指南
ARP攻击防范与解决方案
ARP攻击防范与解决方案
SQL Server 2008/2005全解
SQL Server 2008/2005全解
SQL Server入门到精通
SQL Server入门到精通
· SQL Server入门到精通
· SQL Server 2008/2005..
· SOA 面向服务架构
· Apache技术专题
· C#技术开发指南
· 三层交换技术专题
· Apache技术专题
· C#技术开发指南
· Windows远程桌面应用
· 企业数据恢复指南
· Windows集群服务应用
· 路由器设置与口令恢复
· Linux 集群技术专题
· SOA 面向服务架构
· 了解统一威胁管理(UTM)..
· 反垃圾邮件技术应用