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

Python跨目录导入自定义模块时相对路径配置文件无法读取问题

问题根因

代码里用./folder2/conf.ini这类相对路径读取文件时,Python的路径解析基准是进程当前的工作目录(CWD),和sys.path里配置的模块搜索路径、代码文件自身的存放位置没有关系。

  • 当Notebook和模块存放在同一目录时,Jupyter默认的工作目录就是模块根目录,相对路径刚好能匹配到配置文件位置,所以整套逻辑运行正常
  • 当Notebook存放在其他独立目录时,工作目录切到了Notebook所在的独立路径,哪怕你提前执行sys.path.append(path_to_dir)把模块根目录加进了模块搜索路径,读取文件时依然会从当前工作目录下查找folder2/conf.ini,自然找不到目标文件,最终触发配置读取失败的KeyError
修复方法

所有模块内部依赖的静态资源(配置文件、内置数据集等),都不要写死相对路径,要基于当前代码文件的存放位置动态拼接绝对路径,完全脱离运行时工作目录的影响。

基于os模块实现(兼容所有Python版本)

修改tech.py里读取配置文件的路径逻辑:

import os
# 获取tech.py自身的绝对路径
current_file_abspath = os.path.abspath(__file__)
# 定位到tech.py所属的folder1目录
folder1_dir = os.path.dirname(current_file_abspath)
# 定位到模块根目录dir
module_root_dir = os.path.dirname(folder1_dir)
# 拼接得到conf.ini的完整绝对路径
conf_abs_path = os.path.join(module_root_dir, "folder2", "conf.ini")

后续读取配置文件时,直接传入conf_abs_path作为路径参数即可。

基于pathlib实现(Python 3.4+推荐写法)

写法更简洁,可读性更强:

from pathlib import Path
# 获取tech.py的绝对路径对象
current_file = Path(__file__).resolve()
# 向上两级定位到模块根目录(tech.py -> folder1 -> 模块根目录)
module_root = current_file.parent.parent
conf_abs_path = module_root / "folder2" / "conf.ini"

注意:sys.path仅控制Pythonimport语句的模块搜索范围,对普通文件读写的路径解析没有任何影响,二者是完全独立的两套路径逻辑,不要混淆。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 04:36:21