博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用C语言编写Python扩展包
阅读量:5807 次
发布时间:2019-06-18

本文共 2744 字,大约阅读时间需要 9 分钟。

  hot3.png

使用C编写Python扩展包。官网文档其实已经很详尽~ 使用场景猜想:某些需要高效处理的算法、某些耗时的操作优化、或者某些核心算法加密等~

环境:macOS + pyhton3.7

文档地址:

整体结构

➜  strings_pkg git:(master) tree   .├── LICENSE├── README.md├── setup.py└── strings_pkg    ├── __init__.py    └── strings.c1 directory, 5 files

扩展模块 strings.c

//// Created by lpe234 on 2018/12/27.//// doc: https://docs.python.org/3/extending/extending.html#include 
/** * reverse * 实际执行函数 * * @param str * @param size */void reverse(char *str, int size) { for (int i = 0, j = size-1; i < j ; ++i, --j) { char tmp = str[i]; str[i] = str[j]; str[j] = tmp; }}/** * 对函数进行封装 * * @param self * @param args * @return */PyObject *strings_reverse(PyObject *self, PyObject *args) { char *str; // 参数解析 if (!PyArg_ParseTuple(args, "s", &str)) { return NULL; } // 调用 reverse reverse(str, (int) strlen(str)); return Py_BuildValue("s", str);}/** * 定义模块方法表 * */static PyMethodDef StringsMethods[] = { {"reverse", strings_reverse, METH_VARARGS, "Reverse str."}, {NULL, NULL, 0, NULL}};/** * 定义模块 * */static struct PyModuleDef stringsmodule = { PyModuleDef_HEAD_INIT, "strings", "reverse str, \"abc\" => \"cba\"", -1, StringsMethods};/** * 模块初始化 * * @return */PyMODINIT_FUNCPyInit_strings(void) { return PyModule_Create(&stringsmodule);}

安装模块 setup.py

import setuptoolswith open('README.md', 'r') as fh:    long_description = fh.read()strings_module = setuptools.Extension('strings',                           sources=['strings_pkg/strings.c'],                           language='c')setuptools.setup(    name="strings_pkg",    version="0.0.1",    author="lpe234",    author_email="lpe234@qq.com",    description="string extension package",    long_description=long_description,    long_description_content_type="text/markdown",    url="https://github.com/lpe234/strings_pkg",    packages=setuptools.find_packages(),    classifiers=[        "Programming Language :: Python :: 3",        "License :: OSI Approved :: MIT License",        "Operating System :: OS Independent",    ],    ext_modules=[strings_module])

上传至pypi仓库

➜ twine upload dist/*

体验

➜  ~ pip3 install strings-pkgCollecting strings-pkg  Downloading https://files.pythonhosted.org/packages/f9/30/d9324783ef220de473b8fac550029c43ef2a8b7c26a16a3881ae6c8d006a/strings_pkg-0.0.1-cp37-cp37m-macosx_10_14_x86_64.whlInstalling collected packages: strings-pkgSuccessfully installed strings-pkg-0.0.1➜  ~ python3Python 3.7.1 (default, Nov 28 2018, 11:51:47)[Clang 10.0.0 (clang-1000.11.45.5)] on darwinType "help", "copyright", "credits" or "license" for more information.>>> import strings>>> strings.reverse('hello world')'dlrow olleh'>>>

转载于:https://my.oschina.net/lpe234/blog/2994293

你可能感兴趣的文章
将txt文件转化为json进行操作
查看>>
XML
查看>>
【我的总结20170823】多实例部署
查看>>
[MySQL优化案例]系列 — slave延迟很大优化方法
查看>>
线性表4 - 数据结构和算法09
查看>>
how to use Gesture in Iphone
查看>>
C语言数据类型char
查看>>
Python线程详解
查看>>
Online Patching--EBS R12.2最大的改进
查看>>
说说我的web前端之路,分享些前端的好书
查看>>
Binary Search Tree Iterator leetcode
查看>>
Oracle性能优化--DBMS_PROFILER
查看>>
关闭Jquery Ajax 缓存
查看>>
uva-317-找规律
查看>>
Event事件的兼容性(转)
查看>>
数论 - 同余 + BFS (Find The Multiple)
查看>>
CQRS学习——一个例子(其六)
查看>>
Hadoop 学习资料集锦
查看>>
12.22 repeater 添加
查看>>
leetcode-74-搜索二维矩阵
查看>>