如何在 Python 中进行相对导入?

2023-12-19

想象一下这个目录结构:

app/
   __init__.py
   sub1/
      __init__.py
      mod1.py
   sub2/
      __init__.py
      mod2.py

我正在编码mod1,我需要从中导入一些东西mod2。我该怎么做呢?

I tried from ..sub2 import mod2,但我收到“尝试在非包中进行相对导入”。

我用谷歌搜索了一下,但我只找到了“sys.path难道就没有一种干净的方法吗?


All my __init__.py目前是空的

我试图这样做是因为 sub2 包含在子包之间共享的类(sub1, subX, etc.).

我正在寻找的行为与中描述的相同PEP 366 http://www.python.org/dev/peps/pep-0366/ (谢谢约翰·B https://stackoverflow.com/questions/72852/how-to-do-relative-imports-in-python#comment8465_72852).


问题是您通过将 mod1.py 作为参数传递给解释器来将模块作为“__main__”运行。

From PEP 328 http://www.python.org/dev/peps/pep-0328/:

相对导入使用模块的 __name__ 属性来确定该模块在包层次结构中的位置。如果模块的名称不包含任何包信息(例如,将其设置为“__main__”),则将解析相对导入,就像该模块是顶级模块一样,无论该模块实际位于文件系统上的位置。

在 Python 2.6 中,他们添加了相对于主模块引用模块的功能。PEP 366 http://python.org/dev/peps/pep-0366/描述了变化。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Python 中进行相对导入? 的相关文章

随机推荐

  • bootstrap3中文本输入字段的宽度

    bootstrap3 是否具有增加文本输入字段宽度的本机功能 我知道在 bootstrap2 中我只是附加一个像 input lg 这样的类来修改输入的宽度 但是在 bootstrap3 中这似乎只是增加了高度 查看 列大小调整 小节her
  • 硬件定时器中断在哪里?

    这是异常和中断表 我理解为IDT 摘自 英特尔架构软件开发人员手册 使上下文切换成为可能的定时器中断在哪里 用于多任务处理 如果这是一个愚蠢的问题 请纠正我的理解 先感谢您 嗯 是的 如果我们谈论的是传统的 8254 PIT 定时器 它位于
  • 一对多关系 JPA/Hibernate 删除链接

    我的双向关系设置如下 class Child ManyToOne JoinTable name CHILDREN WITH PARENT joinColumns JoinColumn name CHILD ID inverseJoinCol
  • Asp.net Web API 2 和使用集成 Windows 和基于令牌的混合身份验证

    我有一个在 IIS 下运行的 asp net Web API 服务器 到目前为止 该服务器一直使用 Windows 身份验证 因为它只有在与其连接的同一域上运行的其他服务 所以 在我的 web config 中我有以下设置
  • 如何创建方法引用列表?

    我需要处理一个列表 并为每个项目调用目标对象上的不同方法 我可以创建一个方法引用列表来执行此操作 这看起来很优雅 因此对于列表中的每个索引 我可以调用与其相对应的适当方法引用 private final static List
  • Django 模型字段索引

    我只知道索引很有用 而且查询速度更快 下面两个有什么区别 1 class Meta indexes models Index fields last name first name models Index fields date of b
  • 架构迁移工具如何工作?

    我有基于数据库的应用程序 每当架构发生任何更改时 我都会删除架构和数据库内容 现在它处于开发模式 很快我们就在生产环境中发布了该应用程序 但我们怀疑在生产使用中发布该应用程序后可能会发生许多变化 该软件将安装在全球许多地方 不是基于网络的应
  • 向后台进程发送信号

    我应该向后台进程发送哪个信号以将其移至前台 SIGTTIN SIGTOU 还是 它不是直接控制作业是前台还是后台的信号 这些作业 通常 处于 shell 的控制之下 例如 在bash 如果执行 pax gt sleep 3600 pax g
  • Kubernetes Horizo​​ntal Pod Autoscaler 中的 Pod 副本缩减是如何工作的?

    我的理解是 在 Kubernetes 中 使用 Horizo ntal Pod Autoscaler 时 如果targetCPUUtilizationPercentage字段设置为 50 并且所有 Pod 副本的平均 CPU 利用率高于该值
  • UIAlertController 'UIAlertAction' 标签/用户数据或 Swift 中的任何内容

    在我的 iOS 操作表中 我显示了 JSON 字典中的名称 Name Doctor for Disease AAA Doctor id 21 Name Doctor for Disease BBB Doctor id 22 Name Doc
  • 即使 INSERT IGNORE 忽略插入也会锁定表吗?

    在 MySQL 中 如果我有一个 INSERT IGNORE 命令 由于唯一性约束 该命令最终不会插入到表中 它是否询问并等待写锁 或者MySQL是否识别IGNORE关键字 并在写锁之前使用读锁 并且只有当它确实需要写时才请求写锁 这取决于
  • 在jquery中将文本框设置为只读并将背景颜色设置为灰色

    再会 我想在我的中创建一个文本框jsp成为readonly其背景颜色为灰色disable在 Jquery 中 以下是我的代码 if a billAccountNumber attr readonly true 我不喜欢使用attr disa
  • 服务在 SQL Server 配置管理器中不可见

    我已经安装了 SQL Server 2008 Management Studio Express 32 位 我已成功安装它 但当我尝试连接 SQL Server 时出现错误 然后我想从 SQL Server 配置管理器打开服务 但我看不到任
  • 将函数传递给子例程时,虚拟过程“f”中的接口不匹配

    我正在尝试编写一个具有两个参数的子例程 用于最小化 数组x任意长度 一个函数f接受该长度的数组并返回一个标量 示例模块 module foo contains subroutine solve x f real dimension inte
  • 如何通过 iPhone 上的网页检查应用程序是否已安装

    我想创建一个网页 一个将 iPhone 重定向到应用商店 https en wikipedia org wiki App Store 28iOS 29如果 iPhone 没有安装该应用程序 但如果 iPhone 安装了该应用程序 我希望它打
  • 在面板内的控件顶部绘图 (C# WinForms)

    我知道这个问题已经被问过多次 但到目前为止我还没有找到一个好的解决方案 我有一个带有其他控件的面板 我想在它上面以及面板中所有控件的顶部画一条线 我遇到了 3 种解决方案 它们都没有按照我想要的方式工作 获取桌面 DC 并在屏幕上绘制 如果
  • chm hhk 中的关键字标签

    我目前正在检查 CHM 的二进制索引构建 但我注意到示例项目中的一些 hhk 例如生成的 Sphinx 有一个 关键字 标签 该标签似乎没有记录在chmspec http www nongnu org chmspec latest Site
  • 有没有办法通过反射获取类型的别名?

    我正在编写一个简单的代码生成应用程序来从 DB2 数据库模式构建 POCO 我知道这并不重要 但我更喜欢使用类型别名而不是实际的系统类型名称 如果可用 即 int 而不是 Int32 有没有一种方法可以使用反射来获取类型的别名而不是实际类型
  • 在 VS 中以编程方式打开解决方案时,如何才能将文件添加到最近项目的 MRU 列表中?

    当使用以下方式在加载项 扩展 在我的例子中为 VS2012 中以编程方式打开解决方案时解决方案 打开 http msdn microsoft com en us library vstudio envdte solution open as
  • 如何在 Python 中进行相对导入?

    想象一下这个目录结构 app init py sub1 init py mod1 py sub2 init py mod2 py 我正在编码mod1 我需要从中导入一些东西mod2 我该怎么做呢 I tried from sub2 impo