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
分享到:
相关推荐
6. **测试调用**:在Python中,你可以像导入普通Python模块一样导入这个C扩展模块,然后调用其中的函数。 通过这种方式,C语言编写的库可以无缝集成到Python环境中,充分利用C的性能优势,同时保持Python的易用性和...
用python创建手写C扩展模块基本过程 编写接口代码主要分为四步: 1. 包含Python的头文件 2. 为每个模块的每一个函数增加一个型如PyObject* Module_func()的包装函数。 3. 为每个模块增加一个型如PyMethodDef ...
Python OS 模块提供了一个统一的操作系统接口函数,这些接口函数通常是平台指定的,os 模块能在不同操作系统平台如 nt 或 posix 中的特定函数间自动切换,从而能实现跨平台操作。 文件操作 OS 模块提供了多种文件...
以下是一个简单的例子,展示如何创建一个Python模块来暴露一个C函数给Python环境。 ##### 3.1 编写C代码 假设我们要创建一个名为`my_extension`的模块,其中包含一个名为`add`的函数,该函数接受两个整数作为输入...
【C语言中文网Python教程】是一份离线的Python学习资料,包含了多个主题,旨在帮助用户深入了解和掌握Python编程语言。这份教程通过一系列HTML文件提供VIP级别的内容,无需网络连接即可阅读。 首先,我们来看看...
Python中的`ctypes`模块是Python标准库的一部分,它允许我们直接在Python代码中调用C语言编写的动态链接库(DLLs on Windows,.so files on Linux等)。这个功能对于那些希望利用C库的强大功能,同时又不想或不能...
2. **封装为Python模块**:使用Python C API将C代码封装成Python模块,包括定义Python函数接口、处理参数转换和结果返回。 3. **测试和优化**:在Python环境中测试模块的性能和功能,根据测试结果进行必要的优化...
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语言开发快速友好的用户图形界面(GUI)的优势,徐剑飞与薄亚明提出了利用C语言编写高效的计算模块,同时使用Python语言处理界面设计和与用户的交互。该文档详细描述...
这份"Python语言基础到模块使用"的资料涵盖了Python学习的关键方面,包括基础知识、进阶概念以及常用模块的使用。 首先,从"第一个Python程序与数据存储"开始,初学者会接触到Python的基本语法,如变量的声明和赋值...
这个错误通常表示Python无法找到SSL模块,该模块是Python标准库的一部分,用于处理安全套接层(SSL)和传输层安全(TLS)协议,常用于网络通信中的加密传输。SSL模块依赖于系统级别的openssl库,因此当系统缺少对应...
本文实例讲述了Python3使用pandas模块读写excel操作。分享给大家供大家参考,具体如下: 前言 Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入...
内容中给出了一段Python代码示例,该示例展示了如何使用`struct`模块对C语言中定义的`struct`数据类型进行打包和发送。 ##### C语言中的`struct`定义 首先,我们来看一下C语言中定义的`struct`类型: ```c typedef ...
ctypes 是一个在 Python 2.5 及以上版本自带的强大模块,它允许 Python 脚本动态加载和调用 C 库中的函数,使得 C/C++ 和 Python 之间的交互变得简单而高效。通过 ctypes,开发者可以直接调用 C 语言编写的 DLL 或...
这个模块使得在Python2环境中,开发者能够方便地实现文件的分块上传,这对于处理大文件的网络传输至关重要,因为一次性上传大文件可能会导致超时或内存不足的问题。 首先,让我们详细了解一下poster模块的核心功能...
Python中的MySQLdb模块是连接和操作MySQL数据库的一个重要工具,尤其在Python 2.x版本中广泛使用。这个模块是Python的DB-API(数据库应用编程接口)的一个实现,它提供了与MySQL交互的一系列函数和类。下面我们将...
下面是一个简单的C程序,演示如何调用Python脚本: ```c #include <Python.h> int main() { Py_Initialize(); // 加载Python模块和函数 PyObject *module = PyImport_ImportModule("EXTOPYTHON"); if (module ...
Cython将Python代码转换为C代码,然后编译成机器码,从而实现了与C语言接近的速度,特别适用于需要高性能计算的场景。 2. **numpy-MKL-1.9.0.win32-py3.3.exe**: NumPy是Python科学计算的核心库,提供了多维数组...
标题“Python-pytorch2c:一个用于将PyTorch图形编译为C的Python模块”指的是一个开源工具,它允许开发者将基于PyTorch构建的深度学习模型转换为C语言代码。这个模块的目标是使得这些模型能够在不支持Python或者...
为了使用这个C语言版本,开发者需要将其编译为可执行文件或Python的扩展模块,然后在Python脚本中调用。这通常涉及到创建一个C接口,比如使用`ctypes`库来加载动态链接库(DLL),或者使用`Cython`或`SWIG`等工具...