如何使用importlib.import_module在Python中导入模块

时间:2012-05-20 16:12:51

标签: python import module python-importlib

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

考虑以下目录结构:

    a
    |
    + - __init__.py
      - b
        |
        + - __init__.py
          - c.py

a/b/__init__.py包含以下代码:

    import importlib

    mod = importlib.import_module("c")

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

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

    >>> import a.b
    Traceback (most recent call last):
      File "", line 1, in 
      File "a/b/__init__.py", line 3, in 
        mod = importlib.import_module("c")
      File "/opt/Python-2.7.2/lib/python2.7/importlib/__init__.py", line 37, in   import_module
        __import__(name)
    ImportError: No module named c

我错过了什么?

谢谢!

3 个答案:

答案 0 :(得分:62)

对于相对进口,您必须:

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

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

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

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

答案 1 :(得分:18)

我认为使用importlib.import_module('.c', __name__)会更好,因为您不需要了解ab

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

答案 2 :(得分:8)

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