Click est une bibliothèque Python essentielle pour développer des interfaces en ligne de commande (CLI). Elle génère automatiquement une documentation claire et permet de créer des CLI en une seule ligne de code. En résumé : c'est simple, efficace et idéal pour booster vos scripts Python.
Découvrez comment l'utiliser pour enrichir vos projets.
Il est possible de coder une CLI sans Click, mais cela demande plus d'efforts : parsing des arguments, validation, gestion des options et création manuelle d'un menu d'aide. Ajouter une option ? Il faut modifier la fonction d'aide entière.
Rien de mal à coder soi-même – c'est excellent pour apprendre Python –, mais Click applique le principe DRY (Don't Repeat Yourself). Sans Click, votre code devient vite fragile et maintenance-intensive.
Voici un exemple basique sans Click :
import sys
import random
def do_work():
"""Fonction pour gérer les arguments en ligne de commande."""
args = sys.argv[1:] # Ignore le nom du script
if len(args) == 0:
print('Aucun argument passé !')
else:
for arg in args:
if arg == '--help':
print('Programme CLI basique')
print('Options :')
print(' --help Affiche cette aide.')
print(' --monty Affiche une citation Monty Python.')
print(' --veg Affiche un légume aléatoire.')
elif arg == '--monty':
print('"Qu'est-ce que c'est, alors ? Romanes eunt domus ?"')
elif arg == '--veg':
print(random.choice(['Carotte', 'Pomme de terre', 'Navet']))
else:
print('Argument inconnu.')
if __name__ == '__main__':
do_work()
Ces 27 lignes fonctionnent, mais sont fragiles. Toute modification (nom d'argument, aide) nécessite des mises à jour multiples. Le code peut vite devenir ingérable.
Maintenant, la même logique avec Click :
import click
import random
@click.command()
@click.option('--monty', is_flag=True, help='Afficher une citation Monty Python.')
@click.option('--veg', is_flag=True, help='Afficher un légume aléatoire.')
def do_work(monty, veg):
"""Exemple basique Click suivant vos commandes."""
if monty:
print('"Qu'est-ce que c'est, alors ? Romanes eunt domus ?"')
if veg:
print(random.choice(['Carotte', 'Pomme de terre', 'Navet']))
if __name__ == '__main__':
do_work()Cet exemple Click fait le même job en 16 lignes. Les arguments sont parsés automatiquement, et l'aide générée :

Cette comparaison montre les gains de temps et d'efforts. L'interface utilisateur reste identique, mais le code est plus robuste et maintenable.
Avant de commencer, créez un environnement virtuel pour isoler les dépendances. Vous pouvez aussi tester Python en ligne.
Utilisez Python 3 (Click supporte Python 2, mais nos exemples sont en 3). Installez Click via pip :
pip install clickDans un éditeur, importez Click :
import clickCréez une fonction principale :
import click
import random
def veg():
"""Renvoie un légume aléatoire."""
print(random.choice(['Carotte', 'Pomme de terre', 'Navet', 'Panais']))
if __name__ == '__main__':
veg()Sauvegardez en click_example.py et exécutez :
python click_example.pyAjoutez Click avec décorateurs :
import click
import random
@click.command()
@click.option('--total', default=3, help='Nombre de légumes à afficher.')
def veg(total):
"""Renvoie des légumes aléatoires."""
for _ in range(total):
print(random.choice(['Carotte', 'Pomme de terre', 'Navet', 'Panais']))
if __name__ == '__main__':
veg()Exécutez pour voir 3 légumes. Testez : python click_example.py --total 10.
@click.command() active Click sur la fonction suivante.
@click.option() gère les params : --total (nom), default=3 (valeur par défaut), help (description).
Aide auto : python click_example.py --help.

Empilez les décorateurs. Ajoutez --gravy :
@click.option('--gravy', is_flag=True, help='Ajouter "avec sauce" aux légumes.')Mettez à jour la fonction : def veg(total, gravy): et le code :
choix = random.choice(['Carotte', 'Pomme de terre', 'Navet', 'Panais'])
if gravy:
print(f'{choix} avec sauce')
else:
print(choix)Test : python click_example.py --gravy. Aide mise à jour !

Pour plusieurs valeurs : nargs=2, type=int. Nouveau fichier click_example_2.py :
import click
@click.command()
@click.option('--numbers', nargs=2, type=int, help='Additionner deux nombres.')
def add(numbers):
"""Additionne deux nombres."""
result = numbers[0] + numbers[1]
print(f'{numbers[0]} + {numbers[1]} = {result}')
if __name__ == '__main__':
add()Test : python click_example_2.py --numbers 1 2.

Click est simple et puissant. Explorez ses fonctionnalités avancées. Appliquez-le à des projets comme contrôler un Arduino ou interagir avec Google Sheets !