Ho un progetto Python con molti sotto-moduli che impacchetta con le distutils. Mi piacerebbe creare alcune estensioni Python in C per vivere in alcuni di questi sotto-moduli ma non capisco come ottenere l'estensione Python per vivere in un sottomodulo. Quello che segue è l'esempio più semplice di quello che sto cercando:Come creare un'estensione Python C in modo da poterla importare da un modulo
Ecco la mia estensione Python c_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);
}
Ed ecco un setup.py
che funziona:
from distutils.core import setup
from distutils.extension import Extension
setup(name='c_extension_demo',
ext_modules = [Extension('c_extension', sources = ['c_extension.c'])])
Dopo aver installato in un virtualenv posso fare questo:
>>> import c_extension
>>> c_extension.get_answer()
42
Ma io vorrebbe avere c_extension
dal vivo in un sottomodulo, ad esempio foo.bar
. Quello che ho bisogno di cambiare in questa pipeline per essere in grado di ottenere il comportamento nella shell Python per essere come questo:
>>> import foo.bar.c_extension
>>> foo.bar.c_extension.get_answer()
42
Grazie per la risposta, ma questo non ha funzionato per me. Ho creato la directory 'foo/bar' con un' __init __. Py' in ogni plus aggiunto il prefisso 'foo.bar' nel comando setup ma nella shell python ciò accade: >>> import foo.bar.c_extension Traceback (ultima chiamata ultima): File "", riga 1, in ImportErrore: nessun modulo denominato c_extension –
Rich
E appena visto la modifica, ho aggiunto anche la linea dei pacchetti. – Rich
Quale versione di Python stai usando? Sto testando su 2.7.3. – nneonneo