我有一个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
是行不通的。我可以通过在内部启动 IPythonfoo_package
并改为使用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
的模块的包级“重影”是正确的行为。在本地开发中(尤其是在像 IPython 这样的交互式环境中)导入模块的同时,我该如何维护这一点?bar
bar