-m 開關的目的為何?
背景:問題
考慮以下兩個程式碼片段:
python -m mymod1 mymod2.py args
python mymod1.py mymod2.py args
在這兩種情況下,都會呼叫mymod1.py 並將sys. argv 設定為['mymod1.py','mymod2.py','args']。這就提出了一個問題:-m 開關的目的是什麼?
答案:-m 的作用
-m 開關有幾個重要的用途:
-
從命令列執行Python程式碼:它允許您透過指定模組名稱而不是指定模組名稱來從命令列執行Python程式碼。 文件名。當您知道模組名稱但不知道檔案名稱時,這非常有用,特別是對於標準庫模組或第三方模組。
-
將目錄新增至 sys.path: Python 根據模組檔案名稱決定在其 sys.path 上。 -m 開關將目前目錄新增至 sys.path,讓您可以從目前目錄匯入模組。
-
使用相對導入執行程式碼: 從指令執行具有相對導入的模組時行中,-m 開關將 __package__ 變數設定為指定模組名稱的父模組。這使得相對導入能夠正常運作。
用例
-m 開關的兩個值得注意的用例是:
-
運行標準庫或第三方模組: 如果您知道模組名稱但不知道檔案名,則可以使用-m 來運行它命令行,例如python -m http.server.
-
使用導入執行本地包: 您可以使用 -m 執行包含絕對或相對導入的本地包,而無需安裝它。這與使用 pip install -e 類似。
詳細比較
為了說明模組執行方式的差異,這裡有詳細比較:
透過Import語句執行:
透過Import語句執行:-
- 透過Import語句執行:
- 透過Import語句執行:
-
sys.path 是未修改。 __name__ 設定為絕對模組名稱。
__package__ 設定為直接父包。 - __init__.py 針對所有套件和程式碼模組進行評估.
-
- 透過命令列執行檔名:
-
sys .path 被修改為包含檔案名稱的父目錄。 __name__ 設定為 '__main__'。
__package__ 設定為無。 __init__.py 不會針對任何內容進行評估package.透過命令列執行,模組名稱:
- sys.path 被修改為包含目前目錄。
- __name__ 設定為 '__main__'。
- __package__ 設定為模組名稱的直接父包。
- __init__.py 針對所有套件和程式碼進行評估
結論
-m 開關是一個增強 Python 執行能力的多功能工具。它支援方便的模組執行,結合了導入和命令列執行的功能,並允許透過相對導入執行本地包。
以上是在 Python 中使用「-m」開關的目的和好處是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!