想象一下这个目录结构:
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 谢谢你。