What does "'tests' module incorrectly imported" mean?

PythonDjango

Python Problem Overview


I have copied a working test line by line and just changed a few names (at least so I thought) and now I get this very cryptic error: (I have replaced some stuff with FOO, BAR)

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

The problem is that I do not understand the error at all. What does this error message mean?

Complete stacktrace:

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?

Python Solutions


Solution 1 - Python

In my experience, weird ImportErrors when running tests are caused by an ImportError in the tests module itself.

Ensure that your tests module can be imported:

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

Edit:

If that causes an error, make sure you do not have both a directory foo/exports/tests and a file foo/exports/tests.py

Solution 2 - Python

As Daniel Hepper said in a comment above, try checking whether you have both a app/tests folder and a app/tests.py file in your app.

Django startapp creates a tests.py file automatically so there might be a file that you haven't noticed.

If you simply delete the automatically generated tests.py file, it should work. (Obviously you should check the contents of the file before deleting anything!)

Solution 3 - Python

In case you have created a directory named tests and have written test files inside it, for example test_views.py, test_models.py, etc., make sure you remove the file test.py created automatically by the command python manage.py startapp.

Solution 4 - Python

Try checking whether you have both a app/tests folder and a app/tests.py

file in your app.

By default a file is automatically called tests.py delete this file it the error will be resolved

Solution 5 - Python

In one word: delete test.py or tests folder I had the same issue when I copied some tests I wrote before in one of my projects into my new projects where I had more than 5 same APIs there. Usually I do create a new folder called tests and write all my tests in a folder for each app so everything looks better The mistake I made which led me through this problem was not deleting the test.py file from app folder when I created tests folder in the same app Because you cant have both tests folder and test.py in the same app.

Solution 6 - Python

make sure you don't have 2 files named test.py in your tree files that way Python should pick the one you wanted to.

Solution 7 - Python

Just to add to the list of possible cases.

This can also happen inside a virtual env when the package you're on was locally installed.

In that case you just need to uninstall the version that was installed an "re-link" it (I don't known the correct term) by using the develop command

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

Solution 8 - Python

In my case problem was because I tried to start django test task from symlink to folder with project, not from "real" path. When I run django test task from project folder not using symlink I don't get this error.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionjonalvView Question on Stackoverflow
Solution 1 - PythonDaniel HepperView Answer on Stackoverflow
Solution 2 - PythonBrendan QuinnView Answer on Stackoverflow
Solution 3 - PythonVipin GuptaView Answer on Stackoverflow
Solution 4 - PythonAbednegoView Answer on Stackoverflow
Solution 5 - Pythonmoein_pyView Answer on Stackoverflow
Solution 6 - PythonGabriel TournierView Answer on Stackoverflow
Solution 7 - PythonRomuald BrunetView Answer on Stackoverflow
Solution 8 - PythonAleksandr AksarinView Answer on Stackoverflow