深入解析:关于无法导入父路径的问题

问题重现

有下面的代码:

from ..utils import Config,set_DATA_PATH
DATA_PATH = set_DATA_PATH()

报错如下:

from ..utils import Config,set_DATA_PATH
ImportError: attempted relative import beyond top-level package

解决方案

#获取当前脚本所在目录的父目录(项目根目录)
import sys
import os
project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
if project_root not in sys.path:
sys.path.insert(0, project_root)
from utils import Config, set_DATA_PATH

文件结构:

project 3
- utils
- directory 2
- file(被运行的文件) 1

这个解决方案通过以下方式解决问题:

  1. 确定项目根目录:

    file 获取当前脚本的绝对路径 1

    os.path.abspath() 确保路径是绝对路径

    os.path.dirname() 两次获取父目录的父目录(项目根目录) 1->2->3

  2. 修改Python路径:

    sys.path 是Python解释器查找模块的路径列表

    sys.path.insert(0, project_root) 将项目根目录添加到路径列表的开头

    这样Python会在项目根目录中查找模块,使绝对导入成为可能

  3. 效果:

    解决了相对导入的限制

    允许使用绝对导入(如from utils import Config, set_DATA_PATH)

    无论脚本如何运行(直接运行或作为模块导入),都能正常工作

posted @ 2025-09-13 17:46  yjbjingcha  阅读(10)  评论(0)    收藏  举报