2012-05-20 13 views
28

Próbuję użyć importlib.import_module w pythonie 2.7.2 i uruchomić dziwny błąd.Jak zaimportować moduł w Pythonie za pomocą importlib.import_module

Rozważmy następujący dir strukturę:

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

a/b/__init__.py ma następujący kod (. W kodzie, "c" ma nazwę)

 
    import importlib 

    mod = importlib.import_module("c") 

Bolesny import a.b otrzymuje się następujący błąd:

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

Czego mi brakuje?

Dzięki.

Odpowiedz

44

Dla importu względnych trzeba a) używać nazwy względnej b) zapewniają kotwicę wyraźnie:

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

Oczywiście, można też po prostu zrobić bezwzględną importu zamiast:

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

myślę, że to lepiej używać importlib.import_module('.c', __name__), ponieważ nie musisz wiedzieć o a i b.

Zastanawiam się również, że jeśli musisz używać importlib.import_module('a.b.c'), dlaczego nie po prostu użyć import a.b.c?

+4

Jest to przydatne, gdy nazwa modułu jest zmienna. –

1

I nie zapomnij, aby utworzyć __init__.py z każdego folderu/podfolderu (nawet jeśli są puste)

+0

Dzięki! To rozwiązało mój problem! – user

Powiązane problemy