如果放在模块中,Python 无法导入名称 [重复]

Posted

技术标签:

【中文标题】如果放在模块中,Python 无法导入名称 [重复]【英文标题】:Python cannot import name if placed in module [duplicate] 【发布时间】:2012-11-30 02:52:00 【问题描述】:

可能重复:How to do relative imports in Python?

我正在经历一些对我来说似乎很随机的事情。

我的文件夹结构很像这样:

dir A
    __init__.py is empty
    a.py imports stuff and b.py
dir B
    __init__.py is empty
    b.py imports NOTHING

a.py 引发错误(无法导入名称 b)。这只发生在 b 是模块 B 的一部分时。 如果我将它移到目录外,则不会发生导入错误。

任何帮助将不胜感激。我一定是忽略了什么。

【问题讨论】:

你能显示正在执行的实际代码吗? B 实际上被称为utils,我认为这是真正的问题。 utils 可能是一个 python dist 模块并且那些优先。我已将该模块重命名为util,这似乎解决了这个问题。奇怪的是,我在模块中有其他文件并且导入了这些文件没有问题。 这是我的问题,因为我弄乱了别人的代码.. 多么晦涩的问题 【参考方案1】:

你试过relative import

from ..B import b

?


编辑:如果包 B 所在的位置无关紧要,则这不适用。

但你没有描述你具体做什么。您可能知道与否,有几种导入形式:

import module
import package # imports package.__init__ under the name package
import package.module
from package import module
import package
from module import component
from package.module import component

正如你所写的

a.py 导入东西和 b.py

我不知道到底发生了什么:如果你尝试

import b

失败是因为b 存在于包B 中。所以你需要一个

from B import b
import B.b

您上面的评论提到了名称冲突。两个同名包和模块中的哪一个具有优先级取决于您所在的目录:'.' 通常位于sys.path 的开头,因此如果您直接位于utils 目录下,您可能会有不同的体验否则。

【讨论】:

我看不出反对票的意义...请解释一下。 已经有人建议我的问题是“相对导入”问题的重复。它现在作为副本关闭。但事实并非如此。因为我不是试图完成相对导入,而是绝对导入,所以我想知道为什么这不起作用。但是感谢您拍摄 ;-) @A.J.Rouvoet 但这听起来像是一个“相对”的问题,显然不仅对我而言。也许是问题中的措辞问题。 是的,我同意你的看法;我显然不够清楚。我按照规定取消了反对票。

以上是关于如果放在模块中,Python 无法导入名称 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Python SystemError:父模块''未加载,无法执行相对导入[重复]

python中模块包无法导入import问题

ImportError:无法从部分初始化的模块“dash”导入名称“dcc”-python

AWS Lambda python 错误:Runtime.ImportModuleError:无法导入模块“app”:无法从“pyparsing”导入名称“operatorPrecedence”

python基础之模块(time,datetime,os,random)

python学习笔记