我一直在努力解决安装在 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/