我在一个目录中有几个python模块。如何导入名称与包装中的模块冲突的模块?
在同一目录中,我有一个包tests
。
我很想将tests
中的模块命名为与它们包含测试的模块相同的名称,当然这并不重要。
所以,在tests.foo
我天真地写import foo
。这不太好 - 它进口tests.foo
,而不是顶级foo
。
我可以做我想做的,或者我只需要调用测试模块test_foo
?
对不起,如果这是显而易见的或愚蠢的,我的search-fu失败了。
我在一个目录中有几个python模块。如何导入名称与包装中的模块冲突的模块?
在同一目录中,我有一个包tests
。
我很想将tests
中的模块命名为与它们包含测试的模块相同的名称,当然这并不重要。
所以,在tests.foo
我天真地写import foo
。这不太好 - 它进口tests.foo
,而不是顶级foo
。
我可以做我想做的,或者我只需要调用测试模块test_foo
?
对不起,如果这是显而易见的或愚蠢的,我的search-fu失败了。
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
使用这样的全包路径:
--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
谢谢,但“ValueError异常:试图相对进口超出顶层包”。这是Python 2.6,如果它有任何区别。你可能是对的,我应该把所有东西放在首要的包装中。我不确定现在这种改变是否会无痛苦。 – 2011-01-27 13:48:37