97

我正在尝试importlib.import_module在 Python 2.7.2 中使用并遇到奇怪的错误。

考虑以下目录结构:

    一种
    |
    + - __init__.py
      - b
        |
        + - __init__.py
          -c.py

a/b/__init__.py有以下代码:

    导入导入库

    mod = importlib.import_module("c")

(在实际代码"c"中有一个名字。)

尝试import a.b,产生以下错误:

    >>> 导入 ab
    回溯(最近一次通话最后):
      文件“”,第 1 行,在
      文件“a/b/__init__.py”,第 3 行,在
        mod = importlib.import_module("c")
      import_module 中的文件“/opt/Python-2.7.2/lib/python2.7/importlib/__init__.py”,第 37 行
        __import__(名称)
    ImportError:没有名为 c 的模块

我错过了什么?

谢谢!

4

3 回答 3

119

对于相对进口,您必须:

  • a) 使用相对名称
  • b) 明确提供锚点

    importlib.import_module('.c', 'a.b')
    

当然,你也可以只做绝对导入:

importlib.import_module('a.b.c')
于 2012-05-20T16:17:07.467 回答
40

我认为最好使用importlib.import_module('.c', __name__),因为您不需要了解aand b

我也想知道,如果你必须使用importlib.import_module('a.b.c'),为什么不直接使用import a.b.c

于 2015-07-08T07:03:38.813 回答
22

并且不要忘记为__init__.py每个文件夹/子文件夹创建一个(即使它们是空的)

于 2017-06-21T09:52:51.717 回答