参考资料:
1.用C语言扩展Python的功能:
http://www.ibm.com/developerworks/cn/linux/l-pythc/
2.用C语言编写Python扩展模块:
http://hi.baidu.com/jinmu190/blog/item/c5475846eee39c056a63e5f1.html
3.怎样编写python脚本的C扩展模块
http://blog.csdn.net/dengxu11/article/details/7393395
4.使用C语言扩展Python
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
>>>
分享到:
相关推荐
myPydll 工程为扩展python库,生成文件myPydll.dll,将该文件拷贝到python解释器可搜索的路径下,如我的电脑就是“C:\Python26\DLLs”,并改后缀名为pyd。即文件myPydll.pyd。或者与当前测试的程序在同一目录,如...
用C语言扩展Python的功能
用python创建手写C扩展模块基本过程 编写接口代码主要分为四步: 1. 包含Python的头文件 2. 为每个模块的每一个函数增加一个型如PyObject* Module_func()的包装函数。 3. 为每个模块增加一个型如PyMethodDef ...
例如,你想在C语言中使用某个Python函数作为一个回调。 解决方案 在C语言中调用Python非常简单,不过涉及到一些小窍门。 下面的C代码告诉你怎样安全的调用: #include <Python> /* Execute func(x,y) in the ...
在现有的数据集上对语音数据进行分类,从而达到分类的目的,采用深度学习的方法分别利用cnn,rnn等网络结构对语音数据进行分类
使用Python爬去网页中的C语言题库,并解决Python爬去乱码的问题
python读取C语言头文件测试用例,参考博客,有详细说明 https://blog.csdn.net/li171049/article/details/126673510
离线网页资料,打开html文件即可查看VIP内容
系列Python扩展模块共3页.pdf.zip
本教程详细介绍如何用visuall studio2010编写c++功能模块去扩展python模块,教程中有详细的步骤,配有大量的笔者操作成功的截图,可以说是一站式操作。
为了实现Python版本的讯飞语音合成,官方只给出了C++版本的实现,于是我自己封装实现Python版本TTS部分。
使用C语言编写代码:在C语言中调用Python脚本需要使用到Python的C API。首先需要包含相关头文件,并初始化Python解释器。然后可以使用PyRun_SimpleString函数执行Python脚本,或者使用PyRun_SimpleFile函数执行指定...
用C语言扩展Python的功能.pdf
在make之前先用sudo apt install libboost-all-dev进行安装boost库依赖。注意在内存有限的嵌入式设备中,可以加入swap交换...使用make install可以将编译好的so文件加入到python库的搜索路径中,方便在任何地方使用。
基于深度学习的语音增强使用keras python
python的扩展模块,包括Echarts和词云的库,解压缩后直接引入项目就可以使用,可以生成词云图片
基于SiPESC平台的Python扩展模块开发.pdf
基于SiPESC平台的Python扩展模块开发
一份用C++扩展Python的源代码。例子虽然简单,但却有启发意义。 特别是,这是用C++给Python3.1环境写的一个扩展小例子。