1. 写c文件
#include <Python.h>
static unsigned int _accumulate(unsigned int n)
{
unsigned int sum = 0;
unsigned int i = 0;
for(; i <= n; i++)
sum += i;
return sum;
}
static PyObject *accumulate(PyObject* self, PyObject* args)
{
unsigned int n = 0;
if(!PyArg_ParseTuple(args, "i", &n))
return NULL;
return Py_BuildValue("i", _accumulate(n));
}
static PyMethodDef accuMethods[] =
{
{"accumulate", accumulate, METH_VARARGS, "Calculate the accumulation of n"},
{NULL, NULL, 0, NULL}
};
static PyModuleDef accuModule =
{
PyModuleDef_HEAD_INIT,
"accuModule",
"accumulate module description",
-1,
accuMethods
};
PyMODINIT_FUNC PyInit_accuModule(void)
{
return PyModule_Create(&accuModule);
}
2. 写setup.py
from distutils.core import setup, Extension
module = Extension('accuModule', sources = ['accumulate.c'])
setup(name = 'accuModule',
version = '1.0',
description = 'This is a demo package',
ext_modules = [module])
3. build
python setup.py build
python setup.py sdist
4. upload,这里需要去pypi注册一个账号
twine upload --repository-url https://upload.pypi.org/legacy/ dist/*
5. 补充
- setup.py可以用两个包生成,setuptools和distutils