征服Python:语言基础与典型应用 --Python扩展和嵌入
来源:互联网 发布:c语言玫瑰花束编程 编辑:程序博客网 时间:2024/05/29 19:17
由于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 <python.h>
#include <windows.h>
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扩展
- 征服Python:语言基础与典型应用 --Python扩展和嵌入
- 征服Python:语言基础与典型应用
- 征服Python—语言基础与典型应用
- C++扩展和嵌入Python应用
- Python扩展和嵌入
- python扩展和嵌入
- python扩展和嵌入
- C++ 扩展和嵌入 Python
- C++ 扩展和嵌入 Python
- C++ 扩展和嵌入 Python
- C++ 扩展和嵌入 Python
- C++ 扩展和嵌入 Python
- C++ 扩展和嵌入 Python
- C++ 扩展和嵌入 Python
- C++ 扩展和嵌入 Python
- C++ 扩展和嵌入 Python
- C++ 扩展和嵌入 Python
- C++ 扩展和嵌入 Python
- 接口、抽象类、内部类
- flex+php的一个小教程
- spring学习
- 最全的网络推广方法
- 用C语言扩展Python的功能
- 征服Python:语言基础与典型应用 --Python扩展和嵌入
- Joomla!+Nginx+Memcached让网站飞的更快
- 函数指针
- 设计关闭Windows窗体
- 动态规划 模板
- C#制作WinForm控件
- 动车组&rdquo
- 运行比散步 - 哪个好?
- 如何设置ListCtrl控件每一行的背景色