Igual que escribir módulos de extensión de Python es algo más complicado que escribir simples módulos de Python, describírselos a las Distutils también resulta más complicado. A diferencia de los módulos puros, no basta con enumerar los paquetes y los módulos y esperar que las Distutils salgan y encuentren los ficheros adecuados. Hay que especificar el nombre de la extensión, los ficheros fuente y los requisitos de compilación/enlace que pudiera haber (directorios de ``include'', bibliotecas de enlace...).
Todo esto se hace mediante otro argumento clave a setup(), la opción extensions. extensions es simplemente una lista de instancias de Extension, cada una de las cuales describe un módulo de extensión simple. Supón que tu distribución incluye una sola extensión, llamada foo e implementada por foo.c. Si no se necesitan instrucciones adicionales para el compilador/enlazador, es bastante simple describir esta extensión:
Extension("foo", ["foo.c"])
from distutils.core import setup, Extension setup(name = "foo", version = "1.0", ext_modules = [Extension("foo", ["foo.c"])])
La clase Extension (en realidad, la maquinaria subyacente de
construcción de extensiones implementada por la orden built_ext
)
proporciona mucha flexibilidad a la hora de describir extensiones de Python,
tal como se describe en las secciones posteriores.