目录结构
├── 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包,也可能只是一个目录