【Python】__file__ってなに?意味や使い方をわかりやすく解説!

B!

Pythonでスクリプトのパスを扱う際に登場する特殊な変数が __file__ です。

この __file__ は、実行中のPythonスクリプトの「ファイルパス」を自動的に保持してくれる組み込み変数です。

この記事では __file__ の意味や使い方、活用シーン、注意点までをわかりやすく丁寧に解説します。

file とは?

__file__ は、実行されているPythonファイル自身の「パス」を文字列として格納している特殊変数です。

たとえば main.py というファイルが /home/user/project/main.py にあるとき、このファイル内で __file__ を出力すれば、そのままその絶対パス(または相対パス)が取得できます。

Pythonがそのスクリプトをどこから実行しているかを知るために、__file__ は非常に便利です。

基本的な使い方

まずは、__file__ の値をそのまま表示する基本的なコードを見てみましょう。

このコードを main.py に書いてターミナルで実行すると、次のように表示されます。

このように、実行中のスクリプトのパスが文字列で得られるため、

「このスクリプトと同じディレクトリにあるファイルを読み込みたい」

といった場面で活躍します。

具体例:実行中スクリプトのディレクトリを取得

__file__os.path.dirname() を組み合わせることで、スクリプトが存在するディレクトリを簡単に取得できます。

このコードでは:

設定ファイルやテンプレートファイルを同じ場所に置きたいときなどに便利です。

具体例:同じ場所にあるファイルを開く

__file__ を使えば、実行中のスクリプトと同じフォルダにあるファイルを確実に指定できます。

このようにすることで、カレントディレクトリの変更やOSの違いによらず、正確に目的のファイルへアクセスできます。

注意点

__file__ が使えない場面もある

__file__ はPythonスクリプトをファイルとして実行したときには利用できますが、以下のような状況では使えない場合があります。

  • 対話モード(REPL)
  • python -c でワンライナーを実行したとき
  • 一部のパッケージ化ツールでビルドされたとき(PyInstallerなど)

このような場面では __file__ が未定義だったり、期待した値を返さなかったりすることがあります。

そのため、使う前に __file__ の有無をチェックするなどの対策が必要な場合もあります。

相対パスで返される場合がある

__file__ の値は、必ずしも絶対パスとは限りません。

たとえば次のようにカレントディレクトリからの相対パスになることがあります。

これを確実に絶対パスに変換したい場合は、os.path.abspath() を使います。

まとめ

今回は __file__ の意味と使い方について詳しく紹介しました。

  • __file__ は実行中のスクリプトファイルのパスを表す特殊変数
  • スクリプトの場所を基準に、ファイルの読み書きが可能になる
  • os.path.dirname(__file__) と組み合わせることでディレクトリを取得できる
  • 対話モードなど一部の環境では使えないこともあるので注意
  • 絶対パスに変換するには os.path.abspath(__file__) を使う

ファイルパスを安全に扱いたい場面では __file__ を使うことで、環境に依存しない柔軟なコードが書けるようになります。

ぜひマスターしておきましょう!

最新の記事はこちらから