Python -Import dynamique des modules python
13 avr. 2022
Nous avons pour habitude d'importer les modules en haut de page de notre code python
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
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
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
N'oubliez pas de préciser le nom de votre classe en paramètre de votre commande
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
Vous voyez que l'import des vos librairies en dynamique est largement abordable, voici l'exemple complet associé à la commande
blog comments powered by Disqus
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