python - Django 测试运行器在 Ubuntu 上的 virtualenv 中失败

标签 python django ubuntu virtualenv python-unittest

我一直在努力解决安装在 Ubuntu 14.04 上的 Python virtualenv 中的 Django 测试运行程序的问题。相同的软件在 MacOS 上运行良好,我认为它在较早版本的 Ubuntu 上运行良好。

失败信息是:

ImportError: '<test>' module incorrectly imported from '<base-env>/local/lib/python2.7/site-packages/<package-dir>'. Expected '<base-env>/lib/python2.7/site-packages/<package-dir>'. Is this module globally installed?

错误的完整堆栈跟踪是:

  Traceback (most recent call last):
    File "/home/annalist/anenv/bin/django-admin", line 11, in <module>
      sys.exit(execute_from_command_line())
    File "/home/annalist/anenv/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 385, in execute_from_command_line
      utility.execute()
    File "/home/annalist/anenv/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 377, in execute
      self.fetch_command(subcommand).run_from_argv(self.argv)
    File "/home/annalist/anenv/local/lib/python2.7/site-packages/django/core/management/commands/test.py", line 50, in run_from_argv
      super(Command, self).run_from_argv(argv)
    File "/home/annalist/anenv/local/lib/python2.7/site-packages/django/core/management/base.py", line 288, in run_from_argv
      self.execute(*args, **options.__dict__)
    File "/home/annalist/anenv/local/lib/python2.7/site-packages/django/core/management/commands/test.py", line 71, in execute
      super(Command, self).execute(*args, **options)
    File "/home/annalist/anenv/local/lib/python2.7/site-packages/django/core/management/base.py", line 338, in execute
      output = self.handle(*args, **options)
    File "/home/annalist/anenv/local/lib/python2.7/site-packages/django/core/management/commands/test.py", line 88, in handle
      failures = test_runner.run_tests(test_labels)
    File "/home/annalist/anenv/local/lib/python2.7/site-packages/django/test/runner.py", line 147, in run_tests
      suite = self.build_suite(test_labels, extra_tests)
    File "/home/annalist/anenv/local/lib/python2.7/site-packages/django/test/runner.py", line 96, in build_suite
      tests = self.test_loader.discover(start_dir=label, **kwargs)
    File "/usr/lib/python2.7/unittest/loader.py", line 206, in discover
      tests = list(self._find_tests(start_dir, pattern))
    File "/usr/lib/python2.7/unittest/loader.py", line 287, in _find_tests
      for test in self._find_tests(full_path, pattern):
    File "/usr/lib/python2.7/unittest/loader.py", line 287, in _find_tests
      for test in self._find_tests(full_path, pattern):
    File "/usr/lib/python2.7/unittest/loader.py", line 267, in _find_tests
      raise ImportError(msg % (mod_name, module_dir, expected_dir))
  ImportError: 'test_entity' module incorrectly imported from '/home/annalist/anenv/local/lib/python2.7/site-packages/annalist_root/annalist/tests'. Expected '/home/annalist/anenv/lib/python2.7/site-packages/annalist_root/annalist/tests'. Is this module globally installed?

测试用例在开发环境中运行良好,当从源代码分发工具包安装到 MACOS 开发主机上的新 virtualenv 环境中时,它们也运行良好。但是当我将相同的包安装到 Ubuntu 14.04 主机上的新 virtualenv 中时,测试运行器失败并显示上述消息。

问题出现在我创建的一个管理实用程序中,该实用程序调用了 django-admin 的某些功能(以及其他一些功能)。

Web 搜索显示了有关 virtualenv 和 posix 兼容性的错误报告,这些错误最近(2013/14)在 Ubuntu 发行版中通过在虚拟环境中创建一个 local 目录而得到解决,该目录又包含符号链接(symbolic link)到也可从顶级虚拟环境目录访问的目录。错误消息中显示的路径对应于这些别名目录路径。

(我将其作为一个问题发布,这样我就可以发布我的调查结果和答案,希望它对其他人有用。因此,我不想详细描述我的特定问题软件设置。)

最佳答案

我遇到了完全相同的问题,无法弄清楚发生了什么。最后是一件愚蠢的事情:

我有一个类似于这个的布局:

my_app/
    __init__.py
    tests.py
    tests/
        __init__.py
       test_foo.py

问题是由于在同一文件夹中同时拥有“tests.py”模块和“tests”包而产生的。

只需删除“tests.py”文件即可解决我的问题。

希望对您有所帮助。

关于python - Django 测试运行器在 Ubuntu 上的 virtualenv 中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25775185/

相关文章:

python - 在 linux (pySide) 上为特定版本安装 python 模块

php - 如何在 ubuntu 上使用 php 设置 nginx 上游?

python - 将 Google 搜索返回到 Python

django - 关于 django url 中字符的简单问题

嵌套路由上的 Django REST 权限

django - 在 django admin 中,如何为 ManyToManyField 的反面添加一个字段

php - 在 Ubuntu 根问题上安装 MySql

python - 从 URL 下载返回的 Zip 文件

python - Django:按用户过滤 ModelChoiceField

Python oauth2 - 发出请求