2011-10-26 8 views
23

C'è un modo per comunicare a Python ulteriori posizioni site-packages senza modificare gli script esistenti?Configurazione di Python per l'utilizzo di percorsi aggiuntivi per i pacchetti del sito

Sul mio server CentOS 5.5 ho un'installazione Python 2.7 installata in /opt/python2.7.2 e c'è una cartella site-packages allo /opt/python2.7.2/lib/python2.7/site-packages.

La ragione di ciò è che non volevo disturbare l'installazione Python 2.4 esistente fornita con la distribuzione 5.5.

Tuttavia un'applicazione Python di terzi ha anche aggiunto una cartella site-packages a: /usr/local/lib/python2.7/site-packages e si è installata in quella posizione.

Questa è in parte colpa mia perché non ho modificato lo dell'applicazione Makefile prima dell'installazione, tuttavia non c'è molto che possa fare ora.

So che posso fare questo:

import sys; sys.path.insert(0, "/usr/local/lib/python2.7/site-packages") 

Tuttavia sarebbe coinvolgermi rintracciare ogni script e l'aggiunta di cui sopra, che non è l'ideale dovrebbe esserci aggiornamenti in futuro.

Per ovviare a questo ho creato un link simbolico nella /opt/python2.7.2/lib/python2.7/site-packages alla posizione di questa applicazione di terze parti:

 
ln -sf /usr/local/lib/python2.7/site-packages/theapp /opt/python2.7.2/lib/python2.7/site-packages/theapp 

Questo sembra funzionare bene, ma mi chiedo se c'è un modo migliore?

risposta

36

È possibile utilizzare Site-specific configuration hook.

"Un file di configurazione del percorso è un file cui nome ha la forma name.pth ed esiste in uno dei quattro elenchi di cui sopra; il suo contenuto sono elementi aggiuntivi (uno per riga) da aggiungere al sys.path".

Nel tuo caso, si dovrebbe essere in grado di ottenere ciò che si vuole, semplicemente cadere in un file .pth contenente il percorso della directory per includere:

[[email protected]]$ echo "/usr/local/lib/python2.7/site-packages/" > /opt/python2.7.2/lib/python2.7/site-packages/usrlocal.pth 
+0

Questo funziona, ma ho deciso di mordere il proiettile e correggere la distribuzione. Ma grazie comunque, utile sapere per il futuro. – Kev

+2

Aggiunge il percorso alla * fine * del percorso python. Cosa succede se vuoi che i tuoi pacchetti di siti personalizzati vengano prima di tutto? Ho sperimentato un file sitecustomize.py con un certo successo, ma sembra che ci siano casi limite in cui semplicemente manipolare il percorso Python non è sufficiente. – wryfi

2

si potrebbe sostituire il file eseguibile pitone con un script wrapper che aggiunge il percorso di installazione aggiunto a PYTHONPATH. Ma questo è un kludge.

Ma proverei a risolvere l'installazione del componente aggiuntivo in modo che entri correttamente nella directory dei pacchetti del sito.

+0

La risposta di Shawn ha fatto il trucco, ma hai ragione anche nel fissare l'installazione in realtà è migliore a lungo termine. – Kev

Problemi correlati