To jest pytanie, które jest często zadawane w różnych formach i często uzyskuje odpowiedzi "lol you're does does doing doing properly". Jest to całkiem prawdopodobne, ponieważ istnieje zdrowy scenariusz, który ludzie (w tym ja) próbują wykorzystać jako implementację, a rozwiązanie nie jest oczywiste (jeśli wcześniej tego nie robiłeś).Import w języku Python do testów przy użyciu nosa - jaka jest najlepsza praktyka w przypadku importowania modułów powyżej bieżącego pakietu
Przyjmuje odpowiedź, która "pozwala wylecieć z butelki".
Podane
project/
__init__.py
/code
__init__.py
sut.py
/tests
__init__.py
test_sut.py
Gdzie tests_sut.py zaczyna:
import code.sut
przebiegu nosetests w głównym katalogu prowadzi do:
ImportError: No module named code.sut
Aleje wyjazd:
a) zrobić względne u śpiewać
from ..code import sut
b) dodać pierwiastek projektu PYTHONPATH
c) używać
sys.path.append
dodać ścieżkę .. przed przywozem na początku każdego modułu testowego.
d) po prostu pamiętać, aby zrobić
setup.py
od projektu do instalacji modułów w miejscu opakowań przed wykonaniem testów.
Wymaga się więc, aby testy znajdowały się poniżej katalogu głównego pakietu testowego, który ma dostęp do projektu. Każda z powyższych rzeczy nie wydaje mi się "naturalna", okazała się problematyczna lub wydaje się zbyt ciężką pracą!
W języku java działa to, ale zasadniczo dzięki narzędziu do budowania/IDE umieszczając wszystkie klasy w ścieżce klas. Być może chodzi o to, że oczekuję "magii" od Pythona? Zauważyłem, że w testach platformy internetowej Flask opcja d) wydaje się preferowana.
W każdym razie poniższe stwierdzenia zalecające preferowane rozwiązanie usuną poczucie "nienaturalności" w mojej własnej.
Podobne do http://stackoverflow.com/questions/6323860/sibling-package-imports/6466139#6466139 choć nie jest to dokładny duplikat. – Evpok
To pięknie podsumowuje 80-90% mojej sytuacji - jeśli tylko jest jakieś wyjaśnienie, czy virtualenv zmieniłby odpowiedź ... – sage