`
cloudhe
  • 浏览: 107177 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

用 C 为 Python 写个简单的模块

阅读更多

Python 语言是支持用 C 来它写模块的,其实现有的很多模块也是用 C 写的。这里我做个简单的介绍。

先决条件:
1. 在 linux 上编写时,需要自己编译出 Python的动态连接库。也就是要有 libpython2.5.so 这样的东西。
2. 在 windows 上时,则需要 mingw 这个编译环境。其实只要你安装了 Dev-Cpp 就有了。当然还安装了 windows 版的 Python.

先把源代码帖上来,很简单,假设保存为 hello.c:

#include <Python.h>

static PyObject *
hello_echo(PyObject *self, PyObject *args, PyObject *keywds)
{  
    char    *something;

    if (!PyArg_ParseTuple(args, "s", &something))
        return NULL; 
    
    printf("%s\n", something);
    Py_INCREF(Py_None);
    return Py_None;
}

static PyMethodDef hello_methods[] = {
    {"echo", (PyCFunction)hello_echo, METH_VARARGS | METH_KEYWORDS, "print string"},
    {NULL, NULL, 0, NULL}
};

void
inithello(void)
{
    Py_InitModule("hello", hello_methods);
}

 
先说说在 linux 怎么编译它:
很简单,只需要一个命令,

gcc -shared -fPIC hello.c -I/usr/include/python2.5/ -L/usr/lib -lpython2.5 -o hello.so

 
就可以生成 hello.so。注意这里 -I/usr/include/python2.5/ 是 Python 的头文件路径,有可能你的在 -I/usr/local/include/python2.5/,-L/usr/lib 是 Python 的 libpython2.5.so 在哪里(的位置?- cloud),有可能你的在 -L/usr/local/lib,这个都根据实际情况。
来测试测试,在 hello.so 的当前路径下:

>>> import hello
>>> hello.echo("hehe, hello")
hehe, hello

 
再来说说在 windows 下怎么编译。你必须安装有 mingw,简单来说安装有 Dev-Cpp,然后把它安装目录下的 bin 目录加到环境变量的 PATH 里。
比如我的就是把 D:\Dev-Cpp\bin 加到 PATH 里。
开始了,打开命令行窗口,到 hello.c 所在目录,也运行一个命令,

gcc -shared hello.c -IC:\Python25\include -LC:\Python25\libs -lpython25 -o hello.pyd

 就会在当前目录下生成一个 hello.pyd 的文件。

 

From http://www.pythonid.com/html/fenleiwenzhang/extend/20070910/186.html

分享到:
评论

相关推荐

    用python创建手写C扩展模块基本过程

    用python创建手写C扩展模块基本过程 编写接口代码主要分为四步: 1. 包含Python的头文件 2. 为每个模块的每一个函数增加一个型如PyObject* Module_func()的包装函数。 3. 为每个模块增加一个型如PyMethodDef ...

    嵌入Python脚本的Nginx模块ngx_python.zip

    ngx_python 是为 nginx 嵌入 python 脚本的模块。环境- python 2.7.*- nginx-1.6.3 安装```sh git clone https://github.com/rryqszq4/ngx_python.git wget 'http://nginx.org/download/nginx-1.6.3.tar.gz' ...

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

    NULL 博文链接:https://8366.iteye.com/blog/1575189

    Python3使用pandas模块读写excel操作示例

    本文实例讲述了Python3使用pandas模块读写excel操作。分享给大家供大家参考,具体如下: 前言 Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入...

    python ctypes模块

    这是python2.5以后自带的一个很强大的模块,完美的将c c++于python结合起来

    Python 模块-使用模块演练

    Python解释器易于扩展,可以使用C语言或C++(或者其他可以通过C调用的语言)扩展新的功能和数据类型。Python也可用于可定制化软件中的扩展程序语言。Python丰富的标准库,提供了适用于各个主要系统平台的源码或机器...

    使用c lib的python模块ctypes

    python中调用c库的模块。 安装方法: linux: python setup.py install windows: setup.py install

    利用Boost.Python将C++代码导入到Python模块

    借助Boost.Python库可以将C/C++代码方便、快捷地移植到python模块当中,实现对python模块的扩充。首先,将C++下的代码编译为动态库,并将生成的动态库命名为封装模块的名字,如:用BOOST_PYTHON_MODULE(Module_Name)...

    python三边定位模块

    自己开发python的三边定位模块,包含 solve_quadratic_equation(a, b, c):解二次方程 triangle_area(x1,y1,x2,y2,x3,y3):计算三角形面积 triangle_perimeter(x1,y1,x2,y2,x3,y3):计算三角形周长 circle_intersect...

    解决Python找不到ssl模块问题 No module named _ssl的方法

    python安装完毕后,提示找不到ssl模块: [www@pythontab.com ~]$ python Python 2.7.15 (default, Oct 23 2018, 18:08:43) [GCC 4.4.7 20120313 (Red Hat 4.4.7-23)] on linux2 Type help, copyright, credits or ...

    Python使用pickle模块存储数据报错解决示例代码

    pickle模块只能在python中使用,python中几乎所有的数据类型(列表,字典,集合,类等)都可以用pickle来序列化, pickle序列化后的数据,可读性差,人一般无法识别。 接下来我们看下Python使用pickle模块存储数据...

    python使用wmi模块获取windows下的系统信息 监控系统

    Python用WMI模块获取Windows系统的硬件信息:硬盘分区、使用情况,内存大小,CPU型号,当前运行的进程,自启动程序及位置,系统的版本等信息。 本文实例讲述了python使用wmi模块获取windows下的系统信息 监控系统 ...

    python_openvc4.0.1模块

    适用于python3的最新openvc4.0.1模块,下载后在本地安装 pip install 包的位置(如:C:\download\xxx.whl) 比如我直接默认地址安装的python,在D盘根目录下新建了一个pythonlib文件夹,并把视觉库复制了进去 然后以...

    python36的mmh3模块.rar

    python36的mmh3模块.rar ,解压到你python目录下的 \Lib\site-packages\下即可使用,比如我的是解压到 C:\Python36\Lib\site-packages\

    python 和C语言数据结构解析于构建

    python 和 C语言进行网络通信,而C语言经常是采用struct ,所以和python交互需要进行解析和重构struct,因此python 实现struct模块,文档右举例和使用方法,让你快速上手。

    Python-pytorch2c一个用于将PyTorch图形编译为C的Python模块

    用于将(静态)PyTorch图形编译为C(依赖于TH和THNN)的Python模块。

    python下安装xlrd模块

    打算安装python处理excel的一些第三方库发现python版本低了,于是卸载了python2.5重新安装了python2.7,不安装最新的python3.x是因为实在与python2.x有较大的区别,并且资料也比较少,目前使用较多的还是python2.x。...

    python 3.10.0 官方参考文档 API 完整pdf中文版

    Python 提供了许多模块来帮助使用 Python 语言。 这些模块支持标记化、解析、语法分析、字节码反汇编以及各种其他工具。 对于初学者而言,入门教程和 Python 语言参考可能是大家最需要的。其中入门教程非正式地介绍...

    python中的ftp模块学习.txt

    [原创]python中的ftp模块学习 文章标题:[原创]python中的ftp模块学习顶部 pt007 发布于:2007-02-0810:46 [楼主][原创]python中的ftp模块学习 文章作者:pt007 信息来源:邪恶八进制信息安全团队(www.eviloctal.com...

    Python 模块-模块名也是一个标识符

    Python解释器易于扩展,可以使用C语言或C++(或者其他可以通过C调用的语言)扩展新的功能和数据类型。Python也可用于可定制化软件中的扩展程序语言。Python丰富的标准库,提供了适用于各个主要系统平台的源码或机器...

Global site tag (gtag.js) - Google Analytics