-m スイッチの目的は何ですか?
背景: 問題
次の 2 つのコード スニペットを考えてみましょう:
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 スイッチの 2 つの注目すべき使用例は次のとおりです。
-
標準の実行ライブラリまたはサードパーティ モジュール: モジュール名はわかっているがファイル名がわからない場合は、-m を使用して実行できます。コマンドラインから実行します (例: python -m http.server.
-
インポートを含むローカル パッケージの実行: -m を使用すると、絶対インポートまたは相対インポートを含むローカル パッケージを実行できます。インストールします。これは、 pip install -e を使用するのと似ています。開発モード。
詳細な比較
モジュールの実行方法の違いを説明するために、詳細な比較を次に示します。
Import ステートメントによる実行:
- sys.path は
- __name__ は絶対モジュール名に設定されます。
- __package__ は直接の親パッケージに設定されます。
- __init__.py はすべてのパッケージとコード モジュールに対して評価されます。 .
コマンドライン経由で実行ファイル名:
- sys.path は、ファイル名の親ディレクトリを含むように変更されます。
- __name__ は '__main__' に設定されます。
- __package__ は に設定されますなし。
- __init__.py は何も評価されません。 package.
モジュール名:
によるコマンドラインによる実行
- sys.path は現在のディレクトリを含むように変更されます。
- __name__ は '__main__' に設定されます。
- __package__ はモジュール名の直接の親パッケージに設定されます。
- __init__.py はすべてのパッケージとコードに対して評価されますmodule.
結論
-m スイッチは、Python の実行機能を強化する多用途ツールです。これにより、便利なモジュールの実行が可能になり、インポートとコマンドライン実行の機能が組み込まれ、相対インポートによるローカル パッケージの実行が可能になります。
以上がPython で `-m` スイッチを使用する目的と利点は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。