2011-10-30 15 views
11

Mam aplikacji python jak tenimportować klasę z folderu na innym poziomie

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

Co staram się zrobić, to uruchomić test jednostki test_john.py który musi użyć john.py ale w innym folderze.

W moim tests/test_john.py uzyskać to, kiedy go uruchomić

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

Więc jak mogę zaimportować klasę, z folderu przeszukiwania ....

+0

możesz spróbować 'from crawl.john import John' lub spróbuj' from ..crawl.john import John' (zobacz http://stackoverflow.com/questions/1054271/how-to-import-a-python- class-that-is-in-a-directory-above) –

Odpowiedz

11

Jeśli Folder główny jest w PYTHONPATH i zrobić to pakiet importable następująco:

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

można zrobić:

from crawl.john import John 

lub

from ..crawl.john import John 
+0

Wygląda na to, że folder główny nie znajduje się w mojej ścieżce python. Myślałem, że może dodać CWD do pythonpath, ale nie. Najlepszy sposób to zrobić? – Wizzard

+0

zależy to od konfiguracji. W oknach dla moich pakietów i bibliotek po prostu dodaję plik site.pth w pakietach witryny z nazwą folderu (ów). – joaquin

2

Jeśli Twój system operacyjny obsługuje go, umieścić link symboliczny do ../crawl w katalogu test a następnie użyć from crawl.john import John.

Powiązane problemy