问题:什么是__main__.py?
什么是__main__.py
文件,哪些代码排序应我把它付诸表决,而当我应该有一个?
回答 0
通常,通过在命令行上命名.py文件来运行Python程序:
$ python my_program.py
您还可以创建一个充满代码的目录或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__
模块通常不是来自__main__.py
文件。可以,但是通常不会。当您运行类似python my_program.py
的脚本时,脚本将作为__main__
模块而不是my_program
模块运行。对于以以下方式运行的模块,也会发生这种情况:python -m my_module
或以其他方式,。
如果__main__
在错误消息中看到该名称,则不一定意味着您应该在寻找__main__.py
文件。
回答 1
是什么 __main__.py
文件是做什么用的?
创建Python模块时,通常在使该模块main
作为程序的入口点运行时使其执行某些功能(通常包含在函数中)。通常,通过将以下常见用法放在大多数Python文件的底部来完成此操作:
if __name__ == '__main__':
# execute only if run as the entry point into the program
main()
您可以使用来获得与Python包相同的语义__main__.py
。这是一个Linux Shell提示符,$
如果您在Windows上没有Bash(或另一个Posix Shell),只需demo/__<init/main>__.py
在EOF
s 之间创建以下内容的文件:
$ 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命令的末尾输入+ (文件末尾字符)来执行不带<< EOF
s和以EOF
s 结尾的上述操作)CtrlD
现在:
$ python demo
demo/__main__.py executed
demo/__init__.py executed
main executed
您可以从文档中得出。该文档说:
__main__
—顶级脚本环境
'__main__'
是在其中执行顶级代码的作用域的名称。从标准输入,脚本或交互式提示中读取时,模块的__name__
设置等于'__main__'
。通过检查模块自身
__name__
,可以发现模块是否在主作用域中运行,这允许使用通用习语在模块中作为脚本运行时或python -m
在导入时有条件地在模块中有条件地执行代码:if __name__ == '__main__': # execute only if run as a script main()
对于包,通过包含一个
__main__.py
模块可以实现相同的效果 ,当使用来运行该模块时,将执行其内容-m
。
压缩的
您还可以将其打包到一个文件中,然后从命令行运行,如下所示-但请注意,压缩包不能执行子包或子模块作为入口点:
$ python -m zipfile -c demo.zip demo/*
$ python demo.zip
demo/__main__.py executed
demo/__init__.py executed
main() executed
回答 2
__main__.py
用于zip文件中的python程序。在__main__.py
当zip文件中运行文件就会被执行。例如,如果压缩文件是这样的:
test.zip
__main__.py
和的内容__main__.py
是
import sys
print "hello %s" % sys.argv[1]
然后,如果我们要跑步,python test.zip world
我们就会hello world
下车。
因此,__main__.py
当在zip文件上调用python时,文件就会运行。
回答 3
创建__main__.py
于yourpackage
使其可执行文件:
$ python -m yourpackage
回答 4
如果您的脚本是目录或ZIP文件而不是单个python文件,__main__.py
则在将“脚本”作为参数传递给python解释器时将执行该脚本。