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

如何让Python代码不受启动目录影响,固定使用指定工作目录

Python跨启动目录访问资源解决方案

核心逻辑是不依赖运行时的当前工作目录,基于当前脚本文件的固定绝对路径推导所有资源路径,两种常用实现方案如下:

方案1:固定切换全局工作目录(适配现有硬编码路径)

适合已经写了很多基于项目根目录的相对路径,不想逐个修改的场景,只需要在入口脚本main.py最开头加入以下代码:

from pathlib import Path
import os

# 推导项目根目录:当前main.py所在目录是core,上级目录就是project_name根目录
PROJECT_ROOT = Path(__file__).absolute().parent.parent
# 强制切换当前工作目录到项目根目录
os.chdir(PROJECT_ROOT)

加入后无论从哪个目录启动脚本,程序的工作目录都会固定为project_name,后续访问资源直接写根目录下的相对路径即可:

  • 访问user.json:config/userconfig/user.json
  • 访问log.txt:log/log.txt

方案2:所有路径基于根目录变量拼接(更稳妥无副作用)

不想修改全局工作目录的场景,直接定义统一的根路径变量,所有资源路径都通过根路径拼接得到:

from pathlib import Path

# 全局唯一的项目根目录变量
PROJECT_ROOT = Path(__file__).absolute().parent.parent

# 提前定义所有资源的绝对路径,直接复用即可
USER_CONFIG_PATH = PROJECT_ROOT / "config" / "userconfig" / "user.json"
SYSTEM_CONFIG_PATH = PROJECT_ROOT / "config" / "systemconfig" / "system.json"
LOG_PATH = PROJECT_ROOT / "log" / "log.txt"

后续访问资源直接调用对应变量即可,完全不受启动目录影响。

兼容低版本Python的os.path实现

如果使用Python3.4以下版本,没有内置pathlib,可以用os.path模块实现相同逻辑:

import os

# 推导项目根目录
PROJECT_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# 拼接资源路径
USER_CONFIG_PATH = os.path.join(PROJECT_ROOT, "config", "userconfig", "user.json")

内容的提问来源于stack exchange,提问作者Saranraj K

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 03:42:04