我有一个像这样组织的包foo_package
:
foo/
setup.py
README.md
...
foo_package/
__init__.py
bar.py
baz.py
模块bar.py
定义了一个' public'函数也命名为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
模块的功能是正确的行为。如何在本地开发中导入bar
模块的同时保持这一点(特别是在像IPython这样的交互式环境中)?
答案 0 :(得分:1)
如果您确实有令人信服的理由保留阴影,则可以通过sys.modules
访问模块对象:
import sys
import foo_package.bar
bar_module = sys.modules['foo_package.bar']
import importlib
bar_module = importlib.import_module('foo_package.bar')