L'opzione packages dice a Distutils di elaborare
(compilare, distribuire, installare, etc.) tutti i moduli in
puro Python trovati in ogni package elencato nella lista
packages. Per fare questo naturalmente ci deve essere una
corrispondenza tra ogni nome di package e le directory del filesystem.
La corrispondenza predefinita è quella più ovvia, per esempio il
package distutils si trova nella directory distutils
relativa all'apice della distribuzione. Comunque quando si dice
packages = ['foo']
nel proprio script di setup, si sta dicendo
che le Distuitils troveranno un file foo/__init__.py (che
potrebbe essere pronunciato diversamente nel sistema in uso, ma non
cambia la sostanza) relativo alla directory dove risiede lo script di
setup. Se non si seguirà questa regola, le Distutils emetteranno un
avviso ma tenteranno di elaborare comunque il package incompleto.
Se si sta utilizzando una differente convenzione per costruire la propria directory sorgente, non ci sono problemi: si dovrà semplicemente indicare l'opzione package_dir per informare le Distutils circa le proprie convenzioni. Per esempio, si terranno tutti i sorgenti Python in lib, in modo che tutti i moduli del ``package principale'' (non in tutti i package) siano in lib, i moduli in foo si troveranno in lib/foo, e così via. Si scriverà:
package_dir = {'': 'lib'}
nel nostro script di setup. Le chiavi di questo dizionario sono nomi
di package ed un nome di package vuoto rappresenta il package
principale. In questo caso, quando si dice packages = ['foo`]
,
si sta dichiarando che il file lib/foo/__init__.py esiste.
Un'altra possibile convenzione è quella di mettere il package foo direttamente in lib, il package foo.bar in lib/bar, etc.. Questo verrebbe inserito nello script di setup come:
package_dir = {'foo': 'lib'}
Una voce package: dir
nel dizionario
package_dir implicitamente viene applicata a tutti i
packages e sotto package, per far si che il caso del modulo
foo.bar sia gestito automaticamente. In questo esempio,
packages = ['foo','foo.bar]
ha informato le Distutils di
cercare lib/__init__.py e lib/bar/__init__.py.
(Da tenere a mente che anche se package_dir viene applicata
ricorsivamente, si devono esplicitamente elencare tutti i package in
packages: le Distutils non analizzeranno
ricorsivamente l'albero sorgente alla ricerca di ogni directory con un
file __init__.py.)
Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.