Python -mオプションの仕組み

コマンドラインで-mオプションでモジュールを指定することで、モジュールを実行することができます。

実行例

たとえば、Pythonで変数の代入にどの程度時間がかかるかを調べたいとします。

Pythonインタプリタを起動することなくコマンドライン上で計測が可能です。

timeitは時間を計測するPythonモジュール)

1
2
>>> python -m timeit 'a=1'
100000000 loops, best of 3: 0.0124 usec per loop

解説

ドキュメントには以下のような記述があります。

sys.pathから指定されたモジュール名のモジュールを探し、その内容をmainモジュールとして実行します。

つまり、モジュールを直接実行することで、-mオプションと等価な処理を実行できそうです。

timeitモジュールを例に確認してみましょう。

まずtimeitを探します。(コマンドは適宜、読み替えてください)

1
sudo find / -name timeit.py

仮想環境の構築等で、複数ヒットするかもしれません。

その場合は、下記のようにして-mオプション実行時に実際に検索しているパスも参考にしてください。

1
python -c 'import sys;print(sys.path)'

適切なtimeit.pyが見つかったとしましょう。以降、フルパスを以下のように表現します。

[YOUR_PATH]/timeit.py

では、いよいよ二つのコマンドが等価であることを確認してみましょう。

1
python -m timeit 'a=1'
1
[YOUR_PATH]/timeit.py 'a=1'

等価であることが確認できたと思います。

-mオプションとともによく使うモジュール

http.server

1
python -m http.Server

Webサーバを簡単に立てることが出来る。
(Python2.xではSimpleHTTPServer

http.server(旧SimpleHTTPServer)の使い方で詳しい使い方を紹介しています。

unittest

1
python -m unittest test_test_module1

base64

base64エンコードが出来る。

1
python3 -m base64 a.png

比較用コマンド

1
base64 -i a.png

json

jsonを整形することが出来る。

1
python -m json.tool sample.json

記事情報

  • 投稿日:2020年3月20日
  • 最終更新日:2020年5月16日