1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

pythonで現在実行中ファイルのパスを取得

Last updated at Posted at 2023-03-09

前がき

pythonでファイルを扱うとき、一番強い且つ煩わしいものは、相対パスだと思います。相対パスを正しく使うには、「私は今、どこにいるの」ということを明確するのは重要です。

結論

pythonで、現在実行中ファイルのパスを取得には、__file__変数を参照します。__file__変数は、「どこで実行・誰から実行」を問わず、いつもファイル自身の絶対パスを返します。

この場合よく間違って使われるのは、pathlib.Path('.')です。「.」は「カレント・ディレクトリ」の意味で、その返り値はターミナルの作業デュレクトリによって変わります。

os.path系メソッドは僕はよくわかりませんが、時代遅れそうなので、pathlibを使った方がいいです。

使用例

ファイル構成

pathpath/
├── main.py
└── pkg.py
# pkg.py
from pathlib import Path

def hoge():
    print('Path(.):', Path('.').resolve())
    print('__file__:', __file__)

if __name__ == '__main__':
    hoge()
# main.py
import pkg

pkg.hoge()

動作確認

フォルダ内で実行

$ pwd
/Users/tdzz/code/pathpath

$ python3 pkg.py 
Path(.): /Users/tdzz/code/pathpath
__file__: /Users/tdzz/code/pathpath/pkg.py

$ python3 main.py 
Path(.): /Users/tdzz/code/pathpath
__file__: /Users/tdzz/code/pathpath/pkg.py

フォルダ外で実行

$ pwd
/Users/tdzz/code

$ python3 pathpath/pkg.py 
Path(.): /Users/tdzz/code
__file__: /Users/tdzz/code/pathpath/pkg.py

$ python3 pathpath/main.py 
Path(.): /Users/tdzz/code
__file__: /Users/tdzz/code/pathpath/pkg.py

先に言った通り、pkg.pyに置いた__file__変数は、フォルダ内でもフォルダ外でも、独自が実行されてもmain.pyから呼び出されても、自分の絶対パスを返すことが分かりました。

参照リンク

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?