Pythonモジュールは、Pythonが見つけることができる場所にある単なるスクリプトファイルです。すべてのスクリプトと同じように、スクリプトがどこにあるかわかっている場合は、スクリプトを直接実行できます。 python /path/to/module.py
。
正しく設計されたモジュールは、通常、設定したもの(たとえば、インポートできる関数やタイプ)以外は何もしませんが、通常は目に見える副作用がありません。だからあなたはimport sys
をやることができ、何も起こりません。
しかし、モジュールによっては、コマンドラインから実行すると便利なものがあります。その例にはvenv
が含まれていますが、http.server
またはidlelib
もあります。これらはすべて、通常のモジュールであり、副作用なしに他のモジュールからインポートできます。
しかし、直接実行するとき、彼らはすべてのことを行う(仮想環境を設定しますvenv
例えばを、http.server
は、単純なHTTPサーバーを実行し、idlelib
空転)。これは通常、次のチェックで行われます。
if __name__ == '__main__':
print('Module is being executed directly, so do stuff here')
これは、スクリプト/モジュールの認識の特別な方法で直接実行されている、またはそれだけでいくつかの他のモジュールからインポートされていますか。質問“What does if __name__ == '__main__':
do?”について詳しく知ることができます。
これまでに設定したように、python /path/to/module.py
を使用してモジュールを直接実行することができます。しかし、これはあなたがモジュールへの完全なパスを知る必要があります。そのため、-m
オプションが有効になります。通常はimport modulename
を使用してインポートできるモジュールの場合は、python -m modulename
を使用してそのモジュールを直接実行できます。ちょうどあなたが完全なパスを入力したかのように。
上記の例では、python -m venv
,python -m http.server
を使用できます。またはpython -m idlelib
。
ドキュメントは、あなたの友人です:https://docs.python.org/3.5/using/cmdlinehtml#cmdoption-m – freakish
あなたは[documentation](https://docs.python.org/using/cmdline.html#cmdoption-m)を読んだことがありますか?あなたはそれが十分に文書化されているが、 "ドキュメンテーション"にはリンクしていないと言ったので、尋ねるだけです。 – MSeifert