Pythonでは、モジュールの検索パスはsys.path
で定義されています。このパスは、スクリプトのあるディレクトリ(ファイルの指定がない場合はカレントディレクトリ)やPYTHONPATH
などを含んでいます。
特に、カレントディレクトリはsys.path
の先頭要素として重要な役割を果たします。カレントディレクトリは空文字列 ''
で表されます。
また、Pythonのバージョンによっては、__file__
変数がカレントディレクトリからの相対パスを保持していましたが、Python 3.9以降では絶対パスを保持しています。この__file__
変数は、そのコード自身のパスを保持しており、以下のように使われます。
# main.pyからの相対パスを絶対パスで管理
PATH = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'file.txt') # python3.8以前
PATH = os.path.join(os.path.dirname(__file__), 'file.txt') # python3.9以降
PATH = Path(__file__).parent // 'file.txt' # pathlibを使用した場合
しかし、Pythonファイルのexe化では、__file__
には注意しなければなりません。exe化したファイルの__file__
変数に格納されているのは何でしょうか。実は、存在しないファイルのパスや空文字列など、exe化の手法によってバラバラとなります。
以上の情報を踏まえて、Pythonのsys.path
とカレントディレクトリの扱いについて理解を深めることができます。これらの知識は、Pythonプログラムのパス管理において非常に重要です。