La fonction suivante émule ce qui était l'instruction standard d'importation jusqu'à Python 1.4 (c'est-à-dire sans noms de modules hiérarchiques). (Cette implémentation ne fonctionnerait pas dans cette version, puisque find_module() a été étendue et que load_module() a été ajoutée en 1.4.)
import imp import sys
def __import__(nom, globaux=None, locaux=None, depuisliste=None):
# Raccourci : voit si le module a déjà été importé
try:
return sys.modules[name]
except KeyError:
pass
# Si l'un des appels suivants déclenche une exception,
# il y a un problème que nous ne savons pas gérer -- laissons l'appelant s'en charger
fp, chemin, description = imp.find_module(name)
try:
return imp.load_module(nom, fp, chemin, description)
finally:
# Puisque nous pouvons sortir via une exception, ferme fp explicitement.
if fp:
fp.close()
Un exemple plus complet qui implémente les noms de modules hiérarchiques
et inclut une focntion reload() se trouve
dans le module knee (qui ne sert que d'exemple -
ce n'est en aucune façon une interface standard).