2012-05-20 16 views
28

Estoy tratando de usar importlib.import_module en python 2.7.2 y ejecutar en el extraño error.Cómo importar un módulo en Python con importlib.import_module

Considérese la siguiente estructura dir:

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

a/b/__init__.py tiene el siguiente código: (. En código real "c" tiene un nombre)

 
    import importlib 

    mod = importlib.import_module("c") 

Tratando de importar a.b se obtiene la siguiente error:

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

¿Qué me estoy perdiendo?

Gracias.

Respuesta

44

Para importaciones en relación con lo que tiene que a) usar nombre relativo b) proporcionar anclaje de forma explícita:

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

Por supuesto, también se puede simplemente hacer la importación absoluta en su lugar:

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

Creo que es es mejor usar importlib.import_module('.c', __name__) ya que no necesita saber acerca de a y b.

También me pregunto si, si tiene que usar importlib.import_module('a.b.c'), ¿por qué no usar import a.b.c?

+4

Es útil cuando el nombre del módulo es una variable. –

1

Y no se olvide de crear un __init__.py con cada carpeta/subcarpeta (incluso si están vacíos)

+0

¡Gracias! ¡Esto resolvió mi problema! – user

Cuestiones relacionadas