Как создать расширение Python C, чтобы я мог импортировать его из модуля
У меня есть проект Python со многими подмодулями, которые я упаковываю с помощью distutils. Я хотел бы построить некоторые расширения Python на C для использования в некоторых из этих подмодулей, но я не понимаю, как заставить расширение Python работать в подмодуле. Ниже приведен простейший пример того, что я ищу:
Вот мое расширение Pythonc_extension.c
:
#include <Python.h>
static PyObject *
get_answer(PyObject *self, PyObject *args)
{
return Py_BuildValue("i", 42);
}
static PyMethodDef Methods[] = {
{"get_answer", get_answer, METH_VARARGS, "The meaning of life."},
{NULL, NULL, 0, NULL}
};
PyMODINIT_FUNC
initc_extension(void) {
(void) Py_InitModule("c_extension", Methods);
}
И вотsetup.py
это работает:
from distutils.core import setup
from distutils.extension import Extension
setup(name='c_extension_demo',
ext_modules = [Extension('c_extension', sources = ['c_extension.c'])])
После установки в virtualenv я могу сделать это:
>>> import c_extension
>>> c_extension.get_answer()
42
Но я бы хотел иметьc_extension
жить в подмодуле, скажемfoo.bar
, Что мне нужно изменить в этом конвейере, чтобы поведение в оболочке Python было таким:
>>> import foo.bar.c_extension
>>> foo.bar.c_extension.get_answer()
42