我有一个简单的python项目来学习两个文件__init__.py
和__main__.py
当我执行python -m pkg_name
时
它同时运行__init__.py
和__main__.py
执行python -m pkg_name.__init__.py
时
它会两次调用__init__.py
。
我想知道为什么__init__.py
在我拨打__init__.py
时被调用两次
它就像java中的静态代码,当我们调用类的所有数据时
在静态代码中自动触发。
__init__.py
在python中的相关性以及在导入/加载或调用包进行处理时执行它的好处。
请帮助我更好地理解这些概念。
"""Run a sequence of programs, testing python code __main__ variable
Each program (except the first) receives standard output of the
previous program on its standard input, by default. There are several
alternate ways of passing data between programs.
"""
def _launch():
print('Pipeline Launched')
if __name__ == '__main__':
print('This module is running as the main module!')
_launch()
> __init__.py
"""This is the __init__.py file of pipleline package
Used for testing the import statements.
"""
print(__name__)
print('This is the __init__.py file of pipleline package')
print('Exiting __init__ of pipeline package after all initialization')
答案 0 :(得分:2)
以下命令用于执行Python模块或包:
python -m module
其中module
是模块/包的名称没有 .py扩展名。
__init__.py
文件和__main__.py
文件的目录匹配,则该目录被视为Python包并首先加载。然后执行__main__.py
脚本。__main__.py
文件的包。 (简短)描述在官方文档中完成:29.4. main — Top-level script environment。
如果您运行此命令:
python -m pkg_name
它加载(并运行)__init__.py
和__main__.py
:这是正常行为。
如果您运行此命令:
python -m pkg_name.__init__.py
如果你离开" .py"它应该会失败扩展
如果它运行,该命令首先加载pkg_name
包:它首先执行__init__.py
。然后再次运行它。
答案 1 :(得分:0)
它用于将文件夹定义为包,其中包含所需的模块和资源。
您可以将is用作空文件或添加有关包的文档或设置模块的初始条件。
此外,正如Natecat所述,只要您加载包,就会执行__init__.py
。这就是为什么当你明确地调用__init__.py
时,它会加载包(第一次加载)然后执行__init__.py
(第二次加载)。