关于无法导入父路径的问题
问题重现
有下面的代码:
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
这个解决方案通过以下方式解决问题:
-
确定项目根目录:
file 获取当前脚本的绝对路径 1
os.path.abspath() 确保路径是绝对路径
os.path.dirname() 两次获取父目录的父目录(项目根目录) 1->2->3
-
修改Python路径:
sys.path 是Python解释器查找模块的路径列表
sys.path.insert(0, project_root) 将项目根目录添加到路径列表的开头
这样Python会在项目根目录中查找模块,使绝对导入成为可能
-
效果:
解决了相对导入的限制
允许使用绝对导入(如from utils import Config, set_DATA_PATH)
无论脚本如何运行(直接运行或作为模块导入),都能正常工作