Exécuter des modules python
Pour exécuter un module python on peut utiliser l'option -m
de l'interpréteur python.
On l'a déjà fait à de multiples reprises en utilisant le module pip :
python -m pip
Le résultat de la commande précédente dans le terminal affichera l'aide de pip
.
Exécutez le module random
de python dans le terminal avec la commande : python -m random
.
Si vous exécutez le module python random
, vous verrez s'afficher tout un tas de choses sur l'écran :
$ python -m random
0.000 sec, 10000 times random()
avg 0.498948, stddev 0.285393, min 1.74181e-05, max 0.999923
0.003 sec, 10000 times normalvariate(0.0, 1.0)
avg -0.00160272, stddev 1.00174, min -3.42565, max 3.90493
0.003 sec, 10000 times lognormvariate(0.0, 1.0)
avg 1.64736, stddev 2.19193, min 0.0147119, max 65.9514
0.004 sec, 10000 times vonmisesvariate(0.0, 1.0)
avg 3.11325, stddev 2.28549, min 0.000433248, max 6.28223
0.009 sec, 10000 times binomialvariate(15, 0.6)
avg 8.9936, stddev 1.89413, min 2, max 15
[...]
Ces lignes montrent le temps mis pour générer des nombres aléatoires selon plusieurs lois de probabilités.
Cette technique est très utilisée pour permettre d'effectuer des commandes directement avec le terminal (comme pip
) ou pour montrer l'usage que l'on peut faire du module (comme random
)
Mais pourquoi ces lignes ne s'affichent-elles pas lorsque l'on importe le module random ?
Python distingue les deux types d'exécutions d'un programme via la variable spéciale __name__
:
- elle vaut la chaîne de caractères
"__main__"
si le fichier est exécuté directement - elle vaut le nom du fichier s'il est exécuté via un import
Créez un fichier nommé test_exécution.py
et copiez/collez y le code suivant :
print(__name__)
Exécutez le fichier précédant directement avec l'interpréteur puis via un import. Vous pourrez créez puis exécuter un fichier contenant uniquement la ligne de code import test_exécution
.
Cette différence dans le nom d'une variable permet de différentier les deux types d'exécution et est parfois utilisé pour séparer le programme principal d'un fichier du reste du code avec :
# code pouvant être importé
if __name__ == "__main__":
# code du programme principal