2012-05-20 4 views
28

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

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

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

a/b/__init__.py имеет следующий код: (. В реальном коде "c" имеет имя)

 
    import importlib 

    mod = importlib.import_module("c") 

Попытка импортировать 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 

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

Спасибо.

ответ

44

Для относительного импорта вы должны а) использовать относительное имя б) обеспечивают якорь в явном виде:

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

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

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

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

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

+4

Это полезно, когда имя модуля является переменной. –

1

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

+0

Спасибо! Это решило мою проблему! – user

Смежные вопросы