什么是__main__.py?

什么是__main__.py文件,我应该把什么样的代码放进去,什么时候应该有一个?

通常,通过在命令行上命名.py文件来运行Python程序:

 $ python my_program.py 

您也可以创build一个包含代码的目录或zipfile,并包含一个__main__.py 。 然后,您可以简单地在命令行上命名目录或zipfile,并自动执行__main__.py

 $ python my_program_dir $ python my_program.zip # Or, if the program is accessible as a module $ python -m my_program 

你必须自己决定你的应用程序是否可以从这样的执行中受益。

什么是__main__.py文件?

在创buildPython模块时,通常使模块在作为程序的入口点运行时执行一些function(通常包含在main函数中)。 这通常是在大多数Python文件的底部放置下面的通用语言来完成的:

 if __name__ == '__main__': # execute only if run as the entry point into the program main() 

您可以使用__main__.py获取Python包的相同语义。 这是一个linux shell提示符$ ,如果在Windows上没有Bash(或另一个Posix shell),只需在demo/__<init/main>__.py with contents in between the __。py中创build这些文件, demo/__<init/main>__.py with contents in between the EOF demo/__<init/main>__.py with contents in between the

 $ mkdir demo $ cat > demo/__init__.py << EOF print('demo/__init__.py executed') def main(): print('main executed') EOF $ cat > demo/__main__.py << EOF print('demo/__main__.py executed') from __init__ import main main() EOF 

(在Posix / Bash shell中,可以通过在每个cat命令结尾处inputCtrl-D(文件结束符)来执行上述操作,而不使用<< EOF s并结束EOF s)

现在:

 $ python demo demo/__main__.py executed demo/__init__.py executed main executed 

你可以从文件中得到这个。 该文件说:

__main__ – 顶层脚本环境

'__main__'是顶层代码执行的范围的名称。 从标准input,脚本或交互式提示读取时,模块的__name__设置为等于'__main__'

一个模块可以通过检查自己的__name__来发现它是否在主要作用域中运行,这允许在模块中作为脚本或python -m运行时有条件地执行代码的通用习惯用法,但是当它被导入时:

 if __name__ == '__main__': # execute only if run as a script main() 

对于一个包来说,通过包含一个__main__.py模块可以达到同样的效果,当使用-m模块运行模块时,将会执行这个模块的内容。

拉链

你也可以把它打包成一个单独的文件并像这样从命令行运行它 – 但是请注意,压缩包不能有子包:

 $ python -m zipfile -c demozip demo/* $ python demozip demo/__main__.py executed demo/__init__.py executed main() executed 

__main__.py用于zip文件中的python程序。 当运行zip文件时, __main__.py文件将被执行。 例如,如果zip文件是这样的:

 test.zip __main__.py 

__main__.py的内容是

 import sys print "hello %s" % sys.argv[1] 

那么如果我们要运行python test.zip world我们会得到hello world

因此,当在一个zip文件上调用python时, __main__.py文件运行。

你在你的yourpackage创build__main__.py ,使其可执行为:

 $ python -m yourpackage 

如果您的脚本是一个目录或ZIP文件而不是一个Python文件,当“脚本”作为parameter passing给python解释器时, __main__.py将被执行。