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

更新於:2020年6月30日

3K+ 次瀏覽

啟動您的 職業生涯

完成課程獲得認證

開始
廣告