Python 模組的定位和執行 (runpy)
命令列選項的 –m 選項搜尋給定的模組並將其作為 __main__ 模組執行。此機制由 Python 標準模組中的 runpy 模組內部支援,該模組允許使用 Python 模組名稱空間而不是檔案系統來定位指令碼。
此模組定義了兩個函式
run_module()
此函式執行指定模組的程式碼並返回生成的模組全域性字典。
mod_name 引數應該是絕對模組名。如果模組名指的是包而不是普通模組,則匯入該包,然後執行該包中的 __main__ 子模組,並返回生成的模組全域性字典。
在執行模組程式碼之前,會在全域性字典中設定特殊的全域性變數 __name__、__spec__、__file__、__cached__、__loader__ 和 __package__。
如果命名模組是包,則 __name__ 設定為 mod_name + '.__main__',否則設定為 mod_name 引數。
__file__、__cached__、__loader__ 和 __package__ 根據模組規範正常設定。
run_path()
此函式執行給定路徑下檔案的程式碼,並返回生成的模組全域性字典。提供的路徑可以指 Python 原始檔、編譯後的位元組碼檔案或包含 __main__ 模組的有效 sys.path 條目(例如,包含頂級 __main__.py 檔案的 zip 檔案)。
在執行模組程式碼之前,會在全域性字典中設定特殊的全域性變數 __name__、__spec__、__file__、__cached__、__loader__ 和 __package__。
如果此可選引數不為 None,則 __name__ 設定為 run_name,否則設定為 '
示例
將以下指令碼儲存為 runpyeample.py
#runpy example def add(x,y): return x+y def main(): x,y = 10,20 print (add(x,y)) return if __name__=='__main__': main()
執行上述示例的通常過程如下
>>> import runpyexample as rp >>> rp.main() 30 >>>
但是,我們現在使用 runpy 模組來執行它,而無需實際匯入它。
>>> import runpy >>> runpy.run_module('runpyexample', run_name='__main__') 30
您也可以使用 run_path() 函式。
>>> runpy.run_path('runpyexample.py', run_name='__main__') 30
如前所述,runpy 支援 Python 命令列的 –m 開關。
E:\python37>python -m runpyexample 30