Ich habe einen Arbeitstest Zeile für Zeile kopiert und nur ein paar Namen geändert (zumindest dachte ich das) und jetzt erhalte ich diesen sehr kryptischen Fehler: (Ich habe einige Sachen durch FOO, BAR ersetzt)
ImportError: 'tests' module incorrectly imported from 'FOO/exports/tests'. Expected 'FOO/exports'. Is this module globally installed?
Das Problem ist, dass ich den Fehler überhaupt nicht verstehe. Was bedeutet diese Fehlermeldung?
Komplette Stapelverfolgung:
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?
tests
Antworten:
Nach meiner Erfahrung werden seltsame ImportErrors beim Ausführen von Tests durch einen ImportError im Testmodul selbst verursacht.
Stellen Sie sicher, dass Ihr Testmodul importiert werden kann:
$ python manage.py shell ... >>> import foo.exports.tests
Bearbeiten:
Wenn dies zu einem Fehler führt, stellen Sie sicher, dass Sie nicht sowohl ein Verzeichnis
foo/exports/tests
als auch eine Datei habenfoo/exports/tests.py
quelle
foo/exports/tests
als auch eine Dateifoo/exports/tests.py
?tests.py
Datei. Schöner Fang. Und was für eine kryptische Fehlermeldung ... :(Überprüfen Sie, wie Daniel Hepper in einem Kommentar oben sagte, ob Sie sowohl einen
app/tests
Ordner als auch eineapp/tests.py
Datei in Ihrer App haben.Django
startapp
erstellttests.py
automatisch eine Datei, sodass möglicherweise eine Datei vorhanden ist, die Sie nicht bemerkt haben.Wenn Sie die automatisch generierte
tests.py
Datei einfach löschen , sollte dies funktionieren. (Natürlich sollten Sie den Inhalt der Datei überprüfen, bevor Sie etwas löschen!)quelle
Wenn Sie ein Verzeichnis mit dem Namen tests erstellt und Testdateien darin geschrieben haben, z. B. test_views.py, test_models.py usw., müssen Sie die Datei 'test.py' entfernen, die automatisch mit dem Befehl 'python manage.py' erstellt wurde startapp '
quelle
Nur um der Liste der möglichen Fälle hinzuzufügen.
Dies kann auch in einer virtuellen Umgebung geschehen, wenn das Paket, auf dem Sie sich befinden, lokal installiert wurde.
In diesem Fall müssen Sie nur die installierte Version deinstallieren und mit dem Befehl "Entwickeln" erneut verknüpfen (ich kenne den richtigen Begriff nicht)
quelle
In meinem Fall war das Problem, weil ich versucht habe, die Django-Testaufgabe vom Symlink zum Ordner mit dem Projekt zu starten, nicht vom "echten" Pfad. Wenn ich die Django-Testaufgabe im Projektordner ohne Symlink ausführe, wird dieser Fehler nicht angezeigt.
quelle
Überprüfen Sie, ob Sie sowohl einen
app/tests
Ordner als auch eine app / tests.py habenDatei in Ihrer App.
Standardmäßig heißt eine Datei automatisch
tests.py
diese Datei löschen, wenn der Fehler behoben istquelle