__file__、if __name__ == ‘__main__’:

投稿者: | 2022-03-19

目次

__file__

  • .py ファイルにパスを直接書くと、フォルダの場所が変わってしまうと不便(実行できなくなる等)
  • pathib.Path(__file__)
    • コマンドラインから.pyファイルを実行したときに、そのフォルダPATHがわかる
  • ファイルが実行された場所のPATHため、pyファイル内にしか記述できない
  • そのため、JupyterやIpythonでは利用できない(はず)
print('hello,world!')

import pathlib

home = pathlib.Path().home()

running_file = pathlib.Path(__file__)

file_parent_dir = pathlib.Path(__file__).parent

absolute_path = pathlib.Path(__file__).parent.resolve()

print(home)
print(running_file)
print(file_parent_dir)
print(absolute_path)

モジュールで利用する場合

  • 上記のファイルをimportした場合、importした時点で printが走ってしまう(※)
  • なぜなら、ファイル内に直接処理が書かれているため

if __name__ == ‘__main__’:

  • よって、他からモジュールとしてimportする場合は関数で設定し、下部におまじないを書いておく

  • __name__
    • インポートしたモジュール「〜.py」の名前、または
    • コマンドラインから実行した「〜.py」の名前
  • ‘__main__’
    • コマンドラインからモジュールを実行すると
    • __name__ には ‘__main__’ という文字列が格納される

  • つまり、コマンドラインから実行された場合は、__main__が実行される(test.py)
  • 一方、importされた場合は、__main__ は実行されない(読み込まれるだけ、※が防げる)

def main():

  print('hello,world!')

  import pathlib

  home = pathlib.Path().home()

  running_file = pathlib.Path(__file__)

  file_parent_dir = pathlib.Path(__file__).parent

  absolute_path = pathlib.Path(__file__).parent.resolve()

  print(home)
  print(running_file)
  print(file_parent_dir)
  print(absolute_path)

if __name__ == '__main__':
  main()