橦言无忌

一个不想改变世界的程序媛

rootutils in Python

前沿

rootutils 是一个轻量级的 Python 库,用于轻松设置项目的根目录路径。它的主要作用是简化项目中根路径的管理,尤其适合那些目录结构复杂且需要频繁引用不同模块的项目。

rootutils 是一个简单但实用的工具,特别适合需要频繁操作项目路径的开发者或团队。

主要功能

  • 自动查找根目录:根据特定标识文件(如 .git 或 pyproject.toml),自动识别项目的根目录。
  • 修改系统路径:将项目根目录添加到 Python 的 sys.path 中,使得模块引用更加方便。
  • 集成现有工具:与 PyTorch Lightning 和 Hydra 等库无缝协作,便于组织项目结构。

安装

1
pip install rootutils

基本用法

设置根路径

1
2
3
4
5
import rootutils

# 自动查找项目根目录
root = rootutils.find_root(search_from=__file__, indicator=".git")
print(root) # 输出根目录路径

添加根目录到系统路径

1
2
3
4
import rootutils

# 查找根目录并添加到 sys.path
rootutils.setup_root(__file__, indicator=".git", pythonpath=True)

高级功能

自定义根目录标识

如果项目中没有 .git 或 pyproject.toml,可以指定其他文件或目录作为标识:

1
2
3
4
import rootutils

# 查找包含 "my_marker.txt" 的目录作为根目录
root = rootutils.find_root(search_from=__file__, indicator="my_marker.txt")

与 Hydra 配合

rootutils 可以帮助解决 Hydra 项目中的路径问题:

1
2
3
4
5
6
7
import rootutils

# 设置根路径,避免 Hydra 导致的路径问题
rootutils.setup_root(__file__, indicator=".git", pythonpath=True)

# 现在可以在根目录下运行配置
from hydra import compose, initialize

与 pytorch-lightning 配合

1
2
3
4
5
6
7
8
import rootutils
from pytorch_lightning import Trainer

# 设置根目录
rootutils.setup_root(__file__, pythonpath=True)

# 继续使用 Lightning 的功能
trainer = Trainer()

示例项目

假设一个项目结构如下:

1
2
3
4
5
6
7
8
9
10
11
my_project/
├── .git/
├── src/
│ ├── main.py
│ ├── utils/
│ │ └── helpers.py
│ └── configs/
│ └── config.yaml
├── tests/
│ └── test_main.py
└── requirements.txt

使用 rootutils 设置根目录

1
2
3
4
5
6
7
8
9
# 文件路径: src/main.py
import rootutils

# 设置根目录并将其添加到 sys.path
rootutils.setup_root(__file__, indicator=".git", pythonpath=True)

# 现在可以直接引用 src/utils/helpers.py
from utils.helpers import some_function
some_function()

优势

  • 提高模块引用的便利性:避免 .. 或绝对路径问题。
  • 简化跨模块开发:适合大型项目的模块化管理。
  • 适配多种开发环境:无论在 IDE 中还是在脚本中运行,都能保持一致的路径管理。
// 代码折叠