Distribución de módulos Python
Greg Ward
8 de diciembre de 2000
E-mail:
[email protected]
Este documento describe las Herramientas de Distribución de Python (“Distutils”) desde el punto de vista del de-
sarrollador de módulos. Describe cómo utilizar las Distutils para hacer que los módulos y extensiones de Python
fácilmente accesibles a una amplia audiencia haciendo más automático el proceso de compilar/liberar/instalar.
Resumen
Índice General
1
Introducción
2 Conceptos y terminología
.
2.1 Un ejemplo simple .
2.2 Terminología general de Python . . .
2.3 Terminología específica de Distutils
.
.
.
.
.
.
.
.
.
.
.
.
. .
.
.
.
.
3 Escritura del guion de instalación
.
3.1 Enumeración de paquetes completos .
.
3.2 Enumeración de módulos individuales .
.
3.3 Descripción de los módulos de extensión .
.
.
.
.
Nombre de extensiones y de paquetes
Ficheros fuente de extensión .
.
.
Opciones del preprocesador .
.
Opciones de bibliotecas .
.
.
.
.
.
.
. . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. .
.
.
.
.
.
.
.
.
. .
.
.
.
.
.
.
.
.
. .
. .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4 Escritura del fichero de configuración de la instalación
5 Creación de una distribución de fuentes
5.1 Especificación de los ficheros a distribuir
5.2 Opciones relativas al manifiesto .
.
.
.
.
.
.
6 Creación de distribuciones binarias
6.1 Creación de distribuciones compiladas bobas
.
6.2 Creación de paquetes RPM .
.
6.3 Creación de instaladores de Windows
.
.
.
.
.
.
.
.
.
7 Ejemplos
7.1 Distribución Python pura (por módulo) .
7.2 Distribución Python pura (por paquete)
.
7.3 Módulo de extensión simple .
.
. . .
7.4 Módulos de extensión múltiples
7.5 Todo junto .
.
.
. .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. .
.
.
. .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. .
.
.
.
.
.
. .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. .
.
.
.
. .
.
.
.
.
.
.
.
. .
. .
. .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. .
.
.
.
.
.
.
. .
.
.
.
. .
.
.
.
.
.
. .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. .
. .
. .
.
.
.
.
.
.
.
.
. .
.
. .
. .
.
. .
.
. .
.
. .
.
.
. .
. . .
. .
. .
.
.
.
.
.
.
. .
. .
.
.
. .
.
.
.
.
. .
.
.
. .
. .
. .
.
.
.
.
.
.
.
.
.
.
.
.
. .
.
. .
.
. . . .
. .
.
.
. .
.
.
2
2
3
4
5
5
6
6
7
7
8
8
9
10
12
12
14
14
16
16
18
18
18
18
18
18
18
8 Extensión de las Distutils
8.1 Extensión de órdenes existentes
8.2
.
Implementación de nuevas órdenes . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. .
. .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. . .
.
. .
9 Referencia
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
9.2
.
.
. .
.
.
.
.
. .
.
.
. .
.
.
. .
.
.
.
.
.
.
9.1 Compilación de módulos: la familia de órdenes build .
.
.
.
.
.
.
.
.
.
build .
.
.
.
.
build_py .
.
.
.
build_ext .
.
.
.
build_clib .
.
.
Instalación de módulos: la familia de órdenes install .
.
.
.
install_lib .
.
. .
.
.
install_data .
.
. .
.
install_scripts .
.
.
.
.
9.3 Acciones de limpieza: la orden clean .
.
.
9.4 Creación de una distribución de fuentes: la orden sdist .
.
9.5 Creación de una distribución compilada: la familia de órdenes bdist .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. .
.
.
.
.
.
.
. . .
.
.
.
.
. .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
18
18
18
18
18
18
18
18
18
18
18
18
18
19
19
19
19
19
19
19
.
.
.
.
. .
. .
.
.
. .
. .
.
.
. .
. .
.
.
. . . .
. .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. .
. .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. .
. .
. .
. . . .
. .
. .
. .
. . .
. .
. .
. .
. .
. .
.
. .
.
.
.
.
.
. .
.
.
.
. .
.
.
.
.
.
.
.
.
. .
.
. .
.
.
.
.
.
.
. .
.
.
.
. .
. .
. .
. .
. .
.
.
.
.
.
.
.
. .
.
.
.
.
.
. .
.
.
.
.
.
.
.
.
.
. .
.
.
.
.
.
.
. .
.
.
.
.
.
.
.
.
. .
.
.
. .
. .
. .
. .
. . .
. .
.
. .
.
.
. .
. . . .
.
.
. . . .
. .
.
.
.
.
. .
. .
. .
.
.
. .
. .
.
.
. .
. .
.
.
. .
. .
.
.
.
.
blib .
blib_dumb .
blib_rpm .
.
blib_wise .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. .
. .
. .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1 Introducción
Hasta ahora, los desarrolladores de módulos de Python no disponían de mucha infraestructura para la distribución de
módulos, ni los usuarios de Python de soporte para instalar y mantener módulos de terceras partes. Con la introducción
de las Herramientas de Distribución de Python (“Distutils” para abreviar) en Python 1.6, esta situación empezará a
mejorar.
Este documento sólo cubre el uso de Distutils para distribuir tus módulos de Python. El uso de Distutils no te ata
a Python 1.6 o superiores, sin embargo. Las Distutils funcionan perfectamente con Python 1.5.2 y es razonable (se
espera que común) que los usuarios de Python descarguen e instalen por separado las Distutils para poder instalar tus
módulos. Los usuarios de Python 1.6 (o superiores), por supuesto, no tendrán que añadir nada a su distribución de
Python para usar las Distutils en la instalación de módulos de terceros.
Este documento se concentra en el papel del desarrollador/distribuidor. Si buscas información sobre la instalación de
módulos de Python, deberías consultar el manual Instalación de módulos de Python.
2 Conceptos y terminología
El uso de las Distutils es bastante simple,
tanto para los desarrolladores de módulos como para los usua-
rios/administradores que han de instalar módulos de terceros. Como desarrollador, tus responsabilidades (¡además
de escribir código fiable, bien documentado y probado, por supuesto!) son:
• escribir un guion de instalación (‘setup.py’ por convención)
• (opcional) escribir un fichero de configuración de la instalación
• crear una distribución de código fuente
• (opcional) crear una o más distribuciones compiladas (binarias)
2
2 Conceptos y terminología
En este documento está cubierta cada una de estas tareas.
No todos los desarrolladores de módulos tienen acceso a varias plataformas, por lo que no siempre es factible esperar
que creen varias distribuciones binarias. Se espera que aparecerán intermediarios (los empaquetadores) para cubrir
esta necesidad. Los empaquetadores tomarán las distribuciones de código fuente liberadas por los desarrolladores de
módulos, las compilarán en una o varias plataformas y liberarán las distribuciones binarias resultantes. De este modo,
los usuarios de las plataformas más comunes serán capaces de instalar las distribuciones de módulos de Python más
extendidas del modo más natural en su plataforma, sin tener que ejecutar un solo guion ni compilar una línea de código.
2.1 Un ejemplo simple
El guion de instalación suele ser bastante simple, aunque, por estar escrito en Python, no hay límites arbitrarios sobre
lo que se puede hacer con él.1 Si sólo quieres distribuir un módulo denominado foo, contenido en un fichero ‘foo.py’,
tu guion de instalación puede reducirse a esto:
from distutils.core import setup
setup (name = "foo",
version = "1.0",
py_modules = ["foo"])
Observaciones:
• la mayoría de la información que se proporciona a las Distutils va en forma de argumentos clave a la función
setup()
• dichos argumentos pertenecen a dos categorías: meta-datos del paquete (nombre, número de versión) e informa-
ción sobre lo contenido en el paquete (una lista de módulos en Python puro, en este caso)
• los módulos se especifican por nombre de módulo, no nombre de fichero (esto se aplica también a los paquetes
y extensiones)
• se recomienda que proporciones más meta-datos, en particular tu nombre, dirección electrónica de correo y un
URL del proyecto (consulta la sección 3 si quieres ver un ejemplo)
Para crear una distribución de código fuente para este módulo, crearías un guion de instalación, ‘setup.py’, que contu-
viera el código anterior, y lo ejecutarías:
python setup.py sdist
lo que crearía un fichero comprimido (por ejemplo, un fichero tar de Unix, un zip en Windows) que contendría tu guion
de instalación, ‘setup.py’ y tu módulo, ‘foo.py’. El fichero se llamaría ‘Foo-1.0.tar.gz’ (o ‘.zip’) y se desempaquetaría
en un directorio ‘Foo-1.0’.
Si un usuario/a desea instalar tu módulo foo module, sólo tiene que descargar ‘Foo-1.0.tar.gz’ (o ‘.zip’), desempaque-
tarlo y, desde el directorio ‘Foo-1.0’, ejecutar
python setup.py install
lo que finalmente copiaría ‘foo.py’ al directorio adecuado para módulos de terceros en su instalación de Python.
Este sencillo ejemplo muestra algunos conceptos fundamentales de las Distutils: Primero, tanto los desarrolladores
como los instaladores tienen la misma interfaz de usuario básica, el guion de instalación. La diferencia radica en qué
1Pero modérate respecto a poner operaciones arbitrariamente costosas en el guion de instalación. Al contrario de los guiones del tipo de autoconf
[N. del T.: autoconf es la herramienta de GNU de configuración multiplataforma], es posible que
Comentarios de: Distribución de módulos Python (0)
No hay comentarios