2013-03-04 8 views
22

Sto cercando di rendere un modulo rilevabile su un sistema in cui non dispongo dell'accesso in scrittura alla directory globale site-packages e senza modificare l'ambiente (PYTHONPATH). Ho provato a inserire un file .pth nella stessa directory di uno script che sto eseguendo, ma sembra essere ignorato. Per esempio, ho creato un file extras.pth con il seguente contenuto:Utilizzo di file .pth

N:\PythonExtras\lib\site-packages 

Ma il seguente script, posta ed eseguire nella stessa directory, stampe False.

import sys 
print r"N:\PythonExtras\lib\site-packages" in sys.paths 

L'unica directory in sys.path a cui ho accesso in scrittura è la directory contenente lo script. Esiste un'altra directory (attualmente inesistente) in cui posso inserire extras.pth e visualizzarla? C'è un modo migliore per fare questo?

Sto usando python 2.7 su Windows. Tutte le domande .pth qui reperibili utilizzano le directory del modulo di sistema.

Modifica: Ho rintracciato la directory di installazione di Windows per utente, al numero %APPDATA%\Python\Python27\site-packages. Posso posizionare un modulo lì e verrà importato, ma se metto un file .pth lì, non ha alcun effetto. Questo non dovrebbe funzionare, o sto facendo qualcosa di sbagliato?

risposta

37

Come descritto in the documentation, i file PTH vengono elaborati solo se si trovano nella directory dei pacchetti del sito. (Più precisamente, vengono elaborati se si trovano in una "directory del sito", ma "la directory del sito" stessa è un'impostazione globale per l'installazione di Python e non dipende dalla directory corrente o dalla directory in cui risiede lo script.)

Se la directory contenente lo script è su sys.path, è possibile creare un sitecustomize.py in quella directory. Questo verrà caricato all'avvio di Python. All'interno sitecustomize.py, si può fare:

import site 
site.addsitedir('/some/dir/you/want/on/the/path') 

Questo non solo per aggiungere tale directory, ma aggiungerà come "directory del sito", provocando file PTH lì per essere elaborati. Questo è utile se si desidera creare la propria directory personale site-packages -like.

Se è sufficiente aggiungere una o due directory al percorso, è possibile farlo in modo più semplice. Basta creare una piccola libreria Python che manipola sys.path e quindi importare quella libreria dal proprio script. Qualcosa di simile:

# makepath.py 
import sys 
sys.path.append('/whatever/dir/you/want') 

# script.py 
import makepath 

Edit: Anche in questo caso, secondo the documentation, c'è la possibilità di una directory site-specific in %APPDATA%\Python\PythonXY\site-packages (su Windows). Potresti provarlo, se in effetti hai accesso in scrittura a questo (e non solo alla tua directory di script).

+0

Il problema è che questo è per l'insegnamento di una classe, e sto cercando di farlo funzionare il più vicino al più trasparente possibile. Le persone iniziano sempre un nuovo pitone e si mettono nei guai. Non ci sono alcune cartelle in "Documenti e Impostazioni" che contano come "directory del sito"? I vari programmi di installazione di IIRC metteranno le cose lì - ma non sono sicuro di dove, o se sono esaminati per i file '.pth'. – alexis

+0

Sì, c'è, ed è documentato insieme a tutto il resto su http://docs.python.org/2/library/site.html#site.USER_SITE. Pensavo avessi detto che avevi accesso in scrittura solo alla directory degli script, ma ora vedo che ho letto male. – BrenBarn

+0

Sì grazie, sto cercando di capire quel 'sito.html' è il posto dove guardare. Comunque, mettendo un '.pth' non sembra funzionare ... – alexis