【发布时间】:2014-11-04 16:17:31
【问题描述】:
我一直在努力解决安装在 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 目录来解决这些问题,该目录又包含指向目录的符号链接,这些目录也是可从顶级虚拟环境目录访问。错误消息中显示的路径对应于这些别名目录路径。
(我将此作为问题发布,以便我可以发布我的调查结果和答案,希望它对其他人有用。因此,我不想详细描述我的具体情况软件设置。)
【问题讨论】:
标签: python django ubuntu virtualenv python-unittest