用swig为python定制自定义模块
2016-12-07 16:44
537 查看
引言
因为python是解释性的语言,所以在计算上其效率会有很大的瓶颈,所以在设计大型计算时我们往往不会直接用python实现,而是使用更高效的语言来完成计算的过程(比如矩阵运算我们往往会借用numpy库来高效实现),那么我们能不能自己用其他语言来实现复杂的计算过程,编译成库在python中调用了?答案是肯定可以的,而且这种做法往往是必须的。在本文中我将借助swig工具,在ubuntu16的环境下用一个简单的例子介绍如何使用将c语言的实现编译成python可以调用的模块。1.Swig安装
1、下载地址2、解压文件夹,如swig-3.0.10
3、进入swig-3.0.10目录,进行安装(因为我只想用于python,所以不使用pcre)
cd swig-3.0.10 ./configure --prefix=/usr/progam/swig --without-pcre sudo make sudo make install
2.Swig使用例子
这里使用官方文档中提供的例子1、写一个c程序,保存为example.c
/* File : example.c */ #include <time.h> double My_variable = 3.0; int fact(int n) { if (n <= 1) return 1; else return n*fact(n-1); } int my_mod(int x, int y) { return (x%y); } char *get_time() { time_t ltime; time(<ime); return ctime(<ime); }
2、编写对应的接口文件,在文件中声明要使用的函数以及依赖的头文件等,保存为example.i
/* example.i */ %module example %{ /* Put header files here or function declarations like below */ extern double My_variable; extern int fact(int n); extern int my_mod(int x, int y); extern char *get_time(); %} extern double My_variable; extern int fact(int n); extern int my_mod(int x, int y); extern char *get_time();
3、编译生成模块
swig -python example.i gcc -c -fpic example.c example_wrap.c -I/usr/include/python2.7/ gcc -shared example.o example_wrap.o -o _example.so
这里需要注意,’/usr/include/python2.7/’是我的Python.h文件的位置,请根据你自身实际进行修改,如果不知道其路径,可以使用以下指令来得知文件路径
locate Python.h
还要注意的一点是生成的so文件,文件名需要以下划线开头!
4、使用自定义模块
要让python能够找到我们的自定义模块,需要把生成的example.py和_example.so复制到路径’/usr/local/lib/python2.7/site-packages/’(其实在任意路径中都可以,但都放到这里方便管理)中,然后我们需要编写一个pth文件放到/usr/local/lib/python2.7/dist-packages/中
#example.pth #此文件中填入自定义模块两个文件的所在路径 /usr/local/lib/python2.7/site-packages/
5、自定义模块测试
>>> import example >>> example.fact(5) 120 >>> example.my_mod(7,3) 1 >>> example.get_time() 'Wed Dec 7 16:42:51 2016\n'
相关文章推荐
- Python自定义模块导入方法
- python最简单直接的自定义模块导入方法
- python引入自定义模块
- [Python]在Python中添加自定义模块
- 高效开发Python扩展模块方法:用SWIG封装C/C++代码
- 在python中添加自定义模块
- Python导入自定义包或模块
- python 引入 导入 自定义模块, python 引入 导入 外部文件
- Python学习笔记之疑问 7:自定义模块放在什么位置
- 在Python中添加自定义模块
- python-自定义模块【公用】
- 高效开发Python扩展模块方法:用SWIG封装C/C++代码
- 在Python中添加自定义模块
- python中自定义模块的导入
- 如何发布自定义的python模块
- Python自定义模块导入方法
- 【python】导入自定义模块
- 【ZZ】python 自定义模块
- Python学习5:__name__使用以及自定义模块
- Python import自定义模块方法