Votre navigateur n'est pas à jour !

Merci de mettre à jour votre navigateur pour utiliser mon blog. Mettre à jour mon navigateur maintenant

×

Python -Import dynamique des modules python

Date de publication 13 avr. 2022
Nous avons pour habitude d'importer les modules en haut de page de notre code python
import pytest

Mais dans certains cas il peut être intéressant de ne charger que les modules nécessaires surtout quand ces modules sont différents pendant l’exécution du programme.

Nous allons pouvoir utiliser le dunder import pour faire l'équivalent ci-dessus
__import__('pytest')

Sachant que la chaîne de caractère pytest peut provenir d'une variable assignée différemment en fonction de la logique de votre code.

Nous allons pouvoir utiliser sinon le module standard importlib avec import_module


Nous allons considérer que le module file1 contient


Après avoir importé les modules, nous pouvons avoir besoin de créer une instance. Pour cela la fonction standard getattr() est ce qui nous permettra d'obtenir la référence de notre objet
klass = getattr(module, "User")

Il nous reste plus qu'à instancier notre classe


L'intérêt d'utiliser cette méthode est valable surtout si le nom de l'instance est dynamique. Nous allons ici considérer que User provient d'un paramètre de notre script. Pour le récupérer nous allons utiliser
sys.argv[1]

N'oubliez pas de préciser le nom de votre classe en paramètre de votre commande
python3 file.py User

Si vous voulez importer votre module de manière relative, il faut ajouter un paramètre package avec le nom du dossier pour que l'import fonctionne
module = importlib.import_module(".file1", package="other")


Vous voyez que l'import des vos librairies en dynamique est largement abordable, voici l'exemple complet associé à la commande
python3 file_complet.py User


blog comments powered by Disqus