代码之家  ›  专栏  ›  技术社区  ›  brainjam

当上层和当前目录中的模块匹配时,导入虚线模块名失败?

  •  2
  • brainjam  · 技术社区  · 15 年前

    foo.bar.baz .

    所以我写了一个小剧本

    import foo.bar.baz
    

    foo.py .

    当我执行剧本时,我得到了一个强烈的恐惧。我花了一段时间(我仍在学习Python),但我终于意识到问题在于如何命名脚本。一旦我改名 到了别的地方,问题就解决了。

    import foo 语句将查找脚本 食品 在寻找标准库之前 foo ,但我不清楚我说的时候它在找什么 import foo.bar.baz 食品 foo/bar __init__.py 是吗?。

    1 回复  |  直到 15 年前
        1
  •  6
  •   Thomas Wouters    15 年前

    像这样的导入语句 import foo.bar.baz 首次进口 foo ,然后问它 bar ,然后问 foo.bar 对于 baz . 是否 一旦进口,将能够满足 酒吧 bar.baz 对进口不重要 import foo 进口酒吧酒吧 将找到相同的模块--就像导入 模块。

    作为一个单独的模块,而不是一个包,并且仍然能够满足像 进口酒吧酒吧 "foo.bar" "foo.bar.baz" sys.modules 这正是 os os.path :它为平台导入正确的“路径”模块( posixpath ntpath , os2path ,并将其分配给 path sys.modules["os.path"] = path ,所以这样的陈述 import os.path 作品。真的没有理由这么做-- 不需要导入也可以使用--但这是可能的。