每个python包都需要__init__.py吗?[python 3.3+以来的新功能]

Bic*_*eng 2 python python-3.6

我在python教程中看到了这个:

需要__init__.py文件才能使Python将目录视为包含包;

我在pycharm中创建了这样的目录层次结构,其中subdir1不包含__init__.py,而subdir2包含__init__.py文件. 在此输入图像描述

首先,我将Directory添加到system.pyth中.

我分别在hello1.py和hello2.py中编写了一个hello函数.

然后我在测试文件中调用hello func,如下所示:

# test1.py
from subdir1 import hello1
hello1.hello()

# test2.py
from subdir2 import hello2
hello2.hello()
Run Code Online (Sandbox Code Playgroud)

他们都成功了.对于来自不同目录的导入模块,似乎不需要__init__.py,对吧?

所以,我想知道在什么情况下需要__init__.py.谢谢你的回答!

hal*_*sec 5

Python 3.3+具有隐式命名空间包,允许您在不使用的情况下创建包__init__.py.在Python 2中,__init__.py旧方法仍然有效.

允许隐式命名空间包意味着可以完全删除提供__init__.py文件的要求,并且可以将受影响的部分安装到公共目录中,或者在分布看起来合适时拆分多个目录.

注意:init .py文件用于将磁盘上的目录标记为Python包.

有用的链接:

  1. 隐式命名空间包