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
文件(空的将工作)在a
和b
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中一样工作。