ホームページ >バックエンド開発 >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 モジュールには、次の 2 つの形式があります。コードモジュールとパッケージモジュール。コード モジュールは実行可能な 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 は非常に重要になります。コマンドラインからモジュールを実行します。たとえば、http.server モジュールの実行は、python -m http.server.
  • インストールせずにローカル パッケージを実行する: を使用すると簡素化されます。デフォルトでは、-m は現在の作業ディレクトリを sys に追加します。パスを指定すると、絶対インポートまたは相対インポートを含むローカル パッケージの実行が可能になります。この動作により、開発目的でパッケージをインストールする必要がなくなります。

-m の制限

その機能にもかかわらず、-m は Python で記述されたモジュールのみを実行できるという制限があります。 (.py ファイル)。 C コンパイルされたコード モジュールはサポートされていません。

比較分析

Import ステートメントによるモジュール実行:

  • sys.path は変更されません
  • name を絶対に設定modulename
  • package 直接の親 package
  • __init__.py がすべてのパッケージに対して評価されました
  • __main__.py がコード モジュールに対して評価されました

コマンドライン経由のモジュール実行ファイル名:

  • sys.path がモジュールのディレクトリを含むように変更されました
  • name が '__main__' に設定されました
  • package が None に設定されました
  • __init__.py は何も評価されていませんパッケージ
  • __main__.py はパッケージ モジュールとコード モジュールの両方に対して評価されました

モジュール名 (-m) を使用したコマンド ラインによるモジュールの実行:

  • sys.path が現在のものを含むように変更されましたdirectory
  • name を '__main__' に設定
  • package 直接の親 package
  • __init__.py をすべて評価パッケージとコードの両方についてpackages
  • __main__.pyが評価されましたmodules

結論

-m スイッチは、コマンド ラインから Python モジュールを実行するための強力なツールとして機能します。モジュール名をファイル名に変換し、ローカル パッケージを実行し、相対インポートをサポートする機能により、Python コードを管理する便利で汎用性の高い手段が提供されます。 -m は Python ベースのモジュールの実行に制限があるにもかかわらず、Python 開発者にとって依然として貴重な資産です。

以上がPython の `-m` スイッチの目的は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。