2011-10-30 1 views
11

Ho un'applicazione pitone come questoImportare una classe da una cartella ad un altro livello

/ 
/crawl.py 
/crawl/__init__.py 
/crawl/john.py 
/tests/test_john.py 

Quello che sto cercando di fare, viene eseguito il test di unità test_john.py che ha bisogno di usare john.py ma è in un'altra cartella.

Nel mio tests/test_john.py ottengo questo quando l'eseguo

Traceback (most recent call last): 
    File "test_john.py", line 2, in <module> 
    from john import John 
ImportError: No module named john 

Così come posso importare una classe, dalla cartella crawl ....

+0

si potrebbe provare 'da crawl.john importare John' o provare' da ..crawl.john importare John' (consultare http://stackoverflow.com/questions/1054271/how-to-import-a-python- class-that-is-in-a-directory-above) –

risposta

11

Se la cartella principale è nel vostro PYTHONPATH e si rendono un pacchetto importabile come segue:

/__init__.py 
/crawl.py 
/crawl/__init__.py 
/crawl/john.py 
/tests/__init__.py 
/tests/test_john.py 

si può fare:

from crawl.john import John 

o

from ..crawl.john import John 
+0

Sembra che la cartella root non si trovi nel mio percorso python. Ho pensato che potrebbe aggiungere il CWD al pythonpath ma non lo fa. Il modo migliore per farlo? – Wizzard

+0

dipende dalla configurazione. In Windows, per i miei pacchetti e le mie librerie, aggiungo semplicemente un file site.pth nei pacchetti del sito con il nome della/e cartella/e. – joaquin

2

Se il sistema operativo supporta, mettere un link simbolico a ../crawl nella directory test e quindi utilizzare from crawl.john import John.