我知道在Python中有很多关于相同导入问题的问题,但似乎没有人能够提供一个清晰的正确用法示例。
假设我们有一个名为“mypackage”的包,其中包含两个模块“foo”和“bar”。在“foo”中,我们需要能够访问“bar”。
由于我们仍在开发中,“mypackage”不在“sys.path”中。
我们希望能够:
- 导入“mypackage.foo” - 将“foo.py”作为脚本运行,并执行来自“__main__”部分的示例用法或测试。 - 使用Python 2.5
为了确保在所有这些情况下都能正常工作,我们在foo.py中应该如何进行导入?
假设我们有一个名为“mypackage”的包,其中包含两个模块“foo”和“bar”。在“foo”中,我们需要能够访问“bar”。
由于我们仍在开发中,“mypackage”不在“sys.path”中。
我们希望能够:
- 导入“mypackage.foo” - 将“foo.py”作为脚本运行,并执行来自“__main__”部分的示例用法或测试。 - 使用Python 2.5
为了确保在所有这些情况下都能正常工作,我们在foo.py中应该如何进行导入?
# mypackage/__init__.py
...
# mypackage/foo/__init__.py
...
# mypackage/bar.py
def doBar()
print("doBar")
# mypackage/foo/foo.py
import bar # Fails with module not found
import .bar # Fails due to ValueError: Attempted relative import in non-package
def doFoo():
print(doBar())
if __name__ == '__main__':
doFoo()
bar
作为库而不是作为mypackage
的子模块使用?也就是说,您是否可以将mypackage
重构为mypackage1
和mypackage2
,其中mypackage2
(具有foo
)导入mypackage1
(具有bar
)? - jsalonen