Co oznacza niepoprawnie zaimportowany moduł „testy”?


82

Skopiowałem działający test linia po linii i właśnie zmieniłem kilka nazw (przynajmniej tak myślałem), a teraz pojawia się ten bardzo tajemniczy błąd: (Zastąpiłem niektóre rzeczy FOO, BAR)

ImportError: 'tests' module incorrectly imported from 'FOO/exports/tests'. Expected 'FOO/exports'. Is this module globally installed?

Problem w tym, że w ogóle nie rozumiem błędu. Co oznacza ten komunikat o błędzie?

Kompletny ślad stosu:

Traceback (most recent call last):
  File "BAR/modeling/manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/Users/jonathan/anaconda/lib/python2.7/site-packages/django/core/management/__init__.py", line 353, in execute_from_command_line
    utility.execute()
  File "/Users/jonathan/anaconda/lib/python2.7/site-packages/django/core/management/__init__.py", line 345, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/Users/jonathan/anaconda/lib/python2.7/site-packages/django/core/management/commands/test.py", line 30, in run_from_argv
    super(Command, self).run_from_argv(argv)
  File "/Users/jonathan/anaconda/lib/python2.7/site-packages/django/core/management/base.py", line 348, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/Users/jonathan/anaconda/lib/python2.7/site-packages/django/core/management/commands/test.py", line 74, in execute
    super(Command, self).execute(*args, **options)
  File "/Users/jonathan/anaconda/lib/python2.7/site-packages/django/core/management/base.py", line 399, in execute
    output = self.handle(*args, **options)
  File "/Users/jonathan/anaconda/lib/python2.7/site-packages/django/core/management/commands/test.py", line 90, in handle
    failures = test_runner.run_tests(test_labels)
  File "/Users/jonathan/anaconda/lib/python2.7/site-packages/django/test/runner.py", line 531, in run_tests
    suite = self.build_suite(test_labels, extra_tests)
  File "/Users/jonathan/anaconda/lib/python2.7/site-packages/django/test/runner.py", line 451, in build_suite
    tests = self.test_loader.discover(start_dir=label, **kwargs)
  File "/Users/jonathan/anaconda/lib/python2.7/unittest/loader.py", line 206, in discover
    tests = list(self._find_tests(start_dir, pattern))
  File "/Users/jonathan/anaconda/lib/python2.7/unittest/loader.py", line 267, in _find_tests
    raise ImportError(msg % (mod_name, module_dir, expected_dir))
ImportError: 'tests' module incorrectly imported from 'FOO/exports/tests'. Expected 'FOO/exports'. Is this module globally installed?

Czy możesz opublikować pełny ślad stosu?
Daniel Hepper

Dodaj odpowiednie drzewo plików, aby sprawdzić strukturę i plik, do którego próbujesz zaimportowaćtests
trinchet

Odpowiedzi:


207

Z mojego doświadczenia wynika, że ​​dziwne błędy ImportErrors podczas uruchamiania testów są powodowane przez błąd ImportError w samym module testów.

Upewnij się, że moduł testów można zaimportować:

$ python manage.py shell
...
>>> import foo.exports.tests

Edytować:

Jeśli to spowoduje błąd, upewnij się, że nie masz jednocześnie katalogu foo/exports/testsi plikufoo/exports/tests.py


Tak, jest napisane, że nie ma takiego modułu. Ale plik tam jest. Co jeszcze mogę zrobić?
jonalv

62
Czy masz może katalog foo/exports/testsi plik foo/exports/tests.py?
Daniel Hepper

47
Och, był tests.pytam plik automagiczny Django . Dobry chwyt. A co za tajemniczy komunikat o błędzie ... :(
jonalv

9
django automatic tests.py też mnie złapał
Dr Manhattan

2
Twoja zmiana mnie uratowała! Podczas uruchamiania startapp django utworzył plik tests.py. Udało mi się zaimportować tests.py w powłoce
Daniel Butler

72

Jak Daniel Hepper powiedział w powyższym komentarzu, spróbuj sprawdzić, czy masz w aplikacji zarówno app/testsfolder, jak i app/tests.pyplik.

Django startapptworzy tests.pyplik automatycznie, więc może istnieć plik, którego nie zauważyłeś.

Jeśli po prostu usuniesz automatycznie wygenerowany tests.pyplik, powinien działać. (Oczywiście przed usunięciem czegokolwiek należy sprawdzić zawartość pliku!)


1
Niesamowity Panie, to oszczędza mój czas: *
Usama Nadeem

5

W przypadku, gdy utworzyłeś katalog o nazwie testy i zapisałeś w nim pliki testowe, np. Test_views.py, test_models.py itp., Upewnij się, że usunąłeś plik „test.py” utworzony automatycznie przez polecenie „python manage.py” startapp '


1

Wystarczy dodać do listy możliwych przypadków.

Może się to również zdarzyć w wirtualnym środowisku env, gdy pakiet, którego używasz, został zainstalowany lokalnie.

W takim przypadku wystarczy odinstalować zainstalowaną wersję i ponownie ją połączyć (nie znam poprawnego terminu) za pomocą polecenia develop

~/dev/stufflib% pip uninstall stufflib
~/dev/stufflib% python setup.py develop
~/dev/stufflib% python setup.py test

1

Spróbuj sprawdzić, czy masz zarówno app/testsfolder, jak i plik app / tests.py

plik w swojej aplikacji.

Domyślnie plik jest automatycznie nazywany tests.pyusuń ten plik, jeśli błąd zostanie rozwiązany


0

W moim przypadku problem polegał na tym, że próbowałem uruchomić zadanie testowe django z dowiązania symbolicznego do folderu z projektem, a nie z „prawdziwej” ścieżki. Kiedy uruchamiam zadanie testowe django z folderu projektu bez użycia łącza symbolicznego, nie pojawia się ten błąd.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.