Итак, у меня есть репозиторий для сборки расширения Python C, изложенный следующим образом:
setup.py
demo.c
MANIFEST.in
Содержимое файла C:
#include <Python.h>
static PyObject* print_message(PyObject* self, PyObject* args)
{
const char* str_arg;
if(!PyArg_ParseTuple(args, "s", &str_arg)) {
puts("Could not parse the python arg!");
return NULL;
}
#ifdef USE_PRINTER
printf("printer %s\n", str_arg);
#else
printf("msg %s\n", str_arg);
#endif
// This can also be done with Py_RETURN_NONE
Py_INCREF(Py_None);
return Py_None;
}
static PyMethodDef myMethods[] = {
{ "print_message", print_message, METH_VARARGS, "Prints a called string" },
{ NULL, NULL, 0, NULL }
};
// Our Module Definition struct
static struct PyModuleDef myModule = {
PyModuleDef_HEAD_INIT,
"DemoPackage",
"A demo module for python c extensions",
-1,
myMethods
};
// Initializes our module using our above struct
PyMODINIT_FUNC PyInit_DemoPackage(void)
{
return PyModule_Create(&myModule);
}
В моем setup.py
У меня есть следующий код:
from distutils.core import setup, Extension
module1 = Extension('DemoPackage',
define_macros = [('USE_PRINTER', '1')],
include_dirs = ['include'],
sources = ['src/demo.c'])
setup (name = 'DemoPackage',
version = '1.0',
description = 'This is a demo package',
author = '<first> <last>',
author_email = 'person@site.com',
url = 'https://docs.python.org/extending/building',
long_description = open('README.md').read(),
ext_modules = [module1])
Мой вопрос здесь заключается в том, могу ли я собрать и установить пакет с помощью команд:
$ python setup.py build $ python setup. py install
Как включить или написать модульный тест в сценарии расширения C? Я ищу модульный тест для запуска вместе с setup.py
, аналогично тому, как тест будет работать для cmake.