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

包的相对导入

包的相对导入(relative import),就是在一个包(package)里,让模块A引用模块B,不是用绝对路径(从顶层包开始写全路径),而是用“相对”位置(当前文件夹、父文件夹等)。

mypkg/mod_a.pysubpkg/__init__.pymod_b.py

想在 subpkg/mod_b.py 里导入 mod_a.py 的内容:

绝对导入

from mypkg import mod_a

有时需要在mod_b.py 添加项目的路径

import sys
sys.path.append(os.path.dirname(os.path.dirname(__file__)))# 或者
cur_dir = os.path.dirname(os.path.abspath(__file__))  # 当前脚本目录
parent_dir = os.path.dirname(cur_dir)  # 上级目录
sys.path.append(parent_dir)

相对导入

from .. import mod_a  # 两个点表示“父包”
  1. 必须是包(有__init__.py)
    相对导入只对“包”生效,普通脚本不能直接相对导入。

  2. 不能直接用 python xxx.py 启动子模块
    相对导入要求你用包的方式运行。否则会报错 ImportError: attempted relative import with no known parent package。

正确方式:在包的上级目录,使用:

python -m mypkg.subpkg.mod_b

这样 Python 能知道“父包”是谁。

  1. 相对路径只适用于同一个包下的模块之间的引用,不适用于跨包、跨项目的导入。
相对导入的常见写法
  • from . import xxx    # 当前目录(包)

  • from … import xxx   # 上一级包

  • from …other_pkg import xxx # 上一级包里的other_pkg

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

相关文章:

  • MPI-NCCL-TEST 训练自检,基础通信和可用的机器
  • 《Bishop PRML》10.1 (3) 理解VAE KL loss
  • 【贪心算法】day5
  • PPO、DPO和GRPO的区别
  • Python实现BP神经网络
  • 利用美团longcat.ai编写的C语言支持指定压缩算法通用ZIP压缩程序
  • 硬件工程师成长之路:从入门到精通的技术旅程
  • 科学研究系统性思维的方法体系:研究设计相关模版
  • go 开发环境配置 air + dlv debug 踩坑之旅
  • Linux shell 脚本基础 003
  • C6.7:输入电阻的负载效应及其CE负反馈放大器
  • android-studio 安装
  • Mysql中事务隔离级别有哪些?
  • Java实习:MySQL篇(黑马JavaWeb课程)
  • 简单的加密算法
  • PostgreSQL表膨胀的危害与解决方案
  • 人工神经网络(ANN)深度学习
  • 开源 C++ QT Widget 开发(九)图表--仪表盘
  • dayjs ​JavaScript 时间日期处理库
  • P2P技术应用:去中心化
  • Java全栈开发面试实战:从基础到微服务的全面解析
  • NAS Docker 安装N8N
  • 鸿蒙ArkTS 核心篇-18-@Builder 自定义构建函数
  • 上海交大具身导航中的感知智能、社会智能和运动智能全面综述
  • 数值分析——非线性方程与方程组的数值解法之二分法
  • APB协议​​ 构建一个完整的 ​​UVM验证VIP Agent介绍类的要素
  • 壁纸、logo、短视频去水印
  • 前端常见安全问题 + 防御方法 + 面试回答
  • Qt QML连接数据库如何解决重复创建连接问题
  • 大话 IOT 技术(3) -- MQTT篇