2010-07-20 5 views
0

J'éprouve des difficultés avec le code suivant:Importation dynamique en Python (de statments pointillées)

def get_module(mod_path): 
    mod_list = mod_path.split('.') 
    mod = __import__(mod_list.pop(0)) 

    while mod_list: 
     mod = getattr(mod, mod_list.pop(0)) 

    return mod 

Quand je get_module('qmbpmn.common.db_parsers') je reçois le message d'erreur: AttributeError: 'module' object has no attribute 'db_parsers'. Cependant, import qmbpmn.common.db_parsers fonctionne parfaitement bien.

Répondre

3

Lorsque vous utilisez __import__ pour importer des sous-modules, vous devez passer le package parent comme argument fromlist:

1

__import__ fonctionne avec le chemin du module en pointillés, ce qui devrait travailler

def get_module(mod_path): 
    return __import__(mod_path) 

ou plus simplement

get_module = __import__ 

Peut-être que je suis malentendu le problème

l'importation d'un paquet ne importe pas automatiquement tous les sous-modules dans son espace de noms. Par exemple

import qmbpmn 

ne signifie pas que

qmbpmn.common.db_parsers 

automatiquement résoudre les

Questions connexes