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

Question:

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?
Asked By: jonalv

||

Answers:

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

Answered By: Daniel Hepper

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.

Answered By: Aleksandr Aksarin

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!)

Answered By: Brendan Quinn

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.

Answered By: Vipin Gupta

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
Answered By: Romuald Brunet

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

Answered By: Abednego

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.

Answered By: Gabriel Tournier

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.

Answered By: moein_py
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.