尽管未导入Python子模块,但仍可见

时间:2019-04-27 05:08:44

标签: python

我有以下设置,并且想知道为什么导入foo时将top引入了作用域。

# Python 3.7.2 (also happens in python2)
$ tree .
.
└── top
    ├── __init__.py
    └── foo.py
# top/__init__.py
from .foo import foo_func     # OR from top.foo import foo_func

# top/foo.py
def foo_func():
    print('Foo func')
def foo_secret():
    print('Foo secret')
>>> import top       # from root directory
>>> dir(top)
['foo', 'foo_func', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__']

通常完成from <package> import <module>后,它只会将<module>带入当前名称空间(因为from enum import Enum仅带来Enum而不是enum本身)。我对from .foo import foo_func为什么也将模块foo引入命名空间感到感兴趣。

使用pip安装的本地目录和软件包的导入机制是否不同?

0 个答案:

没有答案