Что означает "неверный импорт" модуля "тесты"?

Я скопировал рабочий тест по строчке и только что изменил несколько имен (по крайней мере, так думал я), и теперь я получаю эту очень загадочную ошибку: (Я заменил некоторые вещи FOO, BAR)

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

Проблема в том, что я вообще не понимаю эту ошибку. Что означает это сообщение об ошибке?

Полный стек:

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?

Ответ 1

По моему опыту, странные ImportErrors при запуске тестов вызваны ImportError в самом модуле тестирования.

Убедитесь, что ваш тестовый модуль можно импортировать:

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

Edit:

Если это вызывает ошибку, убедитесь, что у вас нет как каталога foo/exports/tests, так и файла foo/exports/tests.py

Ответ 2

Как сказал Даниэль Хеппер в комментарии выше, попробуйте проверить, есть ли в вашем app/tests папка app/tests.py файл app/tests.py.

Django startapp создает файл tests.py поэтому там может быть файл, который вы не заметили.

Если вы просто удалите автоматически созданный файл tests.py, он должен работать. (Очевидно, вы должны проверить содержимое файла, прежде чем удалять что-либо!)

Ответ 3

В моем случае проблема была в том, что я попытался запустить задачу тестирования django из символической ссылки в папку с проектом, а не с "реального" пути. Когда я запускаю задачу тестирования django из папки проекта, не используя symlink, я не получаю эту ошибку.

Ответ 4

Если вы создали каталог с именем tests и в нем написали тестовые файлы, например, test_views.py, test_models.py и т.д., Убедитесь, что вы удалили файл 'test.py', созданный автоматически командой 'python manage.py StartApp"