You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Python中从子目录脚本获取主项目目录路径以访问配置文件?

解决Python脚本跨目录访问配置文件的问题

绝对路径在不同部署环境里确实特别麻烦,我之前做项目也踩过这个坑,给你两个实用的方案:

方法1:使用os模块(兼容所有Python版本)

核心思路就是通过__file__拿到当前脚本的路径,然后多次调用os.path.dirname()往上回溯到项目根目录。注意一定要用os.path.abspath()把相对路径转成绝对路径,避免环境差异导致的问题。

import os

# 1. 获取当前脚本的绝对路径
current_script = os.path.abspath(__file__)
# 2. 回溯到source目录(当前脚本的父目录)
source_dir = os.path.dirname(current_script)
# 3. 再回溯一级就是PythonProject主目录
project_root = os.path.dirname(source_dir)
# 4. 拼接配置文件路径
config_path = os.path.join(project_root, "configs", "config.json")

# 也可以简化成一行代码
config_path = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "configs", "config.json")

方法2:使用pathlib(Python3.4+ 推荐,更简洁)

pathlib是Python3.4引入的面向对象路径操作模块,语法更直观,代码可读性更高,还能自动适配不同系统的路径分隔符:

from pathlib import Path

# 1. 获取当前脚本的绝对路径对象(resolve()确保是绝对路径)
current_script = Path(__file__).resolve()
# 2. 连续两次调用parent,从script.py -> source -> PythonProject
project_root = current_script.parent.parent
# 3. 用/直接拼接路径,和系统无关
config_path = project_root / "configs" / "config.json"

# 如果需要字符串格式的路径,直接转成str即可
config_path_str = str(config_path)

小提示

如果以后你的目录结构可能调整(比如source目录下新增子文件夹),可以考虑更灵活的方式:从当前目录向上遍历,直到找到configs目录或者项目的标识文件(比如requirements.txtpyproject.toml),不过对于固定目录结构的项目,上面两种方法完全够用。

内容的提问来源于stack exchange,提问作者S Andrew

火山引擎 最新活动