首先,如果这个问题已经在其他地方被问到了,我很抱歉。我真的找了很久,但什么也没找到。
情况如下:在文件夹mod中,我有文件__init__.py和sub.py。它们包含以下数据:__init__.py
print "mod"sub.py
import __init__
print "sub"现在让我们执行以下操作:
>>> import mod
mod
>>> import mod.sub
mod
sub但是在执行import mod.sub时,为什么要再次执行mod/__init__.py呢?它已经被导入。同样奇怪的特性也存在,如果我们只调用:
>>> import mod.sub
mod
mod
sub我可以通过更改import __init__来更改行为吗?在我看来,这条线最有可能是错的。
发布于 2011-09-22 01:28:37
你应该替换掉
import __init__通过
import mod发布于 2011-09-22 01:44:15
实际上,您可以使用字典sys.modules检查正在发生的事情。Python根据字典中的键决定重新加载模块。
当您运行import mod时,它会在sys.modules中创建一个条目mod。
当您运行import mod.sub时,在调用import __init__之后,Python会检查密钥mod.__init__是否在sys.modules中,但是没有这样的密钥,所以会重新导入它。
归根结底,Python决定通过sys.modules中的键重新导入模块,而不是因为实际的模块已经导入。
发布于 2011-09-22 02:20:42
为了完整性,我找到了另一个使用相对导入的解决方案:
替换
import __init__通过
from . import __init__但我不明白为什么这是可行的。
编辑:这实际上不起作用。生成的__init__不是模块mod,而是method-wrapper类型的其他内容。现在我完全糊涂了。
https://stackoverflow.com/questions/7503748
复制相似问题