【发布时间】:2015-11-23 20:47:30
【问题描述】:
A foobar package
foobar
- __init__.py
- foo.py
酒吧
- bar.py
Inside the __init__.py
from . import foo
from . import bar
即使bar 不是包或子包,它仍然作为模块导入(lolwut)。我通过在__init__.py 中执行print(type(bar)) 检查了导入类型,它打印了<class 'module'>... 就是这样。这里发生了什么?它是一个模块对象,所以我做了print(dir(bar)),输出为['__doc__', '__loader__', '__name__', '__package__', '__path__', '__spec__']。现在,更让我困惑的是其中的__path__ 变量。那不是只有包裹吗?
这就是所谓的命名空间包吗?我认为不是,不过我在__init__.py 文件中又尝试了另一件事——添加了一行import bar.bar。它以ImportError 结尾。所以,总结一下我的问题,这个模块有什么用?为什么 Python 首先要导入这个?
There's an amazing tutorial on this entire topic by David Beazley。前段时间我已经看完了整件事,但我想我应该再看一遍以回忆一切。
【问题讨论】:
标签: packages python-3.4 python-import