如果放在模块中,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:父模块''未加载,无法执行相对导入[重复]
ImportError:无法从部分初始化的模块“dash”导入名称“dcc”-python
AWS Lambda python 错误:Runtime.ImportModuleError:无法导入模块“app”:无法从“pyparsing”导入名称“operatorPrecedence”