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.