什么是__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
将被执行。