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

Python修改sys.path入口点后相对路径读取文件报错如何解决

错误原因

报错本质是相对路径解析规则和模块导入规则是完全独立的两套机制:

  • 修改的sys.path仅作用于Python模块导入的搜索逻辑,因此from app import func可以正常执行
  • 文件读取时的相对路径,是相对于**运行脚本时的当前工作目录(CWD,即执行命令所在的目录)**拼接的,和代码文件本身所在的存储位置无关

从web根目录启动测试时,当前工作目录是web/,open('sets.json', 'r')会尝试读取web/sets.json,但该文件实际存储在web/api/sets.json,因此触发文件不存在错误。

解决方案

方案1(推荐):在app.py中基于文件自身路径构造绝对路径

该方案完全不依赖运行脚本的工作目录,兼容性最优。修改app.py代码如下:

import os

def func():
    # 获取当前app.py文件所在目录的绝对路径
    app_dir = os.path.dirname(os.path.abspath(__file__))
    # 拼接得到sets.json的绝对路径
    sets_path = os.path.join(app_dir, 'sets.json')
    with open(sets_path, 'r') as file:
        ...

方案2:测试脚本中临时切换工作目录

适合不想修改app.py代码的场景,修改test.py代码如下:

import sys
import os

original_cwd = os.getcwd()
sys.path.append(os.path.join(original_cwd, 'api'))

from app import func

# 调用func前切换工作目录到api目录
os.chdir(os.path.join(original_cwd, 'api'))
func()
# 执行完成后可切回原工作目录,避免影响后续逻辑
os.chdir(original_cwd)

方案3(不推荐):修改文件读取路径为相对web根目录的路径

仅适合永远固定从web根目录运行程序的场景,修改app.py的open逻辑:

def func():
    with open('api/sets.json', 'r') as file:
        ...

内容的提问来源于stack exchange,提问作者Alex Poloz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 19:27:04