什么是__main__.py
文件,我应该把什么样的代码放进去,什么时候应该放一个?什么是__main__.py?
回答
通常情况下,一个Python程序由命令行上命名.py文件运行:
$ python my_program.py
您还可以创建一个目录或压缩文件的完整代码,包括__main__.py
。然后,你可以简单地命名的目录或zip文件在命令行上,并自动执行__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
用于zip文件中的python程序。当运行zip文件时,__main__.py
文件将被执行。例如,如果压缩文件是这样:
test.zip
__main__.py
和__main__.py
内容是
import sys
print "hello %s" % sys.argv[1]
然后如果我们运行python test.zip world
我们会得到hello world
出来。
因此,__main__.py
文件在zip文件上调用python时运行。
如果您的脚本是一个目录或ZIP文件而不是一个Python文件,当“脚本”作为参数传递给python解释器时,将会执行__main__.py
。
创建__main__.py
在yourpackage
使其可执行文件:
$ python -m yourpackage
什么是
__main__.py
文件?
当创建Python模块时,通常使模块在作为程序的入口点运行时执行某些功能(通常包含在main
函数中)。这通常是与放置在最Python文件底部以下常见成语做:
if __name__ == '__main__':
# execute only if run as the entry point into the program
main()
你可以得到一个Python包相同的语义与__main__.py
。这是Linux命令提示符下,$
,如果你没有在Windows击(或其他Posix的外壳)就在demo/__<init/main>__.py with contents in between the
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中,你能做到以上没有<< EOF
S和按下Ctrl-d,结束文件的字符结束EOF
S,在每个cat命令结束)
现在:
$ python demo
demo/__main__.py executed
demo/__init__.py executed
main executed
你可以从文档中导出离子。该documentation说:
__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 demozip demo/*
$ python demozip
demo/__main__.py executed
demo/__init__.py executed
main() executed
- 1. 如何在__main__.py中使用gunicorn?
- 2. 什么是Python中的.py〜文件
- 3. %py在python中的含义是什么?
- 4. 什么是.py文件的MIME类型?
- 5. __init__.py的用途是什么?
- 6. 在__main__.py中使用模块自己的对象
- 7. /usr/bin/python:在使用subprocess时无法在'/'中找到'__main__.py'
- 8. Expose __main__
- 9. 为什么Django包含很多'__init__.py'?
- 10. 它为什么这样做?如果 - __name__ == '__main__'
- 11. 为什么Python每次都在__main__之外运行代码?
- 12. 为什么main()函数没有在if'__main__'中定义?
- 13. if __name__ =='__main__'
- 14. 是否__main__保证始终可导入?
- 15. PyPI项目页面中的“Py版本”是什么意思?这是否重要?
- 16. 通过命令行运行.py文件时,“&”符号的用途是什么?
- 17. py。 “小数”国防部:为什么上下文的标志而不是数字
- 18. 为什么'__main__'中的导入模块不允许multiprocessig使用模块?
- 19. cx_freeze不能使用__init__ == __main__
- 20. Python导入钩子和__main__
- 21. 为什么我会在__init__.py文件中放入python代码
- 22. .py到python程序中意味着什么?
- 23. 为什么'setup.py develop'允许导入没有'__init__.py'的目录?
- 24. 为什么我无法在django.db.__init__.py中找到'__path__'?
- 25. 为什么“file”命令对.py文件感到困惑?
- 26. 为什么redis-py没有geo扩展名?
- 27. 使用__main__.py分配可执行的zip文件,如何访问额外的数据?
- 28. 什么“?”做?什么是__FILE__?
- 29. 什么是<NS0:什么?
- 30. 什么是setDetailItem:做什么?
'__init __。py'服务的目的不同于'__main __。py' - 并不真正理解为什么这被标记为重复。 RAS,你能解释一下吗? – 2017-10-14 13:26:38