Как импортировать модуль в Python с помощью importlib.import_module

Я пытаюсь использовать importlib.import_module в Python 2.7.2 и запускать странную ошибку.

Рассмотрим следующую структуру:

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

a/b/__init__.py имеет следующий код:

    import importlib

    mod = importlib.import_module("c")

(В реальном коде "c" имеет имя.)

Пытаясь import ab, появляется следующая ошибка:

    >>> 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

Что мне не хватает?

Спасибо!

Ответ 1

Для относительного импорта вам необходимо:

  • a) использовать относительное имя
  • б) обеспечить якорь явно

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

Конечно, вы могли бы просто сделать абсолютный импорт вместо этого:

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

Ответ 2

Я думаю, что лучше использовать importlib.import_module('.c', __name__), так как вам не нужно знать о a и b.

Мне также интересно, что если вам нужно использовать importlib.import_module('a.b.c'), почему бы просто не использовать import a.b.c?

Ответ 3

И не забудьте создать __init__.py с каждой папкой/подпапкой (даже если они пусты)