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

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

宓弘壮
2023-03-14
问题内容

想象一下这个目录结构:

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

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

我尝试过,from ..sub2 import mod2但是得到了“未打包的相对导入尝试”。

我四处搜寻,但只发现"sys.path manipulation"骇客。有没有一种干净的方法?


问题答案:

每个人似乎都想告诉你应该做什么,而不仅仅是回答问题。

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

从PEP 328:

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

在Python 2.6中,他们添加了相对于主模块引用模块的功能。 PEP 366描述了更改。

更新:根据Nick Coghlan的建议,推荐的替代方法是使用-m开关运行软件包中的模块。



 类似资料:
  • 问题内容: 想要导入 这只是一个示例,但实际上我只想在父目录中进行模块的相对导入。我已经尝试了各种方法并得到此错误… 我在某处读到该程序开始处的脚本不应该放在程序包中,并且我尝试像这样修改结构… 但有同样的错误。 我该怎么做?这是否足够? 编辑:在Python 2 问题答案: 稍微摆弄一下之后,我意识到了如何设置它,并且出于特定性考虑,我将不使用foo bar名称。我的项目目录设置为… 一条线看起

  • 问题内容: 在Ruby中,我没有重复很多次“ require”(在Python中为“ import”)一词,而是 因此,它将遍历每个“ lib”和“ require”(导入)的集合。现在,我正在编写Python脚本,我想做类似的事情。是否有办法为所有这些人写“导入”。 简单的“引导”将类似于以下代码。无论如何,由于Python不会导入命名为字符串的库,因此它不起作用。 提前致谢 问题答案: 对于已

  • 我有一些问题在python导入。我不太明白为什么会有错误。 我使用jupyter笔记本从目录笔记本。我需要导入函数位于 对于导入,我尝试使用 正如这里https://docs.python.org/3/reference/import.html(第5.7段)和python显示我一个错误试图相对导入超过顶级包。 包

  • 问题内容: 假设我有以下文件, 现在,如果我跑步,它说。 这是有道理的,并且按照此链接中的以下语句运行: “它将首先在包的目录中查找” 假设我稍微修改了文件结构(添加了一个核心目录): 现在,如果我运行,它将加载内置模块。 同样在第二种情况下,如果必须遵守“ 它将首先在软件包的目录中查找 ” 这样 的语句 ,是否 应该加载本地文件,因为它是“软件包的目录”? 我的术语“包目录”的意义是 明确 的

  • 问题内容: 大家好-我正在用Python中的相关知识来表达自己的观点。我已经阅读了30篇文档,并在SO和其他论坛上阅读了很多帖子-似乎还是行不通。 我的目录结构目前看起来像这样 我希望expander.py和language_id.py可以访问功能模块。我运行python main.py,可以从components.expander import 和components.language_id i

  • 如何在Python中从低级目录导入类? 我一直在阅读如何将添加到文件夹中(或者这只是在Python2中吗?)或者如何使用,但是这些都不起作用。 通过下面的代码,我得到了:valueerror:尝试相对导入超出顶级包 文件2.py 谢谢你。