Subsections


4 Installazione personalizzata

Qualche volta, lo schema di installazione alternativo descritto nella sezione 3 non fa quello che volete. Potreste volere modificare solo una o due directory mentre tenete tutto sotto la stessa directory di base, o vorreste ridefinire completamente lo schema di installazione. In ogni caso, otterrete una schema d'installazione personalizzato.

Avrete probabilmente visto la colonna delle ``opzioni di sovrascrittura'' nelle tabelle che descrivono lo schema di installazione alternativo sopraindicato. Queste opzioni definiscono il vostro schema d'installazione personalizzato. Queste opzioni di sovrascrittura possono essere relative, assolute o esplicitamente definite nei termini di una delle directory di base dell'installazione. (Ci sono due directory di base d'installazione e normalmente sono le stesse--differiscono nell'uso dello ``schema prefissato'' Unix e quando fornite opzioni differenti per --prefix ed --exec-prefix.)

Per esempio, volete installare un modulo nella vostra directory home sotto Unix--ma volete che gli script vadano in ~/scripts piuttosto che in ~/bin. Come potreste aspettarvi, potete sovrascrivere questa directory mediante l'opzione --install-scripts; in questo caso , ha più senso fornire un percorso relativo, che verrà interpretato come relativo alla directory di base dell'installazione (la vostra home directory, in questo caso):

python setup.py install --home=~ --install-scripts=scripts

Un altro esempio Unix: supponiamo che la vostra installazione di Python sia stata compilata ed installata con il prefisso /usr/local/python, così uno script di un'installazione standard verrà caricato in /usr/local/python/bin. Se invece lo volete in /usr/local/bin, dovrete fornire questa directory assoluta per l'opzione --install-scripts:

python setup.py install --install-scripts=/usr/local/bin

Quanto descritto esegue un'installazione usando lo ``schema prefissato'', dove il valore per prefix è ovunque il vostro interprete Python sia installato con -- /usr/local/python in questo caso.

Se avete Python su Windows, potreste volere conservare i moduli di terze parti nella sottodirectory prefix, invece che nella predefinita prefix. Questo è semplice quasi come la personalizzazione dello script di installazione nella directory--dovete solamente ricordare che ci sono due tipi di moduli che vi interessano, moduli puri e moduli non puri (per esempio moduli provenienti da una distribuzione non pura). Per esempio:

python setup.py install --install-purelib=Site --install-platlib=Site

Le directory d'installazione specificate sono relative al prefix. All'occorrenza, potete anche assicurarvi che queste directory siano nel percorso di ricerca dei moduli di Python, inserendo un file .pth in prefix. Vedete la sezione 4.1 per capire come modificare il percorso di ricerca di Python.

Se volete definire un intero schema di installazione, dovete soltanto fornire tutte le opzioni delle directory di installazione. Il metodo raccomandato per farlo è fornire percorsi relativi; per esempio, se volete mantenere tutti i moduli relativi a Python sotto python nella vostra home e volete una directory separata per ogni piattaforma che usate, sempre nella vostra home directory, potreste definire il seguente schema di installazione:

python setup.py install --home=~ \
                        --install-purelib=python/lib \
                        --install-platlib=python/lib.$PLAT \
                        --install-scripts=python/scripts
                        --install-data=python/data

o, in modo equivalente,

python setup.py install --home=~/python \
                        --install-purelib=lib \
                        --install-platlib='lib.$PLAT' \
                        --install-scripts=scripts
                        --install-data=data

$PLAT non è (necessariamente) una variabile di sviluppo--verrà espansa da Distutils come se analizzasse le opzioni della vostra riga di comando, come è stato fatto quando sono stati analizzati i vostri file di configurazione.

Ovviamente, specificare l'intero schema di installazione ogni volta che installate un nuovo modulo di una distribuzione diventerebbe molto tedioso. In tal caso, potete mettere queste opzioni nel file di configurazione di Distutils (vedete la sezione 5):

[install]
install-base=$HOME
install-purelib=python/lib
install-platlib=python/lib.$PLAT
install-scripts=python/scripts
install-data=python/data

o, in modo equivalente,

[install]
install-base=$HOME/python
install-purelib=lib
install-platlib=lib.$PLAT
install-scripts=scripts
install-data=data

Notate che vi sono cose non equivalenti, nel caso in cui forniate una differente directory di installazione di base quando eseguite lo script di setup. Per esempio,

python setup.py --install-base=/tmp

nel primo caso installerà i moduli puri in /tmp/python/lib ed in /tmp/lib nel secondo. (Per il secondo caso, probabilmente vorrete vorrete fornire una base di installazione in /tmp/python.)

Avrete probabilmente notato l'uso di $HOME e $PLAT nell'esempio di configurazione del file in ingresso. Quelle sono le variabili di configurazione di Distutils, che assomigliano molto alle variabili di ambiente. Di fatto, potete usare le variabili di ambiente nei file di configurazione su piattaforme che supportano questa notazione, ma Distutils definisce anche qualche ulteriore variabile che potrebbe non essere presente nel vostro ambiente, come $PLAT. (All'occorrenza, su sistemi che non hanno variabili di ambiente, come Mac OS 9, le variabili di configurazione fornite da Distutils sono le uniche che potete usare.) Vedete la sezione 5 per i dettagli.


4.1 Modificare il percorso di ricerca di Python

Quando l'interprete Python esegue un'istruzione import, ricerca sia codice Python che moduli di estensione lungo il percorso di ricerca. Un valore predefinito per il percorso viene configurato nel binario Python quando l'interprete viene compilato. Potete determinare il percorso per importare il modulo sys e stampare il valore di sys.path.

$ python
Python 2.2 (#11, Oct  3 2002, 13:31:27)
[GCC 2.96 20000731 (Red Hat Linux 7.3 2.96-112)] on linux2
Type ``help'', ``copyright'', ``credits'' or ``license'' for more information.
>>> import sys
>>> sys.path
['', '/usr/local/lib/python2.3', '/usr/local/lib/python2.3/plat-linux2',
 '/usr/local/lib/python2.3/lib-tk', '/usr/local/lib/python2.3/lib-dynload',
 '/usr/local/lib/python2.3/site-packages']
>>>

La stringa null in sys.path rappresenta la directory di lavoro corrente.

La convenzione prevista per i pacchetti installati localmente è di metterli nella directory .../site-packages/, ma potreste volere installare i moduli Python all'interno di qualche directory arbitraria. Per esempio il vostro sito potrebbe avere una convenzione per prendere tutto il software correlato al server web sotto /www. I moduli Python aggiuntivi potrebbero quindi stare in /www/python e in previsione di effettuarne una successiva importazione, questa directory dovrebbe essere aggiunta al sys.path. Esistono vari modi per aggiungere directory al percorso di ricerca di Python.

Un sistema conveniente è quello di aggiungere una directory al file di configurazione, che sia già presente nel percorso di ricerca di Python, di solito nella directory .../site-packages/. I file di configurazione del percorso hanno l'estensione .pth ed ogni riga deve contenere un singolo percorso che verrà accodato a sys.path. (Perché il nuovo percorso sia accodato a sys.path, i moduli nelle directory aggiunte non dovranno sovrascrivere i moduli standard. Questo significa che non potete utilizzare questo meccanismo per installare nuove versioni di moduli standard.)

I percorsi possono essere assoluti o relativi, in questo caso sono relativi alla directory contenente il file .pth. Ogni directory aggiunta al percorso di ricerca verrà scansionata in cerca di file .pth. Vedete la documentazione per il modulo site per maggiori informazioni.

Un modo meno conveniente è quello di editare il file site.py della libreria standard di Python e modificare il sys.path. Il site.py viene automaticamente importato quando viene eseguito l'interprete Python, a meno che non sia presente l'opzione -S per sopprimere questo comportamento. In questo modo potete semplicemente editare il file site.py ed aggiungere due righe.

import sys
sys.path.append('/www/python/')

Tuttavia, se reinstallate la stessa versione di Python (forse quando fate un upgrade da 2.2 alla 2.2.2 per esempio) il file site.py verrà sovrascritto dalla versione corrente. Dovete ricordarvi quello che è stato modificato e salvarvi una copia prima di effettuare l'installazione.

Ci sono due variabili d'ambiente che possono modificare sys.path. Tramite PYTHONHOME è possibile impostare un valore alternativo per il valore prefix dell'installazione Python. Per esempio, se PYTHONHOME viene impostato a "/www/python", il percorso di ricerca verrà impostato a ['', '/www/python/lib/python2.2/', '/www/python/lib/python2.3/plat-linux2', ...].

La variabile PYTHONPATH può essere impostata ad una lista di percorsi che verranno aggiunti all'inizio di sys.path. Per esempio, se PYTHONPATH viene impostato a "/www/python:/opt/py", il percorso di ricerca inizierà con ['/www/python', '/opt/py']. (Notate che le directory devono esistere, nell'ordine con le quali vengono aggiunte a sys.path; il modulo site rimuove i percorsi che non esistono.)

Infine, sys.path è solamente una semplice lista Python, così ogni applicazione Python può modificarla aggiungendo o rimuovendo le sue voci.

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