Python 3中的包不需要__init__.py吗?

我正在使用Python 3.5.1。 我在这里阅读文档和包部分: https : //docs.python.org/3/tutorial/modules.html#packages

现在,我有以下结构:

/home/wujek/Playground/a/b/module.py 

module.py

 class Foo: def __init__(self): print('initializing Foo') 

现在,在/home/wujek/Playground

 ~/Playground $ python3 >>> import abmodule >>> abmodule.Foo() initializing Foo <abmodule.Foo object at 0x100a8f0b8> 

同样,现在在家里, Playground超级文件夹:

 ~ $ PYTHONPATH=Playground python3 >>> import abmodule >>> abmodule.Foo() initializing Foo <abmodule.Foo object at 0x10a5fee10> 

其实我可以做各种各样的东西:

 ~ $ PYTHONPATH=Playground python3 >>> import a >>> import ab >>> import Playground.ab 

为什么这个工作? 我虽然那里需要__init__.py文件(空的将工作)在ab module.py可以导入时,Pythonpath指向Playground文件夹?

这似乎已经改变了Python 2.7:

 ~ $ PYTHONPATH=Playground python >>> import a ImportError: No module named a >>> import ab ImportError: No module named ab >>> import abmodule ImportError: No module named abmodule 

~/Playground/a~/Playground/a/b中都有__init__.py ,它可以正常工作。

Python 3.3+具有隐式命名空间包 ,允许创build没有__init__.py文件的包。

允许隐式名称空间包意味着提供__init__.py文件的要求可以完全删除 ,并且受到影响…。

使用__init__.py文件的旧方法仍然像在Python 2中一样工作。