`
cloudhe
  • 浏览: 108720 次
  • 性别: 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 模块提供了多种文件...

    用C语言扩展Python的功能.pdf

    以下是一个简单的例子,展示如何创建一个Python模块来暴露一个C函数给Python环境。 ##### 3.1 编写C代码 假设我们要创建一个名为`my_extension`的模块,其中包含一个名为`add`的函数,该函数接受两个整数作为输入...

    C语言中文网Python教程

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

    用C语言扩展Python的功能

    2. **封装为Python模块**:使用Python C API将C代码封装成Python模块,包括定义Python函数接口、处理参数转换和结果返回。 3. **测试和优化**:在Python环境中测试模块的性能和功能,根据测试结果进行必要的优化...

    嵌入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 lib的python模块ctypes

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

    C语言与Python语言混合编程的接口设计.pdf

    在这项工作中,为了结合C语言计算效率高和Python语言开发快速友好的用户图形界面(GUI)的优势,徐剑飞与薄亚明提出了利用C语言编写高效的计算模块,同时使用Python语言处理界面设计和与用户的交互。该文档详细描述...

    Python语言基础到模块使用

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

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

    这个错误通常表示Python无法找到SSL模块,该模块是Python标准库的一部分,用于处理安全套接层(SSL)和传输层安全(TLS)协议,常用于网络通信中的加密传输。SSL模块依赖于系统级别的openssl库,因此当系统缺少对应...

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

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

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

    内容中给出了一段Python代码示例,该示例展示了如何使用`struct`模块对C语言中定义的`struct`数据类型进行打包和发送。 ##### C语言中的`struct`定义 首先,我们来看一下C语言中定义的`struct`类型: ```c typedef ...

    python ctypes模块

    ctypes 是一个在 Python 2.5 及以上版本自带的强大模块,它允许 Python 脚本动态加载和调用 C 库中的函数,使得 C/C++ 和 Python 之间的交互变得简单而高效。通过 ctypes,开发者可以直接调用 C 语言编写的 DLL 或...

    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`等工具...

Global site tag (gtag.js) - Google Analytics