python之C扩展
来源:互联网 发布:utorrent mac安装不了 编辑:程序博客网 时间:2024/06/05 14:33
第一步:上C源码(代码框架是参考一位网友的^_^!):
/************************************************************************* > File Name: python_test.c > Author: > Mail: > Created Time: Thu 03 Dec 2015 10:45:04 PM PST ************************************************************************/#include <python2.7/Python.h> //包含python的头文件 #include <stdio.h>/*1 c/cpp中的函数 */int my_c_function(int j,int i) { int n = i+j; printf("i + j = %d\n",n); return n; } // 2 python 包装 static PyObject * wrap_my_c_fun(PyObject *self, PyObject *args) { int command; int n; int i; if (!PyArg_ParseTuple(args, "ii",&command,&i))//这句是把python的变量args转换成c的变量command return NULL; n = my_c_function(command,i);//调用c的函数 return Py_BuildValue("i",n);//把c的返回值n转换成python的对象 } // 3 方法列表 static PyMethodDef MyCppMethods[] = { //MyCppFun1是python中注册的函数名,wrap_my_c_fun是函数指针 { "MyCppFun1", wrap_my_c_fun, METH_VARARGS, "Execute a shellcommand." }, { NULL, NULL, 0, NULL } }; // 4 模块初始化方法 PyMODINIT_FUNC initMyCppModule(void) { //初始模块,把MyCppMethods初始到MyCppModule中 PyObject *m = Py_InitModule("MyCppModule", MyCppMethods); if (m == NULL) return; }
第二步:编写python 编译代码(setup.py)
#!/usr/bin env pythonfrom distutils.core import setup, ExtensionMOD = 'MyCppModule'setup(name=MOD,version = '1.0', ext_modules=[Extension(MOD,sources=['python_test.c'])])
第三步:输入编译命令
python setup.py build
输入命令后会打印如下信息(打印类似信息及成功,否则就去检查代码):
kjlr@kjlr-ThinkPad-E450c:~/python_test$ python setup.py buildrunning buildrunning build_extbuilding 'MyCppModule' extensionx86_64-linux-gnu-gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include/python2.7 -c python_test.c -o build/temp.linux-x86_64-2.7/python_test.ox86_64-linux-gnu-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -Wl,-z,relro -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -D_FORTIFY_SOURCE=2 -g -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security build/temp.linux-x86_64-2.7/python_test.o -o build/lib.linux-x86_64-2.7/MyCppModule.so
第四步:输入命令将我们做好的安装到python中
sudo python setup.py install
输入命令后会打印如下信息(打印类似信息及成功,否则就去检查代码):
kjlr@kjlr-ThinkPad-E450c:~/python_test$ sudo python setup.py install[sudo] password for kjlr: running installrunning buildrunning build_extrunning install_libcopying build/lib.linux-x86_64-2.7/MyCppModule.so -> /usr/local/lib/python2.7/dist-packagesrunning install_egg_infoRemoving /usr/local/lib/python2.7/dist-packages/MyCppModule-1.0.egg-infoWriting /usr/local/lib/python2.7/dist-packages/MyCppModule-1.0.egg-info
第五步:在解释器里测试我们做好的包
kjlr@kjlr-ThinkPad-E450c:~$ pythonPython 2.7.6 (default, Jun 22 2015, 17:58:13) [GCC 4.8.2] on linux2Type "help", "copyright", "credits" or "license" for more information.>>> import MyCppModule>>> MyCppModule.MyCppFun1(1,3)i + j = 44>>> MyCppModule.MyCppFun1(1,308)i + j = 309309>>>
第六步:如有兴趣深究者可阅读《python核心编程》第二版
注:本示例一共用到了两个文件,python_test.c
setup.py,都在同一个目录下。
0 0
- python之C扩展
- python之C扩展二
- 用c扩展python
- C扩展python实例
- C语言扩展Python
- C语言扩展Python
- python c扩展
- Python的C扩展
- Python:C语言扩展
- Python 扩展C
- python C/C++ 扩展
- python扩展C
- (Python编程)C扩展概览
- 用C/C++扩展Python
- 使用C/C++扩展Python
- Python 的C语言扩展
- python的C、c++扩展
- 用C/C++扩展Python
- Sublime Text 3中配置编…
- 教你彻底解决Eclipse自动补全变量…
- Oracle存储过程创建及调用
- MyEclipse安装SVN插件
- 去掉点li 的点 使得LI前…
- python之C扩展
- DIV标签位置大小属性
- CSS颜色代码对照表
- JSP表格的表头固定不动
- leetcode -- Shortest Palindrome -- 不太理解
- iOS 简单使用Block回调
- 黑马程序员--GUI图形用户界面
- 北大OJ2388
- 黑马程序员——Java中数据类型及其之间的转换