📘
Pythonライブラリ「PyProjroot」の紹介
PyProjrootとは
以下のようなシンプルなコードで、プロジェクトのルートディレクトリのパスを取得できます。
import pyprojroot
PROJECT_ROOT = pyprojroot.find_root(pyprojroot.has_dir(".git"))
もしくは、here
を使うことでプロジェクトルートからの相対パスを直接取得できます。
from pyprojroot.here import here
DATA_DIR = here("data.csv") # PROJECT_ROOT / "data.csv" と同じ
なにが嬉しいのか
pythonを使ってデータ分析をする際などに、相対パスの扱いが楽になります。
以下のようなシンプルなディレクトリ構造で説明します。
.
└── sample_project/
├── data/
│ ├── data1.csv
│ └── data2.csv
└── main.py
この場合はDataFrameは以下のように読み込むことになります。
DATA_DIR = Path("data")
data_frame = pd.read_csv(DATA_DIR / "data1.csv")
cd sample_project
python main.py
しかし、この書き方だとsample_project直下以外から実行した際に相対パスがずれて実行できなくなります。
cd sample_project/data
python ../main.py
FileNotFoundError: [Errno 2] No such file or directory: 'data/data1.csv'
他にも、ファイルが増えてきてsrcディレクトリにまとめたりし始めるとパスがずれます。
.
└── sample_project/
├── data/
│ ├── data1.csv
│ └── data2.csv
└── src/
├── data1.py
└── data2.py
ここで、PyProjrootを使用すると実行ディレクトリや実行ファイルの場所を気にすることなく、コードを記述できます。
import pyprojroot
import pandas as pd
PROJECT_ROOT = pyprojroot.find_root(pyprojroot.has_dir(".git"))
DATA_DIR = PROJECT_ROOT / "data"
data_frame = pd.read_csv( DATA_DIR / "data1.csv" ))
プロジェクトルートの基準
特定のファイルやディレクトリがある場所を探して、プロジェクトルートと見做しています。
2024/07/16現在では以下のファイル・ディレクトリをサポートしているようです。
ファイル
- .here
- requirements.txt
- setup.py
- pyproject.toml
- *.Rproj
ディレクトリ
- .git
- .dvc
- .spyproject
- .idea
- .vscode
まとめ
一番初めにデータの特徴をサクッと見ておきたい、といったシーンで最初に入れておくと非常に便利です。後先考えずにディレクトリを整理しても、ふとした時に別のディレクトリから呼び出しても、問題なく動作するのは想像以上に快適なのでぜひ導入してみてください!
Discussion