2011-01-27 138 views
9

我在一个目录中有几个python模块。如何导入名称与包装中的模块冲突的模块?

在同一目录中,我有一个包tests

我很想将tests中的模块命名为与它们包含测试的模块相同的名称,当然这并不重要。

所以,在tests.foo我天真地写import foo。这不太好 - 它进口tests.foo,而不是顶级foo

我可以做我想做的,或者我只需要调用测试模块test_foo

对不起,如果这是显而易见的或愚蠢的,我的search-fu失败了。

回答

7

test_foo.py似乎是一种在这种情况下适当的解

如果不重命名该测试模块再进行tests目录到Python包(添加文件tests/__init__.py),并使用absolute imports

from __future__ import absolute_import 
import foo     # import global foo.py, the first foo.py in sys.path 
import tests.foo as test_foo # import tests/foo.py 
3

使用这样的全包路径:

--Package 
    |-- __init__.py 
    |-- foo.py 
    | 
    |-- tests 
    | | -- __init__.py 
     | -- foo.py 

tests/foo.py

from Package import foo 

而且我觉得文档的这一部分可以感兴趣:http://docs.python.org/whatsnew/2.5.html#pep-328-absolute-and-relative-imports

+0

谢谢,但“ValueError异常:试图相对进口超出顶层包”。这是Python 2.6,如果它有任何区别。你可能是对的,我应该把所有东西放在首要的包装中。我不确定现在这种改变是否会无痛苦。 – 2011-01-27 13:48:37