【发布时间】:2018-02-06 06:53:28
【问题描述】:
我有一个包foo_package 是这样组织的:
foo/
setup.py
README.md
...
foo_package/
__init__.py
bar.py
baz.py
模块bar.py 定义了一个“公共”函数,也称为bar,并且模块和函数都受益于准确命名bar。 bar.py 还定义了一些“私有”辅助函数。
在__init__.py 内部,我对bar.bar 进行了顶级导入,这样foo_package.bar 将成为整个包的API。
# __init__.py:
from .bar import bar
但现在我被相对进口咬伤了。
首先,如果我正在调试或在 IPython 之类的交互式提示中工作,那么天真地粘贴 from .bar import bar 是行不通的。我可以通过在 foo_package 中启动 IPython 并改用 from foo_package import bar 来解决这个问题。
但是我怎样才能导入bar 模块 而不是导出的bar 函数呢?例如。
from foo_package import bar
import foo_package.bar as bar
等等,都导入了函数bar,同时bar.py也包含了对另一个模块的相对导入,比如
# inside bar.py
from .baz import helper_function
然后是平原
import bar
也不行。
bar 模块 与bar 函数 的包级“重影”是正确的行为。如何在本地开发中(尤其是在 IPython 等交互式环境中)导入 bar 模块 的同时保持这一点?
【问题讨论】:
标签: python import package relative-import