Come modificare globalmente il predefinito PYTHONPATH (sys.path)?


33

Su un sistema Ubuntu (10.10), ho un pacchetto Python che si installa da solo /usr/local/lib/python2.6/site-packages/. Questo non è contenuto nel percorso predefinito (sys.path). Come aggiungo questa directory al percorso?

L'impostazione della $PYTHONPATHvariabile d'ambiente è una soluzione, ovviamente, ma sto cercando un modo più elegante per farlo. Ad esempio easy_installinserisce anche dei pacchetti installati, il mio sys.path è simile al seguente:

['', '/usr/local/lib/python2.6/dist-packages/keyring-0.5.1-py2.6.egg', 
'/usr/lib/python2.6', '/usr/lib/python2.6/plat-linux2', '/usr/lib/python2.6/lib-tk',  
'/usr/lib/python2.6/lib-old', '/usr/lib/python2.6/lib-dynload', 
'/usr/local/lib/python2.6/dist-packages', '/usr/lib/python2.6/dist-packages', 
'/usr/lib/python2.6/dist-packages/PIL', '/usr/lib/pymodules/python2.6', 
'/usr/lib/pymodules/python2.6/gtk-2.0']

quindi il percorso ovviamente non è quello predefinito incorporato nel binario Python.

Esiste un singolo file di configurazione che contiene le voci sopra? O in che modo è possibile modificarlo?

Risposte:


27

La documentazione del modulo del sito e la modifica del percorso di ricerca di Python sembrano essere ciò che stai cercando.

Per quanto ho capito, queste voci sono state aggiunte sys.pathda:

  • /usr/lib/python2.6/site.py
  • /usr/lib/python2.6/dist-packages/site.py
    (Cambia 2.6 nella tua versione di Python.)

Il modo più semplice per cambiarlo è aggiungere un file /usr/local/lib/python2.6/dist-packages/site-packages.pthcontenente ../site-packages.

In alternativa, forse puoi insegnare il pacchetto da usare site.getsitepackages()?


1
grazie, funziona perfettamente :) (Ho finito per aggiungere un file .pth a /usr/local/python2.6/dist-packages, contenente "../site-packages")
Latanius,

1
Puoi anche creare un modulo chiamato sitecustomize.pyche site.pytenta di importare e modificare sys.pathlì.
TestUser16418,

5

È possibile creare un nuovo file chiamato /etc/profile.d/local_python.shcon il contenuto

PYTHONPATH="/usr/local/lib/python2.6/site-packages/":"${PYTHONPATH}"
export PYTHONPATH

Che imposterà la PYTHONPATHvariabile per tutti gli utenti che hanno effettuato l'accesso sul tuo sistema.


7
Questo non è davvero universale. Il meccanismo /etc/profile.d funzionerà solo con shell di login per le persone con shell che usano /etc/profile.d (bash / ksh / zsh). Sono sicuro che gli utenti di csh non vedranno questo cambiamento. Inoltre, verrà ignorato in cron / at jobs.
Rich Homolka,

2
questo è un bel modo di impostare variabili d'ambiente globali (ancora un'altra cosa che ho imparato oggi), ma come ho detto nel post, stavo cercando un modo più pitonico :)
Latanius,

4

Vorrei riassumere le mie scoperte sulla modifica del percorso di Python. Ci sono due modi per farlo.

  • .pth file
  • PYTHONPATH

Qualsiasi file .pth che si trova sul percorso predefinito (vedi sotto) includerà il suo contenuto in sys.path. Il formato di detto file .pth è semplice: un percorso (cartella) per riga. Sorprendentemente, i percorsi possono essere assoluti o relativi al file .pth .

Il percorso predefinito è dove risiede l'interprete e <some-prefix>/lib/python<version>/site-packagesdove si <some-prefix>trova di solito /usr/.

PYTHONPATHè una variabile ambientale del tuo sistema operativo. Sui sistemi unix li elenchi per env. La modifica globale di tali variabili avviene tramite script .sh all'interno della /etc/profile.d/cartella, come indicato da @ TestUser16418.


2
È PYTHONPATH senza "_"
heroxbd il

1

Ad esempio, se si desidera importare il sudsmodulo disponibile come .eggfile:

egg_path = '/home/shahid/suds_2.4.egg'

sys.path.append(egg_path)

import suds
# ... rest of code
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.