首页 文章

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

提问于
浏览
38

我试图在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 回答

  • 16

    对于相对进口,您必须:

    • a)使用相对名称

    • b)明确提供锚

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

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

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

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

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

  • 51

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

相关问题