web-dev-qa-db-fra.com

Comment importer un module dans Python avec importlib.import_module

J'essaie d'utiliser importlib.import_module in Python 2.7.2 et rencontrez l'étrange erreur.

Considérez la structure dir suivante:

 a 
 | 
 + - __init __. py 
 - b 
 | 
 + - __init __. py 
 - c.py 

a/b/__init__.py a le code suivant:

 import importlib 
 
 mod = importlib.import_module ("c") 

(En vrai code "c"a un nom.)

Essayer import a.b, renvoie l'erreur suivante:

 >>> import ab 
 Traceback (dernier appel le plus récent): 
 Fichier "", ligne 1, dans 
 Fichier "a/b/__ init__.py ", ligne 3, dans 
 mod = importlib.import_module (" c ") 
 Fichier" /opt/Python-2.7.2/lib/python2.7/importlib/__init__.py ", ligne 37, dans import_module 
 __import __ (nom) 
 ImportError: aucun module nommé c 

Qu'est-ce que je rate?

Merci!

53
Zaar Hai

Pour les importations relatives, vous devez:

  • a) utiliser un nom relatif
  • b) fournir explicitement l'ancre

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

Bien sûr, vous pouvez également simplement importer à la place:

importlib.import_module('a.b.c')
66
Cat Plus Plus

Je pense qu'il vaut mieux utiliser importlib.import_module('.c', __name__) puisque vous n'avez pas besoin de connaître a et b.

Je me demande également que si vous devez utiliser importlib.import_module('a.b.c'), pourquoi ne pas simplement utiliser import a.b.c?

19
Gerald

Et n'oubliez pas de créer un __init__.py avec chaque dossier/sous-dossier (même s'ils sont vides)

9
H.Sechier