Python __init__.py,污染少的命名空间

时间:2018-07-03 14:17:30

标签: python packages

我有一个目录结构

foobar/
    __init__.py
    baz.py

__init__.py只是

from .baz import do_something

baz.py

def do_something():
    return

现在,当我执行import foobar时,我就可以访问

foobar
foobar.do_something()

好!但是,也有

foobar.baz

尽管从未显式导入。我想它已经与do_something一起导入了。

是否有一种方法可以将do_something用作foobar.do_something而不将foobar.baz添加到命名空间? (并且无需将所有内容都放在__init__.py中。)

1 个答案:

答案 0 :(得分:1)

此行为记录在chapter 5 of the Python Language Reference中。如果您真的要禁用它,可以在__init__.py中进行此操作:

from .baz import do_something
del baz

在导入后从baz的命名空间中删除foobar

但是,据我所知,这不是常见的做法;您是否有特定原因要这样做?