Python 在不公开子模块的情况下,从_init__u; py.py中的子模块导入函数

Python 在不公开子模块的情况下,从_init__u; py.py中的子模块导入函数,python,python-import,Python,Python Import,我正在处理一个类似以下目录结构的Python项目: foo/ ├── bar │   ├── bar1.py │   ├── bar2.py │   └── __init__.py └── __init__.py 其中模块bar1定义了功能function1 我想让我的代码用户直接从foo导入function1(而不是其他),即通过从foo导入function1。公平地说,这可以通过以下foo/\uuuu init\uuuu.py实现: from .bar.bar1 import functi

我正在处理一个类似以下目录结构的Python项目:

foo/
├── bar
│   ├── bar1.py
│   ├── bar2.py
│   └── __init__.py
└── __init__.py
其中模块
bar1
定义了功能
function1

我想让我的代码用户直接从
foo
导入
function1
(而不是其他),即通过
从foo导入function1
。公平地说,这可以通过以下
foo/\uuuu init\uuuu.py
实现:

from .bar.bar1 import function1

__all__ = ['function1']
from .bar.bar1 import function1

__all__ = ['function1']

del bar
现在的问题是,在例如REPL中运行
import foo
的人在尝试自动完成
foo.
时,仍会在
foo.function1
旁边显示
foo.bar
。有没有一种方法可以对用户“隐藏”存在的
bar
,而不将其名称更改为
\u bar


我可能是走错了路,所以我愿意接受关于如何重新构造代码的建议,但我希望避免重命名模块。

您可以通过删除
foo/\uu init\uuuupy
中的
bar
引用来隐藏它:

from .bar.bar1 import function1

__all__ = ['function1']
from .bar.bar1 import function1

__all__ = ['function1']

del bar