2013-04-18 4 views
0

Je voudrais fournir aux utilisateurs un script python qui leur permettrait d'importer des modules, puis de les déposer dans l'interpréteur python avec les modules importés disponibles à ce niveau. J'ai un code que je pensais pourrait fonctionner, mais il ne semble pas:Importer des modules globalement

module_list = ['module_a','module_b'] 

# Import our common modules 
for module in module_list: 
try: 
    print "Importing: {0}".format(module) 
    exec("import {0}".format(module)) 
except: 
    print "FYI we failed importing {0}. It will not be available for you to use".format(module)    

Ainsi, lorsque le script est fait, il chutera au module python où l'utilisateur peut faire:

>>> module_a.run() 
+3

Avez-vous pensé à utiliser le shell IPython? C'est beaucoup plus confortable et il supporte l'intégration à coup sûr. – ThiefMaster

Répondre

0

contre la aviser de nombreux commentaires que j'ai lus en touchant __main__, je l'ai fait.

Voici donc le code qui a fini par travailler pour moi:

module_list = ['module_a','module_b'] 

# Import our modules 
for name in module_list: 
    try: 
     __import__(name) 
     if name in sys.modules: 
      setattr(__main__, name, sys.modules[name]) 
    except: 
     print "FYI we failed importing {0}. It will not be available for you to use".format(name) 
1

Vous pouvez utiliser code.InteractiveConsole() et transmettre un dictionnaire locals contenant le contexte local dans lequel la console sera exécutée. En stockant les modules, vous pouvez facilement les mettre à la disposition du shell interactif.

0

Je ne le fais, si je vous étais .. mais

import imp 

module_list = ['module_a','module_b'] 

for name in module_list: 
    try: 
     module_info = imp.find_module(name) 
     globals()[name] = imp.load_module(name, *module_info) 
    except: 
     "Import error: %s" %name 

Enregistrer fichier ci-dessus de code, par exemple imptest.py et le charger avec -i commutateur, comme

python -i imptest.py 
+0

Pas besoin de 'imp'. Utilisez simplement la fonction intégrée ['__import__'] (http://docs.python.org/2/library/functions.html#__import__). 'globals() [nom] = __import __ (nom)' – halex

+0

Le problème est qu'à l'invite python, le module importé n'est pas disponible de cette façon. – Plazgoth

Questions connexes