我正在处理一个具有类似于以下目录结构的Python项目:
foo/
├── bar
│ ├── bar1.py
│ ├── bar2.py
│ └── __init__.py
└── __init__.py
模块bar1
在其中定义函数function1
。
我希望我的代码的用户直接从function1
,即通过foo
导入from foo import function1
。足够公平,可以使用以下foo/__init__.py
来实现:
from .bar.bar1 import function1
__all__ = ['function1']
现在的问题是有人在运行import foo
尝试自动完成foo.bar
时,REPL仍将与foo.function1
一起显示foo.
。是否有一种方法可以在不将其名称更改为bar
的情况下向用户“隐藏” _bar
的存在?
我可能会一起以错误的方式进行操作,因此我愿意就如何重组代码提出建议,但我希望避免重命名模块。
答案 0 :(得分:1)
您可以通过删除bar
中的foo/__init__.py
参考来隐藏它:
from .bar.bar1 import function1
__all__ = ['function1']
del bar
Existence of __all__
affects the from <module> import *
behavior only