Pythonの実行スクリプト,importスクリプトのパス取得

スクリプト自身やメインスクリプトのパスを取得する方法.非常に基本的な内容だけど,メインスクリプト内,importされるスクリプト内で微妙に違うので注意が必要.

以下のtest1.pyとtest2.pyをデスクトップに作成してtest1.pyを実行.

  • test1.py(実行スクリプト)
import os, sys
print "in test1.py:", __name__, __file__, sys.argv[0]
print "     curdir:", os.getcwd()
import test2
  • test2.py(importされるスクリプト)
import os, sys
print "in test2.py:", __name__, __file__, sys.argv[0]
print "     curdir:", os.getcwd()

出力は以下の通り

in test1.py: __main__ test1.py test1.py
     curdir: C:\Users\%username%\Desktop
in test2.py: test2 C:\Users\%username%\Desktop\test2.py test1.py
     curdir: C:\Users\%username%\Desktop

それぞれの変数の中身は以下の通り.実行したスクリプト内に記述された場合を「実行スクリプト」,importされたスクリプト内に記述された場合を「importスクリプト」と書く.

__name__
実行スクリプト内では"__main__",importスクリプト内ではimportされたときの名前(パッケージ内のスクリプトとして呼び出された場合はドットが付いたりする)になる
__file__
実行スクリプト内ではスクリプト名,importスクリプトの場合はimportスクリプトの絶対パス※ファイルに変更を加えないまま2回目以降importされた場合は.pycになることに注意
sys.argv[0]
実行スクリプト内でもimportスクリプト内でも実行スクリプトのファイル名が格納されている
os.getcwd()
実行スクリプト内でもimportスクリプト内でも実行スクリプトがあるディレクトリ(カレントディレクトリ)が表示される.※カレントディレクトリはos.chdir()で変更される可能性もある