python -mコマンドとは何ですか

python -m コマンドの意味は何ですか?
まず、python --help で -m の意味がわかります: これは、ライブラリ内の Python モジュールを実行するスクリプトとして使用することを意味します。

python --help コマンドでは、結果
ここに画像の説明を挿入しますpython -m xxx.py と python xxx.py が表示されます。違いは何ですか?
py ファイルをロードするには、次の 2 つの方法があります。

これは、直接操作 (python xxx.py) と呼ばれ
、スクリプトとしてモジュールを開始します (python -m xxx.py)
. py ファイルをロードするさまざまな方法は、主に sys.path 属性に影響します。sys.path は、liunx の PATH に相当します。

sys.path を見てみましょう

import sys
print(sys.path)

#结果
#[' 'D:\\Python\\Python38\\python38.zip', 'D:\\Python\\Python38\\DLLs', 'D:\\Python\\Python38\\lib','D:\\Python\\Python38\\lib\\site-packages']

上記内容の一部のみを抜粋しました。これは、現在の Python インタープリターが実行されている環境です。Python インタープリターは、これらのディレクトリで依存ライブラリを探します。

以下に、同じファイルが異なる方法で開始された場合に sys.path 属性の値がどのように異なるかを示す 2 つの例を示します。
ファイル ディレクトリは D:\book\img\run.py で、D:\book は実行する現在のディレクトリです。

# run.py 内容如下
import sys
print(sys.path)

直接開始します。

python ./img/run.py

['D:\book\img', 'D:\Python\Python38\python38.zip', 'D:\Python\Python38\DLLs', 'D:\Python\Python38\lib', …]

モジュールとして開始

python -m img.run

['D:\book', 'D:\Python\Python38\python38.zip', 'D:\Python\Python38\DLLs', 'D:\Python\Python38\lib',…]

注意深い生徒は最初の行に違いがあることに気づくでしょう。
直接起動では、run.py ファイルが配置されているディレクトリを sys.path 属性に置きます。
モジュールの起動では、コマンドを入力したディレクトリ (つまり、現在のパス) を sys.path 属性に設定します。

この機能の用途は何ですか?

# 目录结构如下
p1/
    __init__.py
    m.py
p2/
    __init__.py
    run.py
# run.py 内容如下
import sys
from p1 import m
print(sys.path)

run.py ファイルを開始するにはどうすればよいですか?
ダイレクトスタート(失敗)

>>>python p2/run.py
#ImportError: No module named package

モジュールとして開始 (成功)

>>>python -m p2.run

起動する必要がある py ファイルがモジュールを参照する場合。注意する必要があります。開始時に、sys.path にインポートしたモジュールへのパスがあるかどうかを考慮する必要があります。
このとき、直接起動とモジュール起動のどちらを使用するべきでしょうか? 目的は、インポートされたモジュールのパスを sys.path に入れることです。

わかりますか?
公式ドキュメントのリファレンス

mod というモジュールをインポートするとき、インタープリターはまず現在のディレクトリで m.py という名前のファイルを検索します。見つからない場合は、sys.path 変数で指定されたディレクトリ リストを検索します。sys.path 変数の初期値は次から取得されます。

1. スクリプトのディレクトリ(カレントディレクトリ)を入力します。
2. 環境変数 PYTHONPATH で表されるディレクトリ リストを検索します (これはシェル変数 PATH と同じ構文、つまりディレクトリ名のリストです)。
3. Python のデフォルトのインストール パスを検索します。
実際、インタプリタは sys.path 変数で指定されたパス ディレクトリでモジュールを検索します。デフォルトでは、初期化時に入力スクリプト (または現在のディレクトリ)、PYTHONPATH、およびインストール ディレクトリが含まれます。これにより、Python プログラムはモジュール検索ディレクトリを変更または置換する方法を認識できるようになります。
エラーが発生しやすい領域:
新入生が python -m xxx.py を使用すると、「xxx.py」のモジュール仕様の検索中にエラーが発生します (ModuleNotFoundError: path属性 no...
上記のコマンドで示されているように、Python -m はこれを指します.py ファイルはモジュールとして実行されますが、誤って .py サフィックスを追加すると、このエラーが発生します。解決策も非常に簡単です。「-m」を削除するか、「.py」サフィックスを削除すると、問題は解決します。解決される

おすすめ

転載: blog.csdn.net/qq_39523365/article/details/131698497