[英]How to find out the starting point of code execution in any Python project?
我一直在研究各種開源GitHub Python項目,例如http-prompt
和Theano
我無法弄清楚它們的起點在哪里,以便可以優雅地調試它們。 我是否需要在每個文件中查找__main__
方法?
我來自Android背景; 所以我在搜索類似AndroidManifest.xml
相關內容,從那里我可以從代碼的開始位置獲得想法,但是嘗試失敗。
可以通過兩種方式加載Python腳本:
import mymodule
$ python mymodule.py
在這兩種情況下,腳本中的所有代碼均被執行
通常, if __name__ == '__main__':
定義入口點:
if __name__ == '__main__':
print('Started from commandline')
else:
print('Imported as a module')
在git項目中,您可以嘗試執行以下操作以查找要從命令行啟動的所有腳本:
$ git grep "if __name__ ?== ?\W__main__\W"
請注意,您提到的項目不包含任何顯式定義的入口點,而是在打包時生成入口點腳本以進行分發(為此目的,請參閱setup.py
)
清單文件的Python等效項通常是setup.py
,因此這是開始查找的好地方。 包裹可以:
scripts
關鍵字定義應該安裝的scripts
(就像Theano一樣 ); 要么 entry_points
關鍵字定義應在命令行中顯示的函數(就像http-prompt
一樣,指向cli
函數 )。 如果兩者都不提供,則該包可能被設計為import
而不是執行,在這種情況下,請查看用法示例以及__init__.py
根目錄(例如Theano的根目錄),它可能會告訴您什么對象是暴露於外界。 有關模塊結構的更多信息,請參見Python文檔 。
但是,Python是一種動態,靈活的語言,因此沒有“魔術子彈”可以告訴您在哪里查看。 有沒有例如特定main.py
必須定義的文件,例如(雖然有__main__.py
可以定義,見什么是__main__.py? )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.