2012-05-20 1 views
28

Sto provando a usare importlib.import_module in python 2.7.2 ed eseguire lo strano errore.Come importare un modulo in Python con importlib.import_module

Si consideri la seguente struttura dir:

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

a/b/__init__.py ha il seguente codice: (. Nel codice reale "c" ha un nome)

 
    import importlib 

    mod = importlib.import_module("c") 

tentativo di importare a.b produce il errore seguente:

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

Cosa mi manca?

Grazie.

risposta

44

Per le importazioni relative bisogna a) utilizzare nome relativo b) fornire ancoraggio esplicitamente:

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

Naturalmente, si potrebbe anche solo fare importazione assoluto invece:

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

Penso che sia meglio usare importlib.import_module('.c', __name__) poiché non è necessario conoscere a e b.

Mi chiedo anche, se è necessario utilizzare importlib.import_module('a.b.c'), perché non usare solo import a.b.c?

+4

E 'utile quando il nome del modulo è una variabile. –

1

E non dimenticare di creare un __init__.py con ogni cartella/sottocartella (anche se sono vuote)

+0

Grazie! Questo ha risolto il mio problema! – user