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

How to import a module in Python with importlib.import_module

我试图在python2.7.2中使用importlib.import_module,并遇到了奇怪的错误。

考虑以下dir结构:

1
2
3
4
5
6
7
    a
    |
    + - __init__.py
      - b
        |
        + - __init__.py
          - c.py

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

1
2
3
    import importlib

    mod = importlib.import_module("c")

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

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

1
2
3
4
5
6
7
8
    >>> 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

我错过了什么?

谢谢!


对于相对进口,您必须:

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

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

当然,您也可以直接执行绝对导入:

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

我认为最好使用importlib.import_module('.c', __name__),因为你不需要知道ab

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


别忘了用每个文件夹/子文件夹(即使它们是空的)创建一个__init__.py