我在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()
他们都成功了。对于来自不同目录的导入模块,似乎不需要__init__.py,对吧?
所以,我想知道在什么情况下需要__init__.py。谢谢你的回答!
答案 0 :(得分:5)
Python 3.3+具有隐式命名空间包,允许您创建没有__init__.py
的包。在Python 2中,__init__.py
是旧方法,仍然有效。
允许隐式命名空间包意味着可以完全删除提供 __ init __。py 文件的要求,并且可以将受影响的部分安装到公共目录中,或者在分布看起来合适时拆分多个目录。
注意: init .py文件用于将磁盘上的目录标记为Python包。
有用的链接:
答案 1 :(得分:0)
__init__.py
当我们退出解释器时,Python解释器中的所有代码都将丢失。但是在编写大型程序时,文件被分成多个不同的文件,以便于使用,调试和可读性。在Python中,模块用于实现这些目标。模块只是带有Python定义和语句的文件。要导入的模块名称与没有.py扩展名的Python文件的名称相同。
因此,如果您希望某个目录下的文件是一个模块,并且您希望它是一个可导出的模块,那么该类别需要具有 init < /strong>.py
答案 2 :(得分:0)
使Python将目录视为package
。