Що означає "неправильно імпортований модуль" тести "?


82

Я скопіював робочий тестовий рядок за рядком і просто змінив кілька назв (принаймні так я думав), і тепер я отримую цю дуже загадкову помилку: (Я замінив деякі речі на 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?

Чи можете ви опублікувати повну трасу стека?
Деніел Хеппер,

Будь ласка, додайте залучене дерево файлів, щоб перевірити структуру та файл, куди ви намагаєтеся імпортуватиtests
trinchet

Відповіді:


207

З мого досвіду, дивні помилки ImportEr при запуску тестів спричинені помилкою ImportError у самому модулі тестів.

Переконайтеся, що ваш модуль тестів можна імпортувати:

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

Редагувати:

Якщо це спричиняє помилку, переконайтеся, що у вас немає і каталогу, foo/exports/testsі файлуfoo/exports/tests.py


Так, це говорить про те, що такого модуля немає. Але файл є. Що ще я можу зробити?
jonalv

62
У вас, можливо, є і каталог, foo/exports/testsі файл foo/exports/tests.py?
Деніел Хеппер,

47
О, там був автоматичний tests.pyфайл Django . Хороший улов. І яке загадкове повідомлення про помилку ... :(
jonalv

9
автоматичний django tests.py також схопив і мене
доктор Манхеттен

2
Мене врятувало ваше редагування! Під час запуску startapp django створив файл tests.py. Я зміг імпортувати tests.py в оболонку
Даніел Батлер

72

Як сказав Даніель Хеппер у коментарі вище, спробуйте перевірити, чи є у вас і app/testsпапка, і app/tests.pyфайл у вашому додатку.

Django startappстворює tests.pyфайл автоматично, тому може бути файл, який ви не помітили.

Якщо ви просто видалите автоматично згенерований tests.pyфайл, він повинен працювати. (Очевидно, перед тим, як щось видаляти, слід перевірити вміст файлу!)


1
Чудово, сер, це заощаджує мій час: *
Усама Надім,

5

Якщо ви створили каталог з іменем tests і всередині нього записали тестові файли, наприклад, test_views.py, test_models.py тощо, не забудьте видалити файл 'test.py', створений автоматично за допомогою команди 'python manage.py startapp '


1

Просто додати до списку можливих випадків.

Це також може статися у віртуальному середовищі, коли пакет, у якому ви знаходитесь, був локально встановлений.

У цьому випадку вам просто потрібно видалити версію, яка була встановлена, "перенаправити посилання" на неї (я не знаю правильний термін) за допомогою команди Developer

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

1

Спробуйте перевірити, чи є у вас як app/testsпапка, так і app / tests.py

файл у вашому додатку.

За замовчуванням файл автоматично називається tests.pyвидалити цей файл, і помилка буде вирішена


0

У моєму випадку проблема полягала в тому, що я намагався запустити тестове завдання django із символічного посилання на папку з проектом, а не з "реального" шляху. Коли я запускаю тестове завдання django із папки проекту, не використовуючи символічне посилання, я не отримую цієї помилки.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.