usar paquetes modulos lista librerias instalar python distutils python-extensions

paquetes - Cómo construir una extensión Python C para que pueda importarla desde un módulo



python embedded c++ (1)

Tengo un proyecto de Python con muchos submódulos que empaqueté con distutils. Me gustaría construir algunas extensiones de Python en C para vivir en algunos de estos submódulos, pero no entiendo cómo hacer que la extensión de Python viva en un submódulo. Lo que sigue es el ejemplo más simple de lo que estoy buscando:

Aquí está mi extensión de 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); }

Y aquí hay un setup.py que funciona:

from distutils.core import setup from distutils.extension import Extension setup(name=''c_extension_demo'', ext_modules = [Extension(''c_extension'', sources = [''c_extension.c''])])

Después de instalar en un virtualenv puedo hacer esto:

>>> import c_extension >>> c_extension.get_answer() 42

Pero me gustaría tener c_extension en vivo en un submódulo, digamos foo.bar . ¿Qué necesito cambiar en esta canalización para poder lograr que el comportamiento en el shell de Python sea así:

>>> import foo.bar.c_extension >>> foo.bar.c_extension.get_answer() 42


Solo cambio

Extension(''c_extension'', ...)

a

Extension(''foo.bar.c_extension'', ...)

Necesitará los archivos __init__.py en cada uno de los directorios de foo y de bar , como de costumbre. Para tener estos paquetes con el módulo en su setup.py, necesita agregar

packages = [''foo'', ''foo.bar''],

a su llamada de configuración (), y necesitará la estructura del directorio

setup.py foo/ __init__.py bar/ __init__.py

en su directorio de origen.