Se si ha a disposizione più di una coppia di moduli da distribuire, specialmente se risiedono in package multipli, è probabilmente più facile specificare l'intero gruppo di package anziché ogni package individualmente. Questo funziona anche se il modulo non è in un package; si può semplicemente dire alle Distutils di elaborare i moduli dal package principale e tutto funziona nello stesso modo, come per ogni altro package (eccetto il caso in cui non si abbia un file __init__.py).
Lo script di setup dell'ultimo esempio potrebbe anche essere scritto come:
from distutils.core import setup setup(name='foobar', version='1.0', packages=[''], )
Se questi due file vengono spostati in una sottodirectory, ma restano nel package principale, per esempio:
<root>/ setup.py src/ foo.py bar.py
from distutils.core import setup setup(name='foobar', version='1.0', package_dir={'': 'src'}, packages=[''], )
Solitamente, comunque, si vorranno distribuire molti moduli nello stesso package (o sottopackage). Per esempio, se i moduli foo e bar fanno parte del package foobar, un modo di dichiarare il proprio albero dei sorgenti è
<root>/ setup.py foobar/ __init__.py foo.py bar.py
from distutils.core import setup setup(name='foobar', version='1.0', packages=['foobar'], )
Se si vogliono inserire i moduli in directory non dichiarate per i loro package, si deve utilizzare nuovamente l'opzione package_dir. Per esempio, se la directory src contiene i moduli del package foobar:
<root>/ setup.py src/ __init__.py foo.py bar.py
from distutils.core import setup setup(name='foobar', version='1.0', package_dir={'foobar': 'src'}, packages=['foobar'], )
Altrimenti, se si volesse inserire i moduli del proprio package principale direttamente nella radice della distribuzione:
<root>/ setup.py __init__.py foo.py bar.py
from distutils.core import setup setup(name='foobar', version='1.0', package_dir={'foobar': ''}, packages=['foobar'], )
Se si hanno delle sottodirectory, devono essere esplicitamente elencate in packages, ma ogni voce in package_dir automaticamente si estende ai sotto package. (In altre parole, le Distutils non analizzano il proprio albero dei sorgenti, provando ad individuare quale directory corrisponda al package Python e cercando i file __init__.py. Comunque, se lo schema predefinito compone il sotto package:
<root>/ setup.py foobar/ __init__.py foo.py bar.py subfoo/ __init__.py blah.py
from distutils.core import setup setup(name='foobar', version='1.0', packages=['foobar', 'foobar.subfoo'], )
Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.