我有以下设置,并且想知道为什么导入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安装的本地目录和软件包的导入机制是否不同?