`
cloudhe
  • 浏览: 107649 次
  • 性别: 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

分享到:
评论

相关推荐

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

    6. **测试调用**:在Python中,你可以像导入普通Python模块一样导入这个C扩展模块,然后调用其中的函数。 通过这种方式,C语言编写的库可以无缝集成到Python环境中,充分利用C的性能优势,同时保持Python的易用性和...

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

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

    Python_OS模块

    Python OS 模块提供了一个统一的操作系统接口函数,这些接口函数通常是平台指定的,os 模块能在不同操作系统平台如 nt 或 posix 中的特定函数间自动切换,从而能实现跨平台操作。 文件操作 OS 模块提供了多种文件...

    嵌入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教程

    【C语言中文网Python教程】是一份离线的Python学习资料,包含了多个主题,旨在帮助用户深入了解和掌握Python编程语言。这份教程通过一系列HTML文件提供VIP级别的内容,无需网络连接即可阅读。 首先,我们来看看...

    使用c lib的python模块ctypes

    Python中的`ctypes`模块是Python标准库的一部分,它允许我们直接在Python代码中调用C语言编写的动态链接库(DLLs on Windows,.so files on Linux等)。这个功能对于那些希望利用C库的强大功能,同时又不想或不能...

    Python语言基础到模块使用

    这份"Python语言基础到模块使用"的资料涵盖了Python学习的关键方面,包括基础知识、进阶概念以及常用模块的使用。 首先,从"第一个Python程序与数据存储"开始,初学者会接触到Python的基本语法,如变量的声明和赋值...

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

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

    python2 poster 模块

    这个模块使得在Python2环境中,开发者能够方便地实现文件的分块上传,这对于处理大文件的网络传输至关重要,因为一次性上传大文件可能会导致超时或内存不足的问题。 首先,让我们详细了解一下poster模块的核心功能...

    python操作MySQL的MySQLdb模块

    Python中的MySQLdb模块是连接和操作MySQL数据库的一个重要工具,尤其在Python 2.x版本中广泛使用。这个模块是Python的DB-API(数据库应用编程接口)的一个实现,它提供了与MySQL交互的一系列函数和类。下面我们将...

    C调用python简单例子.rar

    下面是一个简单的C程序,演示如何调用Python脚本: ```c #include &lt;Python.h&gt; int main() { Py_Initialize(); // 加载Python模块和函数 PyObject *module = PyImport_ImportModule("EXTOPYTHON"); if (module ...

    Python使用模块

    Cython将Python代码转换为C代码,然后编译成机器码,从而实现了与C语言接近的速度,特别适用于需要高性能计算的场景。 2. **numpy-MKL-1.9.0.win32-py3.3.exe**: NumPy是Python科学计算的核心库,提供了多维数组...

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

    标题“Python-pytorch2c:一个用于将PyTorch图形编译为C的Python模块”指的是一个开源工具,它允许开发者将基于PyTorch构建的深度学习模型转换为C语言代码。这个模块的目标是使得这些模型能够在不支持Python或者...

    C语言实现的python里面的filtfilt函数.rar

    为了使用这个C语言版本,开发者需要将其编译为可执行文件或Python的扩展模块,然后在Python脚本中调用。这通常涉及到创建一个C接口,比如使用`ctypes`库来加载动态链接库(DLL),或者使用`Cython`或`SWIG`等工具...

    python ctypes模块

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

    Python整合C语言模块[收集].pdf

    在这个例子中,Python程序加载了名为`my_c_library.so`的C语言动态链接库,并调用了其中的`add`函数。通过ctypes定义的`c_int`类型,Python程序能够传递整型参数,并接收返回值。 通过这种方式,开发者可以在保持...

    Python 模块-使用模块演练

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

    python 学习简单实例

    接着,`ctype`模块则允许Python程序调用C语言编写的动态链接库(DLL),实现了Python与C的混合编程。在ctypecall.py文件中,你将学习如何使用`ctypes`加载动态库,定义C数据类型,以及声明和调用C函数。这在处理性能...

    C语言和python3.0的资料

    通过查阅这个手册,开发者可以快速了解如何使用C语言进行内存管理、输入输出、字符串操作、数学运算等基本操作。例如,`malloc()`用于动态分配内存,`printf()`用于格式化输出,`strcpy()`用于复制字符串,这些都是...

    计算机二级C语言、python.docx

    本文档是关于计算机二级考试中C语言和Python的学习笔记,涵盖了这两个编程语言的基础知识和重要概念。以下是详细内容: ### C语言部分 #### VC++2010 操作 - 使用F7键可以生成解决方案,相当于编译和连接。 - Ctrl...

Global site tag (gtag.js) - Google Analytics