当前位置: 首页 > ds >正文

关于无法导入父路径的问题

问题重现

有下面的代码:

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)

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

http://www.xdnf.cn/news/20362.html

相关文章:

  • MySQL源码部署(rhel7)
  • SQL面试题及详细答案150道(61-80) --- 多表连接查询篇
  • java面试中经常会问到的集合问题有哪些(基础版)
  • GigaDevice(兆易创新)GD25Q64CSJGR 64Mbit FLASH
  • c#动态树形表达式详解
  • uni-app 和 uni-app x 的区别
  • 【Cell Systems】SpotGF空间转录组去噪算法文献分享
  • 图像去雾:从暗通道先验到可学习融合——一份可跑的 PyTorch 教程
  • <video> 标签基础用法
  • MySQL-安装MySQL
  • UE4 Mac构建编译报错 no template named “is_void_v” in namespace “std”
  • 无需bootloader,BootROM -> Linux Kernel 启动模式
  • Java全栈开发工程师面试实录:从基础到实战的深度探讨
  • PyTorch图像数据转换为张量(Tensor)并进行归一化的标准操作
  • 管理中心理学问:动机与管理的关联
  • 什么是CRM?定义、作用、功能、选型|CRM百科
  • 使用若依加Trae快速搭建一对儿多对多CRUD
  • 移植Qt4.8.7到ARM40-A5
  • PiscCode基于 Mediapipe 实现轨迹跟踪
  • TOGAF之架构标准规范-迁移计划
  • nginx 反向代理使用变量的坑
  • 亚马逊商品转化率怎么提高?从传统运营到智能广告的系统化突破
  • Nginx 配置片段主要用于实现​​正向代理​​,可以用来转发 HTTP 和 HTTPS 请求
  • LangChain关于提示词的几种写法
  • 深度学习:Dropout 技术
  • c++ 第三方库与个人封装库
  • 【完整源码+数据集+部署教程】西兰花实例分割系统源码和数据集:改进yolo11-AggregatedAtt
  • leetcode 6 Z字形变化
  • 基于YOLOv8的车辆轨迹识别与目标检测研究分析软件源代码+详细文档
  • 整理了几道前端面试题