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'}
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'}
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).