3.1 Enumeración de paquetes completos

La opción packages indica a las Distutils que procese (compile, distribuya, instale, etc.) todos los módulos en Python puros hallados en cada paquete mencionado en la lista packages. Para hacerlo, por supuesto, debe existir una correspondencia entre los nombres de los paquetes y los directorios del sistema de ficheros. La correspondencia por defecto es la evidente, es decir, el paquete distutils se encuentra en el directorio distutils relativo a la raíz de la distribución. De este modo, al decir packages = ['foo'] en tu guion de instalación, te comprometes a que las Distutils encuentren un fichero foo/__init__.py (posiblemente con diferente sintaxis en tu sistema, pero te la puedes imaginar) relativo al directorio en el que reside tu guion de instalación (si no cumples tu compromiso, las Distutils emitirán un aviso pero procesarán el paquete incorrecto de todos modos).

Si utilizas una convención diferente para ordenar tu directorio de fuentes, no hay problema: Sólo tienes que proporcionar la opción package_dir para indicar a las Distutils tu convención. Por ejemplo, si mantienes todo el código fuente en Python bajo lib, para que los módulos del ``paquete raíz'' (los que no están en ningún paquete) estén directamente en lib, los módulos del paquete foo estén en lib/foo, y así sucesivamente, pondrías:

package_dir = {'': 'lib'}
en tu guion de instalación (las claves de este diccionario son nombres de paquetes y un nombre vacío de paquete indica el paquete raíz). En tal caso, cuando digas packages = ['foo'], quieres decir que existe el fichero lib/foo/__init__.py.

Otra convención posible es poner el paquete foo justo en lib, el paquete foo.bar en lib/bar, etc. Esto se describiría en el guion de instalación así:

package_dir = {'foo': 'lib'}
Una entrada package: dir en el diccionario package_dir se aplica implícitamente a todos los paquetes bajo package, por lo que el caso de foo.bar se gestiona de modo automáticamente. En este ejemplo, tener packages = [foo', foo.bar'] indica a las Distutils que busque lib/__init__.py y lib/bar/__init__.py (no olvides que, aunque package_dir se aplica recursivamente, se debe enumerar de manera explícita todos los paquetes de packages: las Distutils no recorrerán tu árbol de directorios buscando un fichero __init__.py).


Ver Sobre este documento... para obtener información sobre sugerencias.