5.1 Especificación de los ficheros a distribuir
Si no se proporciona una lista explícita de ficheros (o instrucciones de cómo
generarla), la orden sdist
incluye un conjunto mínimo en la distribución
de fuentes:
- todos los ficheros fuentes Python implicados por py_modules y
opciones packages
- todos los ficheros fuente C mencionados en ext_modules u
opciones libraries (** getting C library sources currently
broken - no get_source_files() method in build_clib.py! **)
- cualquier cosa con pinta de guion de pruebas: test/test*.py
(en la actualidad, las Distutils no hacen nada con los guiones de pruebas salvo
incluirlos en las distribuciones de fuentes, pero en el futuro existirá una
norma para la comprobación de las distribuciones de módulos de Python)
- README.txt, léame, (o README), setup.py (o como
llamases a tu guion de configuración) y setup.cfg
Esto puede valer en algunos casos, pero es común que haya que especificar
más ficheros para distribuir. El modo típico de hacerlo es escribir una
plantilla del manifiesto, denominada MANIFEST.in de forma predeterminada.
La plantilla del manifiesto tiene simplemente una lista de instrucciones de cómo
generar el fichero de manifiesto, denominado MANIFEST, que contiene
la lista exacta de los ficheros a incluir en la distribución fuente. La orden
sdist
procesa esta plantilla y genera un manifiesto basado en las
instrucciones contenidas en ella y en lo que se encuentre en el sistema de ficheros.
Si prefieres escribir tu propio fichero de manifiesto, el formato es bastante sencillo:
un fichero por línea, sólo ficheros normales (o enlaces simbólicos). Si proporcionas
tu propio MANIFEST, hay que especificar todo: el juego predeterminado de ficheros
anteriormente descrito no se aplica en este caso.
La plantilla del manifiesto tiene una orden por línea, donde cada orden
especifica un conjunto de ficheros que incluir o excluir de la distribución
fuente. Por ejemplo, y retomando la propia plantilla de manifiesto de las Distutils:
include *.txt
recursive-include examples *.txt *.py
prune examples/sample?/build
El significado debería resultar claro: incluir todos los ficheros de la raíz de
la distribución que concuerden con *.txt
, todos los ficheros bajo
examples que concuerden con *.txt
o *.py
, y
excluir todos los ficheros que concuerden con examples/sample?/build
. Todo
ello se realiza tras el conjunto de inclusión estándar, por lo que se puede excluir
ficheros del conjunto estándar con instrucciones explícitas en la plantilla del manifiesto (o
se puede usar la opción --no-defaults para desactivar el conjunto estándar
por completo). Hay varias órdenes más en el mini-lenguaje de la plantilla del manifiesto. Consulta
la sección .
El orden de las órdenes en la plantilla del manifiesto es relevante: inicialmente,
tenemos la lista inicial predeterminada descrita anteriormente y cada orden
va retirando o agregando ficheros de la lista. Una vez se ha procesado por completo
la plantilla del manifiesto, eliminamos los ficheros que no deberían incluirse en la
distribución de fuentes:
- todos los ficheros del árbol de compilación de Distutils (por omisión build/)
- todos los ficheros de directorios llamados RCS o CVS
Ahora tenemos nuestra lista completa de ficheros, que se escribe en el manifiesto
para futura referencia y se usa para construir el/los archivo/s final/es de la distribución.
Se puede desactivar el conjunto predeterminado de ficheros incluidos con la opción
--no-defaults y desactivar la lista estándar de exclusiones con la opción
--no-prune.
Siguiendo el propio fichero de manifiesto de las Distutils, vamos a trazar cómo
construye la orden sdist
la lista de ficheros que se incluyen en la distribución
de fuentes de las Distutils:
- incluir todos los ficheros fuente de Python de los subdirectorios distutils y
distutils/command (porque los paquetes correspondientes a esos dos
directorios fueron mencionados en la opción packages
del guion de configuración, según lo contenido en la sección )
- incluir README.txt, setup.py y setup.cfg
(ficheros estándar)
- incluir test/test*.py (ficheros estándar)
- incluir *.txt de la raíz de la distribución (se volverá a encontrar
README.txt de nuevo, pero luego se desbrozan tales redundancias)
- incluir cualquier cosa que concuerde con *.txt o *.py del
subdirectorioexamples y los interiores a éste,
- excluir todos los ficheros de los subdirectorios que concuerden con
examples/sample?/build y los interiores a ellos--esto podría excluir
ficheros incluidos por los dos pasos anteriores, por lo que es importante
que la orden
prune
de la plantilla del manifiesto venga tras la orden
recursive-include
- excluir el árbol build por completo y cualquier directorio
RCS o CVS
- en el árbol examples, incluir cualquier concordancia con
*.txt
- en el árbol examples, incluir cualquier concordancia con
*.py
- eliminar todos los ficheros de los directorios que concuerden con
examples/sample?/build--esto podría excluir
ficheros incluidos por los dos pasos anteriores, por lo que es importante
que la orden
prune
de la plantilla del manifiesto venga tras las las
dos órdenes recursive-include
Al igual que en el guion de configuración, los nombres de ficheros y directorios
de la plantilla del manifiesto deberían separarse por barras /siempre.
Las Distutils se ocuparán de convertir las barras en la representación estándar
de la plataforma de destino. De este modo, la plantilla del manifiesto es
transportable entre diferentes sistemas operativos.
Ver Sobre este documento... para obtener información sobre sugerencias.