推荐星级:
  • 1
  • 2
  • 3
  • 4
  • 5

Ubuntu系统中Python无缝调用C程序的实现

更新时间:2019-12-24 21:52:23 大小:5M 上传用户:songhuahua查看TA发布的资源 标签:ubuntu系统python 下载积分:1分 评价赚积分 (如何评价?) 打赏 收藏 评论(0) 举报

资料介绍

在实际的项目开发中,我们经常需要将Python和C两者结合起来编程,从而达到高效率的开发与运行的双赢局面。这就要求我们学会如何在python程序中调用C程序。本文的目标就是介绍在Ubuntu系统中,实现python调用C程序的具体方法与步骤。


部分文件列表

文件名 大小
Ubuntu系统中Python无缝调用C程序的实现.pdf 5M

部分页面预览

(完整内容请下载后查看)
·̴  
UbuntuPython缝调C序的实现  
Ṭ ᾶ  
(广东白云学院,广东 广州 510450)  
[摘 要]  
ҦῩ Ä  
˹ Ӥ  
ᶿ ʵ  
Ŀ
ῇ ѱ Ễ  
̿
Nwrf ml ʴ A  
Ϣ ʶ  
Ŀ
ټ
 
ڄ
 
ڙ
 ǥ  
Ӥ
ҕ
Ä
nwrf ml   
A  
Ä
˹
ҕ
Ϫ
S ` sl rs  
Ŀ  
nwrf ml  
A  
ҵ
۫
ۖ
[关键词] Nwrf ml ţ Aţ S ` sl rs  
中图分类号TP311.1  
文献标识码A  
文章编号1008 - 6609 (2018) 09 - 0036 - 03  
#include <stdio.h>  
int maxn(int a,int b)  
{return (a>b?a:b);}  
int main()  
1
引言  
随着人工智能数据计算统运维络爬虫等技术  
的兴起Python 作为目前最火的脚本语言其优雅单、  
功能强大发效率高平台等优点广泛应用于这些领  
域。C语言是一种编译型语言于高级和低级语言之间C  
程序的运行必须要经过编译后成机器码后再运行执  
行速度快不能跨平台前主要用于操作系统动等底  
层的开发。在实际开发中序员往往会把程序中的性能瓶  
颈部分的实现扩展的方式用 C 程序来完成业务逻辑  
部分的实现Python 这种高度集成合开发大型项目  
的程序设计语言来完成而扬长避短分发挥出两种语  
言的各自优势。  
{
printf( 2,30这两个数的最大值是%d\n,max(2,30));  
printf( 5,6这两个数的最大值是%d\n,max(5,6));  
return 0;  
}
2Ubuntu中的终端窗口使cd命令进入到桌面  
pythonexc文件夹后使gcc命令C源文件编译链接  
生成可执行文件后运行结果是否正在这步一定要  
保证所编C代码的正确性避免Python中调C的麻  
译及输出结果如下图 1 所示正确main 函数  
重命名为test 作为扩展模块main函数免同名  
冲突能进行下一步的操作。  
2
C语言扩Python的流程  
1C源代.c;  
2C源代码打包成库文件Python类型适配,  
创建包裹函.cC代码;  
3译与测试。  
1 gcc编译及运行后的输出结果  
3
具体实现步骤  
3.1 C程序功能源代码  
3写相应的 MaxRun.h 头文件定义的两个函数  
maxn test 封装到该头文件里包裹模块中需要调用它,  
代码如下:  
1先进入 Ubuntu 系统里选择在桌面下建一  
个文件夹 pythonexc(以下创建的所有文件/夹都存放在该文  
件夹中方便管理该文件夹中创建一个名MaxRun.  
c 的源文件现定义一个求两数最大值的函数 maxn在  
主函main中调maxn这个函数。具体代码如下:  
#ifndef MaxRun_H_  
#define MaxRun_H_  
int maxn(int a,int b);  
—————————————  
作者简介: Ĺ / 755+ĺ ĿĿẙ ᴫ ἠ Ŀ Ŀ  
͆
Ŀ
҂
۫
~  
Ӥ
~ᶣ Ȏ  
Ä  
- 36 -  
·̴  
int test(void)  
#endif;  
3.2 创建包裹模块装编写好C代码  
包裹模块是 C 源代码与 Python 解释器之间进行交互的  
桥梁。PythonC就是通过这个模块成无缝适配的。在  
刚建好的 pythonexc 件夹中 建一个名字为 MaxRun-  
Wrapper.c 的源文件MaxRun.c 的包裹模块。包裹模块  
的代码从上到下主要分为四部分:  
3 函数声明数组的定义及格式说明  
第四部分数的初始化声明。  
初始化声明中的代码在包裹模块python导入时进  
行调用成初始C模块以及这个模块所包含的函数的作  
用。初始化声明代码如下:  
第一部分代码Python.h等的头文件。  
Python.h 文件一般存放/usr/local/include/python2.x  
果没有可以在终端输入命令sudo apt-get install py-  
thon-devPython。在包裹函数的最上面加入如下四行  
C代码:  
void initMaxRun(void)  
{py_InitModule( MaxRun,MaxRunMethhods);}  
至此裹模块已经全部完成MaxRunWrapper.c  
文件中。  
#includePython.h”  
3.3 编译安装Python环境测试  
#include <stdlib.h>  
为了让 Python 的扩展能够被创建要把 C 源代码C  
源代码头文件裹模块文件放在一起编译Python库,  
以便在其它 Python 文件中引入这个 C 扩展。使用 Python 中  
distutils包来编译装和分发这些模块展和包。步骤  
如下:  
#include <string.h>  
#includeMaxRun.h”  
第二部分代码被包裹的 C 功能源代MaxRun中  
所写的每一个函maxn test加一个静态的 PyObject*  
Module_func()的包裹函数。  
1setup.py  
包裹函数的作用就是在 Python C 之间完成数据类型  
的转换。每个包裹函数的返回类型为 PyObject *裹函数  
的名字_函数名本例中应为两个函数命名为 Max-  
Run_maxnMaxRun_test应的包裹函数代码及功能说明  
2所示。  
Python 中是由 setup 函数完成编译为每一个扩展  
创建一个 Extension 实例们这里只有一个扩展。setup.py  
文件中的代码及相关参数说明如4所示。  
4 setup.py文件代码及相关参数说明  
2setup.py编译和连C的扩展代码  
Ubuntu 终端中执行如下命令python setup.py build。  
如果最终能生成一个*.so(这里是 MaxRun.so动态库文  
示编译成功。该文件会被存放在 pythonexc/bulid/lib.*  
目录下。  
2 包裹函数代码及功能说明  
第 三 部 分 为 模 块 增 加 一 个 PyMethodDef Module-  
Methods[]的函数声明数组。  
3Python中导入模块和测试  
Ubuntu终端中执行如下命令sudo python setup.py in-  
stall。安装我们的 setup.py 文件把生成的动态库文.so  
复制Ubuntu的公共库中后就可以import MaxRun命  
令导入该扩展模块的动态库文件。可以ipython中以交互  
的方式测试可以新建一个 python 文件import 命令导  
入该扩展模块可以无缝调C扩展模块中的函数了。  
以新建一个 pytest.py 文件为例其中导入 C 扩展模  
调用其中test函数码及输出效果如5所示。  
创建完包裹函数后要用函数声明数组的方式C  
功能源代码中定义的函数与对应的包裹函数一一列举在数  
组中便 Python 解释器能够导入并调用这些函数后的  
两个 NULL 表示函数声明结束。函数声明数组代码及格式  
说明如3所示。  
- 37 -  

全部评论(0)

暂无评论

上传资源 上传优质资源有赏金

  • 打赏
  • 30日榜单

推荐下载