当前位置: 首页 > 面试题库 >

从父文件夹子文件夹的相对导入模块

萧伟兆
2023-03-14
问题内容

给定这样的目录结构

/main/
/main/common/foo.py
/main/A/
/main/A/src/
/main/A/src/bar.py

我如何使用Python的 相对进口
到进口foobar?通过将其添加到路径中,可以得到一个可行的解决方案,但这很丑陋。有没有一种方法可以import在Python
2.7中简单地处理一个?

这是此问题的更复杂版本:

从父文件夹导入模块


问题答案:

正确的相对导入为:

from ...common import foo

但是,相对进口仅在一个包装中起作用。如果main是软件包,则可以在此处使用相对导入。如果main不是包,则不能。

因此,如果您在中运行脚本/main/执行类似的操作import A.src.bar,则该相对导入将失败,并显示“尝试了超出顶级包的相对导入”。这是因为相对导入正在尝试导入顶级包之外的内容A

但是,如果您在中运行脚本/并执行类似的操作import main.A.src.bar,则相对导入将成功,因为main它现在是软件包。在这种情况下,以下两个等效:

from ...common import foo
from main.common import foo

为了回答您的评论:的含义.不会根据运行脚本的位置而改变,而是取决于程序包的结构而改变。



 类似资料:
  • 问题内容: 我正在运行Python 2.5。 这是我的文件夹树: (我还在每个文件夹中,为便于阅读,在此省略) 如何nib从模块内部导入life模块?我希望无需修补就可以做到。 注意:正在运行的主模块在ptdraft文件夹中。 问题答案: 看来问题与该模块位于父目录或类似目录中无关。 你需要将包含的目录添加到PYTHONPATH 你说过与你合作,这可能意味着你已将自身(而非其父项)添加到PYTHO

  • 问题内容: 我想将子文件夹导入为模块。因此,每个子文件夹都包含一个。我的文件夹结构是这样的: 在我的主脚本中,我导入 在此工厂文件中,我包括以下子模块: 如果我调用我的foofactory会收到错误消息,则该python无法导入子模块foo1和foo2: 问题答案: 无需与您或此处混淆。 为了在包中正确使用绝对导入,您还应该包括“ root”包名,例如: 或者您可以使用相对导入:

  • 问题内容: 我有以下文件夹结构。 我想从位于另一个Python文件中的导入一些功能 我试过了 和其他一些尝试,但到目前为止,我无法正确导入。我怎样才能做到这一点? 问题答案: 默认情况下,你不能这样做。导入文件时,Python仅搜索当前目录,入口点脚本运行所在的目录,并且包括诸如软件包安装目录之类的位置(实际上比这稍微复杂一点,但这涵盖了大多数情况) 。 但是,你可以在运行时添加到Python路径

  • 同一位置有2个csv文件:1-candidates.csv,2-store.csv 当我在使用以下代码时导入candidates.csv filw时,它被导入: pandas._libs.parsers.textreader._convert_with_dtype()中的pandas_libs\parsers.pyx pandas._libs.parsers.textreader._string_

  • 我从我的IntelliJ Java 15 Gradle项目的resources文件夹中的子文件夹加载文件时遇到问题...

  • 我有一个像这样的文件夹 应用程序 供应商 引导程序 公开的 文件夹 img 当我从url访问时http://example.com/img/img.png它工作,但当我喜欢访问http://example.com/img/我得到禁止403,我需要的是重定向或显示该页面没有找到我的。htaccess看起来像这样。 选项-多视图选项-索引重写引擎打开