FRFAM.COM >> Famille >> Technologie &Innovation >> Informatique

Créez des programmes CLI Python puissants et intuitifs avec Click : Guide complet

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.

Écrire des programmes CLI sans Click

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()
Créez des programmes CLI Python puissants et intuitifs avec Click : Guide complet

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 :

Créez des programmes CLI Python puissants et intuitifs avec Click : Guide complet

Cette comparaison montre les gains de temps et d'efforts. L'interface utilisateur reste identique, mais le code est plus robuste et maintenable.

Premiers pas avec Click pour Python

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 click

Écrivez votre premier programme Click

Dans un éditeur, importez Click :

import click

Cré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.py

Ajoutez 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.

Créez des programmes CLI Python puissants et intuitifs avec Click : Guide complet

Ajouter plus de commandes

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 !

Créez des programmes CLI Python puissants et intuitifs avec Click : Guide complet

Options avancées Click

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.

Créez des programmes CLI Python puissants et intuitifs avec Click : Guide complet

Click : La solution idéale pour les utilitaires Python

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 !


[]