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.
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.