如何用c语言写python库_用C语音编写python的扩展模块,也就是python调c库

本文介绍了如何使用C语言扩展Python的功能,包括直接调用动态库、SWIG接口和编写Python扩展模块。作者以实例演示了如何为成熟C代码编写Python扩展包,以便在OpenStack源码中嵌入自定义控制逻辑的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.用C语言扩展Python的功能:

http://www.ibm.com/developerworks/cn/linux/l-pythc/

2.用C语言编写Python扩展模块:

http://hi.baidu.com/jinmu190/blog/item/c5475846eee39c056a63e5f1.html

http://blog.youkuaiyun.com/dengxu11/article/details/7393395

http://www.cnblogs.com/phinecos/archive/2010/05/23/1742344.html

我们知道python是一种很好的胶水语言,现在有个问题,如何让python 调用到c程序,

假如c程序已经是成熟的code.

方式有3种:

1.直接调用动态库

2.通过SWIG接口

前面2中方式参考: http://www.2cto.com/kf/201009/74906.html

3.为调用者python 写一个c的扩展包

需求:有一个POC的项目,需要在openstack的 源码里面加入我们自己的控制逻辑.openstack是

python 写的,我们自己的控制逻辑是个成熟的code,(大量的so), 我们需要在python code中调用

c code. 我们采用 方式3 为python写一个 扩展包,然后在python中调用 c code

例子:为say.c 编写一个 符合python 标准的扩展包

a. say.h 已经存在,里面有2个函数定义 sayhello, saybye

b. say.c 已经存在,里面实现了 say.h 中定义的方法

c. sayModule.c 是为 python 调用者写的 一个扩展包,最终会使用 distutils 编译成say.so

d. setUp.py,将c code 打包成 so :

[root@egovmo03 C]# python setup.py install

running install

running build

running build_ext

building 'say' extension

creating build

creating build/temp.linux-x86_64-2.4

gcc -pthread -fno-strict-aliasing -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fPIC -I/usr/include/python2.4 -c sayModule.c -o build/temp.linux-x86_64-2.4/sayModule.o

gcc -pthread -fno-strict-aliasing -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fPIC -I/usr/include/python2.4 -c say.c -o build/temp.linux-x86_64-2.4/say.o

creating build/lib.linux-x86_64-2.4

gcc -pthread -shared build/temp.linux-x86_64-2.4/sayModule.o build/temp.linux-x86_64-2.4/say.o -o build/lib.linux-x86_64-2.4/say.so

running install_lib

copying build/lib.linux-x86_64-2.4/say.so -> /usr/lib64/python2.4/site-packages

[root@egovmo03 C]#

测试:

[root@egovmo03 C]# python

Python 2.4.3 (#1, Jun 11 2009, 14:09:37)

[GCC 4.1.2 20080704 (Red Hat 4.1.2-44)] on linux2

Type "help", "copyright", "credits" or "license" for more information.

>>> import say

>>> dir(say)

['__doc__', '__file__', '__name__', 'bye', 'error', 'hello', 'say']   ->>> say 模块多了 hello 和 bye方法

>>> aa='xpxp'

>>> say.hello(aa);

hello, xpxp

>>> say.bye(aa);

bye, xpxp

>>>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值