Supposons que j'ai deux versions presque identiques d'un paquet python mymod, c'est-à-dire mymod0 et mymod1. Chacun de ces packages contient les fichiers init .py et foo.py et foo.py a une seule fonction printme(). Appeler mymod0.foo.printme() affichera "Je suis mymod0" et l'appel de mymod1.foo.printme() affichera "Je suis mymod1". Jusqu'ici tout va bien. Mais maintenant, je dois importer dynamiquement mymod0 ou mymod1. L'utilisateur entrée 0 ou 1 au script (comme variable "index"), et je peux créer packageName = "mymod" + str (index)Charger dynamiquement un paquet en python
J'ai essayé ceci:
module=importlib.import_module(module_name)
module.foo.printme()
Mais Je reçois cette erreur: AttributeError: l'objet 'module' n'a pas d'attribut 'foo'
Comment est-ce que je peux spécifier que le paquet devrait être appelé module pour que module.foo.printme() fonctionne?
MISE À JOUR: Il semble donc que la solution la plus simple consiste à utiliser la fonction exec(). De cette façon, je peux créer dynamiquement une instruction import comme ceci:
cmdname="from mymod%s import foo" % index
exec(cmdname)
Puis:
foo.printme()
Cela semble fonctionner.
Ok c'est proche, mais ce que je veux faire est de recréer dynamiquement cette importation: mymod0 d'importation comme mymod. Donc, ici mymob se réfère maintenant au paquet mymod0. Si je le fais de manière statique, alors je peux appeler mymod0.foo.printme() sans problème. Comment puis-je recréer ceci dynamiquement? – Marc
@Marc s'il vous plaît voir ma modification. note que je n'ai pas testé ce – miraculixx