我正在尝试一个Python标准库模块,我们称之为foo.bar.baz
。当上级与当前目录中的模块匹配时,为什么导入虚线模块名称失败?
所以我写了开头
import foo.bar.baz
一个小脚本并将其保存为foo.py
。
当我执行脚本时,我得到一个ImportError。我花了一段时间(我还在学习Python),但我终于意识到问题在于我如何命名脚本。一旦我将foo.py
重命名为其他内容,问题就消失了。
所以我明白import foo
声明将寻找脚本foo.py
寻找标准库foo
之前,但它不是我清楚,它正在寻找时,我说:import foo.bar.baz
。 foo.py
是否有某种方式可以让该陈述的内容有意义?如果没有,为什么Python解释器没有继续寻找像foo/bar
这样的目录层次结构和相应的__init__.py
?.
+1这是一个很好的答案,并且有很好的动机来了解整个进口流程。当你说导入语句[询问foo]导入栏时,你是否松散地使用'ask'这个词,或者是否有一些被调用的方法? – brainjam 2010-10-02 18:24:34
我已经改变了措辞,因为我意识到这可能会被采取过于字面:)'__import__'函数会执行所有实际的导入操作,但它会先导入'foo',然后重新启动整个导入过程'foo.bar' - 这意味着(除其他外)它在'sys.modules ['foo.bar']'中查找并检查'sys.modules ['foo'] .__ path__'。 – 2010-10-02 18:47:12
糟糕。现在是时候删除我的答案,因为我错了。 :-) – Omnifarious 2010-10-02 19:18:49