82268


Pythonのコマンドで使用される `-m` が意味するものっていったい何なんでしょうか。

例えば、仮想環境を作るときに使う以下のコマンドで使用されている `―m` のことです。

[code]

    $ python3 -m venv [newenvname]
    
[/code]

具体的な意味などあれば教えてください。


CC BY-SA 4.0
2021-09-05T17:05:58.307
82266
2021-09-06T00:00:09.487
2021-09-05T23:53:56.843
3060
48018
question
python
Python のコマンドライン引数で使用される -m の意味は？


ドキュメントに書いてありますよ。おそらく module の最初の文字を取ったものでしょう。

[1.1.1. インターフェイスオプション - 1.
コマンドラインと環境](https://docs.python.org/ja/3/using/cmdline.html#interface-options)

>   * `-m モジュール名` として Python モジュールパスにあるモジュールを指定された場合、そのモジュールをスクリプトとして実行します。
>

[-m <module-
name>](https://docs.python.org/ja/3/using/cmdline.html#cmdoption-m)

> sys.path から指定されたモジュール名のモジュールを探し、その内容を __main__ モジュールとして実行します。  
>  引数は module 名なので、拡張子 (.py) を含めてはいけません。モジュール名は有効な Python の絶対モジュール名 (absolute
> module name) であるべきですが、実装がそれを強制しているとは限りません (例えば、ハイフンを名前に含める事を許可するかもしれません)。  
>  ...以下続くが省略

使用しているOS上のPATHではなく、Pythonのモジュールパスに存在するモジュールを指定して実行するためのものでしょう。

例えば pip
はインストールしたOS上でPATHにあるディレクトリにあれば実行できるものと、Pythonのモジュールパスに存在するものの2つがあり、だいたいは pip
とパラメータだけで動作しますが、pip自身を新しい版数にアップグレードする場合は、その単独で動作するプログラムも上書きして更新する必要があるために、Pythonモジュールを呼び出す形の
`Python -m pip install --upgrade pip` として実行させます。


CC BY-SA 4.0
2021-09-05T18:00:17.393
82267
2021-09-05T18:00:17.393
26370
82266
answer


`-m モジュール名` で指定することでそのモジュールを実行します。  
パッケージ名を指定した場合はそのパッケージの`__main__.py`を実行します。

例えば  
`$ python3 -m venv [newenvname]`  
の場合は
venvパッケージの`__main__.py`を実行することになります。<https://github.com/python/cpython/blob/3.9/Lib/venv/__main__.py>

また別の例としてtimeitモジュールの場合は  
`$ python3 -m timeit -h`  
としたときに、timeit.pyを実行することになります。  
<https://github.com/python/cpython/blob/3.9/Lib/timeit.py>

この `-m` の意味としては、  
「モジュール名(またはパッケージ名)の指定で実行できるため、どこにインストールしているか知らなくてもファイルのパスを指定することなく実行できる」ことです。

もし `-m` が使えなかったら、「Pythonをインストールしたパス配下のlib/venv/__main__.pyを実行して」みたいになります。

`$ python3 (Pythonをインストールしたパス)/lib/venv/__main__.py`


CC BY-SA 4.0
2021-09-06T00:00:09.487
82268
2021-09-06T00:00:09.487
28626
82266
answer