yiskw note

機械学習やプログラミングについて気まぐれで書きます

【Python】__main__.pyを理解する


__main__.pyとは

Pythonでは__main__.pyというファイルを定義することで,
python -m <MODULE_NAME>を実行した際の挙動を定義できるようです.
-mオプションはモジュールをスクリプトとして実行するオプション

例えば以下の例を見てみます.

ディレクトリ構造

.
├── mod/
│   ├── __init__.py
│  └──  __main__.py
└── README.md

mod/__main__.pyの中身

if __name__ == "__main__":
    print("running __main__.py in mod.")

このとき以下を実行すると,__main__.pyの中身が実行されていることが確認できます.

$ python -m mod     # もしくは python mod でも良い
running __main__.py in mod.

このように,__main__.pyファイルを指定することで,モジュールをスクリプトとして実行した際の挙動を定義することができます.

使い所

architecting.hateblo.jp

こちらの記事が参考になりました.
unittestなどのようなパッケージでは,unittestをライブラリとしても,CLIツールとしても使用することが可能です.
このときに,ライブラリとしての挙動とCLIツールとしての挙動を分離するような際に,__main__.pyを定義すると便利とのことでした.

参考