python プロジェクトの基準ディレクトリの参照


### 質問

python プロジェクトにおいて、基準のディレクトリを参照する設定・規約について、一般的なものはありますか？

### 背景

例えば Rails では、そのフレームワークに乗っかってコードを書く場合、 `Rails.root`
という変数が参照可能で、それはプロジェクトのルートディレクトリが参照できます。例えば、 `Rails.root / 'config' /
'foo_setting.yml'` とすると、「プロジェクトルート/config/foo_setting.yml」のパスに解決が可能です。

今、 python
のプロジェクトを開発していて、そこでコード中において「プロジェクトルート/conf/sqlalchemy.yml」ファイルの中身を参照したくなりました。毎回、そのパスを利用するコードにおいて、相対パスで指定してやれば参照は可能そうですが、しかし、コード中の相対パスは、コードベースが発展するに従い構造化され、その際に（コードファイル自体の移動により）変更を行う必要がありそうだ、と思っています。

なので、「プロジェクトルートからの相対パス」をアプリケーションのコード中で解決したいと思ったのですが、これは一般的 python
プロジェクトにおいてどのように実装されますか？



[code]

    project/
        main.py
    
[/code]

のような時にmain.py内で`import os`とした上で

[code]

    root = os.path.dirname(os.path.abspath(__file__))
    
[/code]

とすれば`root`内に`"path/to/project/main.py"`が格納されます。  
これは`os.path.abspath`が絶対パスを取得するもので、`__file__`がpythonの予約語で自分自身のファイルパスをさすためです。

今回はディレクトリ名が欲しいように見受けられるので

[code]

    root = os.path.dirname(os.path.abspath(__file__))
    
[/code]

として`"path/to/project/"`までを取得すると良いと思います。

