You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python脚本内获取源文件路径,如何不受os.chdir操作影响?

问题根源

os.path.abspath()会基于当前工作目录计算相对路径,若脚本以相对路径启动,__file__本身存储的就是相对路径,切换工作目录后重新计算路径就会出现偏差。

可用方案

方案1:初始化阶段提前缓存绝对路径(兼容所有Python版本,适配Python 3.8.10环境)

在脚本刚启动、还未执行任何os.chdir操作时,就把源文件的绝对路径、所在目录路径提前存入全局变量,后续所有场景直接调用该变量即可,不受工作目录切换影响:

import os

# 脚本启动第一时间缓存路径,后续不再重新计算
SCRIPT_ABS_PATH = os.path.abspath(__file__)
SCRIPT_PARENT_DIR = os.path.dirname(SCRIPT_ABS_PATH)

# 切换工作目录后仍然输出正确路径
os.chdir("..")
print(SCRIPT_PARENT_DIR)
print(SCRIPT_ABS_PATH)

方案2:使用pathlib缓存路径(Python 3.4及以上版本支持,写法更简洁)

from pathlib import Path
import os

# 提前解析为绝对路径并缓存
SCRIPT_PATH = Path(__file__).resolve()
SCRIPT_PARENT_DIR = SCRIPT_PATH.parent

os.chdir("..")
print(SCRIPT_PARENT_DIR)
print(SCRIPT_PATH)

补充说明

目前不存在无需缓存、每次动态计算还能保证路径正确的方法。因为__file__的取值是Python解释器启动时确定的:如果用相对路径启动脚本,__file__本身就是相对路径,每次计算绝对路径都会依赖当前工作目录,提前缓存是目前最通用的稳定解决方案。


内容的提问来源于stack exchange,提问作者reducing activity

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 08:36:03