如何导入与我包中的模块名称冲突的模块?
我在一个文件夹里有几个Python模块。
在同一个文件夹里,我还有一个叫做tests
的包。
我希望tests
里的模块名字能和它们测试的模块相同,虽然这并不是特别重要。
所以,在tests.foo
里,我简单地写了import foo
。但这并没有按我想的那样工作——它导入的是tests.foo
,而不是最上层的foo
。
我能实现我想要的效果吗,还是说我只能把测试模块叫做test_foo
?
抱歉如果这个问题很明显或者是重复的,我的搜索能力不太行。
2 个回答
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
8
test_foo.py
在这种情况下看起来是个合适的解决方案。
如果你不打算重命名测试模块,那么可以把 tests
目录变成一个 Python 包(也就是在里面添加一个 tests/__init__.py
文件),然后使用 绝对导入:
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