【问题标题】:What does "'tests' module incorrectly imported" mean?“'测试'模块错误导入”是什么意思?
【发布时间】:2016-09-28 05:58:10
【问题描述】:

我已经逐行复制了一个工作测试,只是更改了一些名称(至少我是这么认为的),现在我得到了这个非常神秘的错误:(我已经用 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

标签: python django


【解决方案1】:

一句话:删除test.py或tests文件夹 当我将之前在我的一个项目中编写的一些测试复制到我的新项目中时,我遇到了同样的问题,在那里我有超过 5 个相同的 API。 通常我会创建一个名为 tests 的新文件夹,并将所有测试写入每个应用程序的文件夹中,这样一切看起来都会更好 当我在同一个应用程序中创建测试文件夹时,我犯的导致我解决这个问题的错误是没有从应用程序文件夹中删除 test.py 文件 因为你不能在同一个应用程序中同时拥有测试文件夹和 test.py。

【讨论】:

    【解决方案2】:

    如果您创建了一个名为tests 的目录并在其中写入了测试文件,例如test_views.pytest_models.py 等,请确保删除由命令@ 自动创建的文件test.py 987654325@.

    【讨论】:

      【解决方案3】:

      确保你的树文件中没有两个名为 test.py 的文件,这样 Python 应该选择你想要的那个。

      【讨论】:

      • 这已经在另一个答案中提出,考虑投票这个答案而不是发布另一个答案。
      【解决方案4】:

      尝试检查您是否同时拥有 app/tests 文件夹和 app/tests.py

      应用中的文件。

      默认情况下会自动调用一个文件tests.py删除此文件,错误将得到解决

      【讨论】:

        【解决方案5】:

        只是为了添加到可能的案例列表中。

        当您所在的软件包是本地安装时,这也可能发生在虚拟环境中。

        在这种情况下,您只需使用开发命令卸载已安装的版本并“重新链接”它(我不知道正确的术语)

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

        【讨论】:

          【解决方案6】:

          正如 Daniel Hepper 在上面的评论中所说,尝试检查您的应用中是否同时具有 app/tests 文件夹和 app/tests.py 文件。

          Django startapp 会自动创建一个tests.py 文件,因此可能存在您没有注意到的文件。

          如果您只是删除自动生成的tests.py 文件,它应该可以工作。 (显然你应该在删除任何东西之前检查文件的内容!)

          【讨论】:

          • 太棒了,先生,它节省了我的时间:*
          【解决方案7】:

          在我的情况下,问题是因为我试图从符号链接启动 django 测试任务到带有项目的文件夹,而不是从“真实”路径。当我不使用符号链接从项目文件夹运行 django 测试任务时,我没有收到此错误。

          【讨论】:

            【解决方案8】:

            根据我的经验,运行测试时奇怪的 ImportErrors 是由测试模块本身的 ImportError 引起的。

            确保您的测试模块可以被导入:

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

            编辑:

            如果这导致错误,请确保您没有同时拥有目录 foo/exports/tests 和文件 foo/exports/tests.py

            【讨论】:

            • 是的,它说没有这样的模块。但是文件在那里。我还能做什么?
            • 您是否同时拥有一个目录foo/exports/tests 和一个文件foo/exports/tests.py
            • 哦,那里有一个 Django automagic tests.py 文件。不错的收获。还有什么神秘的错误信息... :(
            • django 自动 tests.py 也抓住了我
            • 您的编辑拯救了我!运行 startapp django 时创建了一个 tests.py 文件。我能够在 shell 中导入 tests.py
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2020-11-30
            • 2011-03-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-03-04
            • 2012-11-26
            相关资源
            最近更新 更多