如何导入名称与包中的模块冲突的模块?

时间:2011-01-27 12:58:53

标签: python import

我在目录中有几个python模块。

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

我非常希望将tests中的模块命名为与它们包含测试的模块相同,但当然它并不重要。

所以,在tests.foo我天真地写import foo。效果不佳 - 导入tests.foo,而不是顶级foo

我可以做我想做的事情,还是只需要调用测试模块test_foo

对不起,如果这是显而易见的或是一个骗局,我的搜索功能失败了。

2 个答案:

答案 0 :(得分:8)

在这种情况下,

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

答案 1 :(得分: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