2013-05-10 12 views
8

Rozumiem, że to pytanie zostało zadane kilka razy, ale po ich przeczytaniu i wprowadzeniu sugerowanych poprawek wciąż jestem zakłopotany.Błąd importu odbiorów: brak modułu o nazwie ***, ale ma __init__.py

Moja struktura projektu jest następujący:

Project 
     | 
     src 
     | 
     root - has __init__.py 
      | 
      nested - has __init__.py 
        | 
        tests - has __init__.py 
        | 
        utilities - has __init__.py 
        | 
        services - has __init__.py 

Mam powodzeniem uruchomić klasę unittest regresji z Eclipse bez żadnych problemów.

Jak tylko próbował uruchomić tę samą klasę z linii poleceń (jak innych użytkowników, którzy zostaną uruchomione pakietu nie mają dostępu do Eclipse) Otrzymuję błąd:

ImportError: No module named 'root' 

jak ty widać z góry, moduł główny ma wszystkie moduły: __init__.py Wszystkie są całkowicie puste.

I pomoc zostanie z wdzięcznością przyjęta.

+1

jest '' src' na sys.path '? Czy uruchomiłeś komendę Python w tym katalogu, czy też jawnie dodano 'src' do zmiennej środowiskowej' sys.path' (lub 'PYTHONPATH')? –

+0

@Martijin: Próbuję wykonać z poziomu katalogu ".. \ tests". "scr" nie jest dodawany do "sys.path" ani "PYTHONPATH". Nie wiedziałem, że to konieczne, po raz pierwszy próbuje się wykonać za pomocą linii poleceń. Spróbuję dodać katalog do "PYTHONPATH" –

+4

Nie polecam dodawania do ścieżki. Proponuję nauczyć się, jak skonfigurować "setup.py", co oznacza, że ​​faktycznie tworzysz projekt Python. To pomaga w dłuższej perspektywie. – CppLearner

Odpowiedz

11

Spróbuj dodać sys.path.append do listy importowanych produktów.

import sys 
sys.path.append("/Project/src/") 
import root 
import root.nested.tests 
+0

Dzięki, dokładnie to, co było potrzebne. –

+0

Otrzymuję 'NameError: name 'sys' nie jest zdefiniowany' przy próbie tego. – CGFoX

+2

@CGFoX musisz najpierw zaimportować sys, odpowiedź zmodyfikować, aby odzwierciedlić to –

7

Tylko uwaga dla każdego, kto przyjeżdża na ten problem, używając co Gus E wykazało odpowiedź zaakceptować, a niektóre dodatkowo doświadczenie Znalazłem następujące być bardzo przydatna w celu zapewnienia, że ​​mogę uruchomić moje programy z linia poleceń na mojej maszynie lub na innym koledze, jeśli zajdzie taka potrzeba.

import sys 
import os 
sys.path.append(os.path.join(os.path.dirname(__file__), "..", "..")) 

Kiedy wykonać „główny” metodę, która znajduje się w katalogu „zagnieżdżone”, to zapewnia, że ​​katalog „src” jest dodawany do PYTHONPATH w czasie wykonywania oznacza wszystkie następujące importu nie będzie rzuć błąd.

Oczywiście, trzeba dostosować liczbę „..” argumenty metody os.path.join() jako zależy od lokalizacji w swoim programie, gdzie główną metodą jest wykonany z

+0

To uratowało mi tyle bólu. Dziękuję Ci! –

0

Jeśli ktoś ląduje tutaj:

Wystąpił również ten błąd. W moim przypadku użyłem ~/my/path/ na path.sys.append(...) i poprawka została zastępując ~ z wyraźną nazwą ścieżki (można zapytać go, jeśli wpiszesz pwd gdy jesteś na ~)

Powiązane problemy