首頁 >後端開發 >Python教學 >Python 的 `-m` 開關的目的是什麼?

Python 的 `-m` 開關的目的是什麼?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-27 05:23:10800瀏覽

What is the purpose of Python's `-m` switch?

揭示Python -m 開關的用途

背景:組織Python 模組

Python 模組是組織的基本單位,有兩種形式:程式碼模組和包模組。程式碼模組由可執行的 Python 程式碼組成,而套件模組包含包含其他模組的目錄。

Python 為模組指派唯一的識別符,稱為模組名稱和檔案名稱。通常,模組由 Python 程式碼中的模組名稱和命令列中的檔案名稱來識別。 Python 使用 sys.path 變數將模組名稱無縫轉換為檔案名稱。

-m 的揭幕

在 Python 2.4.1 中引入,-m 開關最初允許透過命令執行模組基於其模組名稱的行。這提供了指定檔案名稱的替代方法。在其初始迭代中,-m 僅支援頂級模組名稱。

PEP 338 擴充 -m 來處理更複雜的模組名稱表示,允許執行巢狀模組,例如 http.server。此外,它還要求評估所有父包 __init__.py 檔案。

最後的關鍵進步來自 PEP 366,賦予 -m 不僅支援絕對導入而且還支援顯式相對導入的能力。這是透過將 package 變數設定為給定模組名稱的父模組來實現的。

-m

  • 執行未知模組的實際應用檔名: 由於許多Python 使用者熟悉模組名稱,但不一定熟悉它們的檔名,因此-m 對於執行來說非常有用來自命令列的模組。例如,使用 python -m http.server 簡化了 http.server 模組的執行。
  • 無需安裝即可執行本機套件: 預設情況下,-m 將目前工作目錄新增至 sys.path 中。路徑,允許執行包含絕對或相對導入的本機套件。此行為消除了出於開發目的安裝軟體包的需要。

-m 的限制

儘管 -m 功能強大,但其局限性在於它只能執行用 Python 編寫的模組(.py 檔案)。不支援 C 編譯程式碼模組。

比較分析

透過 Import 語句執行模組:

  • 不修改 sys.path
  • 名稱設定為絕對modulename
  • package 設定為直接父包
  • 為所有包裝評估的__init__.py
  • 為程式碼模組評估的__main__.py

透過命令列執行模組檔名:

  • sys.path 修改為包含模組的目錄
  • name 設定為'__main__'
  • package 設定為None
  • __init__.py未評估任何套件
  • __main__.py 對套件和程式碼模組進行評估

透過命令列使用模組名稱(-m)執行模組:

  • sys.path修改為包含目前的目錄
  • 名稱設定為'__main__'
  • package設定為直接父包
  • __init__. py評估所有套件
  • __main__.py對套件和程式碼進行評估module

結論

-m 開關是從命令列執行 Python 模組的強大工具。它能夠將模組名轉換為檔案名稱、執行本機套件以及支援相對導入,為管理 Python 程式碼提供了一種方便且通用的方法。儘管它限制了執行基於 Python 的模組,但 -m 對 Python 開發人員來說仍然是無價的資產。

以上是Python 的 `-m` 開關的目的是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn