5. Creare una distribuzione precompilata

Una ``distribuzione precompilata'' è quello che si intende pensando o a ``pacchetti di binari'' o ad un ``installer'' (dipendente dal background). Non è necessariamente binario, perché potrebbe contenere solo codice sorgente Python e/o byte-code; e non lo si chiama package, perché quella parola è già usata in Python. (E ``installer'' è un termine specifico nel mondo dei principali sistemi desktop).

Una distribuzione precompilata è il modo di rendere la vita facile agli installatori della distribuzione del vostro modulo: per utenti di sistemi Linux basati su RPM si tratta di un binario RPM; per gli utenti Windows, si tratta di un installer eseguibile; per gli utenti Linux basati su Debian, è un package Debian; e così via. Ovviamente, nessuna persona sarà in grado di creare distribuzioni per ogni piattaforma esistente, così le Distutils sono state progettate per permettere agli sviluppatori di moduli di concentrarsi sulla loro specialità--scrivere codice e creare la distribuzione sorgente--quando una figura intermedia chiamato packager si occupa di trasformare la distribuzione sorgente in distribuzioni compilate per tante piattaforme quanti sono i packagers.

Normalmente, lo sviluppatore di moduli può essere proprio il packagers; o il packager potrebbe essere un volontario ``esterno'' che ha accesso alla piattaforma a cui non non ha accesso lo sviluppatore; o potrebbe essere una persona che periodicamente recupera la nuova distribuzione sorgente e la trasforma nella distribuzione compilata per tutte le piattaforma a cui ha accesso. Indipendemente da chi sia, un packager usa lo script di setup e l'insieme dei comandi bdist per generare distribuzioni compilate.

Come semplice esempio, se si esegue il seguente comando nella directory principale dei sorgenti di Distutils:

python setup.py bdist

le distutils compilano la propria distribuzione di moduli (in questo caso le proprie Distutils), realizzando un'installazione ``fasulla'' (anche nella directory build, e creano il tipo predefinito della distribuzione compilata per la propria piattaforma. Il formato predefinito per le distribuzioni compilate è un stupido file tar su Unix ed un semplice installer eseguibile su windows. (Quel file tar viene considerato ``stupido'' perché deve essere scompattato in una specifica locazione per fare in modo che lavori.)

Comunque, il citato comando in un sistema Unix crea Distutils-1.0.plat.tar.gz; scompattando questo file tarball nella giusta posizione, installa le Distutils come se fosse stato codice scaricato e su cui viene eseguito python setup.py install. (Il ``posto giusto'' è o la root del filesystem o la directory Python prefix, a seconda dell'opzione data al comando bdist_dumb: quella predefinita crea la distribuzione stupida relativamente a prefix.)

Ovviamente, per le distribuzioni in puro Python, questo non è altro che l'esecuzione di python setup.py install--ma per le distribuzioni non pure, che includono estensioni che hanno la necessità di essere compilate, può significare la differenza tra coloro che sono in grado di usare le proprie estensioni e chi no. La creazione di distribuzioni compilate ``smart'', come un package RPM o un installer eseguibile per Windows è spesso più conveniente per gli utenti, anche se la propria distribuzione non contiene alcuna estensione.

Il comando bdist ha un'opzione --formats simile al comando sdist, che si può usare per selezionare il tipo di distribuzione compilata da generare: per esempio,

python setup.py bdist --format=zip

può, quando eseguito su di un sistema Unix, creare Distutils-1.0.plat.zip--ancora, questo archivio dovrebbe venir scompattato nella directory principale per installare le Distutils.

I formati disponibili per distribuzioni già pronte sono:

Formato  Descrizione  Note 
gztar file tar gz (.tar.gz) (1),(3)
ztar file tar compresso (.tar.Z) (3)
tar file tar (.tar) (3)
zip file zip (.zip) (4)
pkgtool Solaris pkgtool  
sdux HP-UX swinstall  
rpm RPM (5)
wininst autoestrattore per file ZIP per Windows (2),(4)

Note:

(1)
predefinito su Unix
(2)
predefinito su ** to-do! **
(3)
richiede utility esterne: tar e possibilmente uno tra gzip, bzip2 o compress
(4)
richiede o un'utility esterna come zip o il modulo zipfile (parte della libreria standard Python a partire da Python 1.6)
(5)
richiede un'utility esterna rpm, versione 3.0.4 o maggiore (usare rpm --version per sapere quale versione si sta usando)

Non si deve necessariamente usare il comando bdist con l'opzione --formats; si può anche usare il comando che direttamente implementa il formato a cui si è interessati. Alcuni di questi ``sottocommandi'' bdist generano attualmente diversi formati simili: per inciso, il comando bdist_dumb genera tutti i formati archivio ``stupido'' (tar, ztar, gztar e zip) ed il sotto-comando bdist_rpm genera sia gli RPM binari che sorgenti. I sottocomandi bdist ed il formato generato da ciascuno sono:

Comando  Formato 
bdist_dumb tar, ztar, gztar, zip
bdist_rpm rpm, srpm
bdist_wininst wininst

La seguente sezione fornisce dettagli su ogni comando individuale bdist_*



Subsections
Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.