C语言扩展python

15 篇文章 0 订阅

目录结构

├── setup.py
├── source
│ └── mymodel.c

mymodel.c


#define PY_SSIZE_T_CLEAN

#include <Python.h>



/**

 * 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;

    }

}



int add(int a,int b){

    return a*b;

}

 

/**

 * 对函数进行封装

 *

 * @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);

}

 

PyObject *

strings_add(PyObject *self, PyObject *args) {

    int a,b;

 

    // 参数解析

    if (!PyArg_ParseTuple(args, "ii", &a,&b)) {

        return NULL;

    }

 

    // 调用 reverse

    int res = add(a, b);

 

    return Py_BuildValue("i", res);

}

/**

 * 定义模块方法表

 *

 */

static PyMethodDef StringsMethods[] = {

        {"reverse", strings_reverse, METH_VARARGS, "Reverse str."},

        {"add", strings_add, METH_VARARGS, "add actual multi."},

        {NULL, NULL, 0, NULL}

};

 

/**

 * 定义模块

 *

 */

static struct PyModuleDef stringsmodule = {

        PyModuleDef_HEAD_INIT,

        "strings",

        "reverse str, \"abc\" => \"cba\"",

        -1,

        StringsMethods

};

 

/**

 * 模块初始化

 *

 * @return

 */

PyMODINIT_FUNC

PyInit_strings(void) {

    return PyModule_Create(&stringsmodule);

}

setup.py

import setuptools

 

# with open('README.md', 'r') as fh:

#     long_description = fh.read()

 

strings_module = setuptools.Extension('strings',

                           sources=['source/mymodel.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]

)


#python setup.py install
python setup.py install --record files.txt #   记录安装路径到files.txt

即可安装
删除site-packages 下面的包即可卸载,即删除–recorde 的files.txt里所有文件,包括egg目录
egg可能是个zip包,也可能只是一个目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值