什麼是__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