我在一个目录中有几个 Python 模块。
在同一目录中,我有一个名为tests
的包。
我希望将 tests
中的模块命名与它们所包含的模块相同,尽管这并不是必要的。
所以,在 tests.foo
中,我天真地写了 import foo
。但这并不起作用 - 它导入的是 tests.foo
,而不是顶层的 foo
。
我能否实现我想要的,还是我只能将测试模块称为 test_foo
?
如果这很明显或者重复了,请见谅,我的搜索技巧失败了。
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
--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