Pour exécuter des scripts Python, on utilise généralement la commande suivante dans le terminal :
python mon_script.py
Cependant, l'interpréteur Python accepte plusieurs options facultatives qui permettent de contrôler son comportement. La syntaxe générale est :
python [-bBdEhiIOqsSuvVWx?] [-c commande | -m nom_module | script | - ] [arguments]
L'option -c
L'option -c exécute directement le code Python passé en paramètre. Le répertoire de travail courant est ajouté au début de sys.path, et sys.argv[0] vaut "-c".
python -c "import sys; print(sys.argv)"
Cette commande affichera le contenu de sys.argv, démontrant que sys.path inclut le répertoire d'exécution.
L'option -m
L'option -m permet d'exécuter un module ou un package comme un script. Le répertoire courant est également ajouté à sys.path, et sys.argv[0] contient le chemin complet du module exécuté.
Exécution d'un module
En spécifiant un nom de module (sans l'extension .py), Python le recherche dans sys.path et l'exécute en tant que module __main__. Cela équivaut à lancer le fichier directement, mais le module est chargé comme s'il était le point d'entrée principal.
Par exemple, pour un module calcul.py contenant :
if __name__ == "__main__":
print("Exécution principale")
La commande python -m calcul produira le même résultat que python calcul.py. L'utilisation du suffixe .py avec -m n'est pas recommandée, car cela peut générer des avertissements.
Exécution d'un package
Lorsque l'argument est un nom de package, Python exécute le fichier __main__.py à l'intérieur de ce package. Tous les modules du package, y compris __init__.py, peuvent être initialisés.
Considérons un package mon_package avec les fichiers __init__.py et __main__.py. La commande :
python -m mon_package
exécutera __main__.py comme script principal.
Utilisation avec des outils standards
De nombreux outils Python, comme pip ou pytest, peuvent être invoqués via -m. Cela garantit que l'interpréteur actuel est utilisé et que le répertoire courant est ajouté à sys.path.
python -m pip install mon_module
python -m pytest --verbose test_mod.py
Sans python -m, les commandes pip et pytest fonctionnent aussi, mais l'inclusion de sys.path peut différer.
L'option script
Cette option désigne le fichier script à exécuter. Il peut s'agir d'un fichier .py, d'un répertoire contenant un fichier __main__.py, ou d'une archive zip avec __main__.py. Le chemin peut être absolu ou relatif.
- Pour un fichier Python, son répertoire parent est ajouté à
sys.path. - Pour un répertoire ou une archive, le nom du script est ajouté à
sys.path.
Dans tous les cas, sys.argv[0] correspond au chemin spécifié dans la commande.
Les arguments (args)
Les arguments supplémentaires passés après le script sont accessibles via sys.argv. Le premier élément (sys.argv[0]) est le nom du script ou "-c"/"-m", et les éléments suivants sont les arguments fournis.
Par exemple, pour un script afficher.py :
import sys
for argument in sys.argv[1:]:
print(argument)
L'exécution python afficher.py bonjour monde affichera bonjour et monde sur deux lignes distinctes.
Ces options offrent une flexibilité pour adapter l'exécution de Python à différents scénarios, comme le lancement rapide de code ou la gestion de multiples versions de l'interpréteur.