Python项目中无需绝对路径,可靠读取根目录config的方法
解决Python项目中跨子文件夹可靠导入根目录config的问题
方法1:动态计算项目根目录(最通用,适配脚本和Notebook)
通过代码自动定位包含config.py的项目根目录,无需硬编码相对层级,子文件夹调整后也无需修改代码。
脚本文件(如scripts/some_script.py)中的实现:
import os from pathlib import Path import sys # 从当前脚本所在位置向上遍历,找到包含config.py的根目录 current_file = Path(__file__).resolve() root_dir = current_file.parent while not (root_dir / "config.py").exists(): root_dir = root_dir.parent # 将根目录添加到Python路径 sys.path.append(str(root_dir)) # 直接导入config from config import DATA_PATH
Notebook(如notebooks/some_notebook.ipynb)中的实现:
Notebook中__file__不可用,改用当前工作目录向上遍历:
import os from pathlib import Path import sys # 从当前工作目录向上寻找根目录 root_dir = Path().resolve() while not (root_dir / "config.py").exists(): root_dir = root_dir.parent sys.path.append(str(root_dir)) from config import DATA_PATH
方法2:配置PYTHONPATH环境变量(最简洁)
将项目根目录添加到系统PYTHONPATH,Python会自动在该路径下查找模块,无需每次添加路径。
配置方式:
- Linux/macOS:终端运行(可加入
bashrc/zshrc永久生效)export PYTHONPATH="$PYTHONPATH:/absolute/path/to/project" - Windows:命令提示符运行(可加入系统环境变量永久生效)
set PYTHONPATH=%PYTHONPATH%;C:\absolute\path\to\project - IDE配置:在PyCharm/VSC等IDE中,将项目根目录设置为"Source Root",IDE会自动添加到
PYTHONPATH。
配置完成后,任何子文件夹中的脚本或Notebook都可直接导入:
from config import DATA_PATH
方法3:Python包相对导入(适合模块调用场景)
项目根目录已包含__init__.py,可视为Python包,使用相对导入语法。
脚本文件(如scripts/some_script.py)中的实现:
from ..config import DATA_PATH
⚠️ 注意:此方法要求脚本必须作为包的一部分执行,不能直接运行脚本文件。正确运行方式是在项目根目录外使用-m参数:
python -m project.scripts.some_script
该方式对Notebook支持较差,更适合纯脚本项目。
内容的提问来源于stack exchange,提问作者josh
相关产品推荐
相关产品推荐

