2.1 Elencare tutti i package

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.