Intermédiaire·2 min·14 juillet 2026

uvx + GitHub Actions : cache les outils Python sans relancer PyPI

🎧 Résumé audio0:00 / 0:00
Arrête de télécharger tes outils Python à chaque workflow : utilise une variable d'env et le cache.
uvx + GitHub Actions : cache les outils Python sans relancer PyPI

Pourquoi ça compte pour toi

Si tu utilises GitHub Actions pour exécuter des outils Python rapidement (linting, formatting, scripts), tu sais qu'à chaque exécution tu re-télécharges tout depuis PyPI. C'est lent, ça coûte de la bande passante, et c'est inutile. Une astuce simple te permet de mettre en cache les dépendances et de les réutiliser.

Ce qu'il faut retenir

  • 1.Ajoute UV_EXCLUDE_NEWER=YYYY-MM-DD en variable d'env pour figer les versions au-delà d'une date
  • 2.Intègre cette date dans la clé de cache GitHub Actions pour maîtriser les mises à jour
  • 3.Les outils uvx se téléchargent une fois, puis sont servis depuis le cache : gain de temps et de bande passante
  • 4.Tu peux forcer une mise à jour en changeant la date dans l'env

Tu galères avec le jargon ?

Lis la version réécrite en mode débutant — toutes les idées, sans le jargon.

Le problème : PyPI à chaque workflow

Quand tu utilises uvx outil-python dans une action GitHub, le workflow doit télécharger l'outil et ses dépendances depuis PyPI à chaque exécution. C'est inefficace : 30 secondes de téléchargement pour un outil qui ne change pas d'une semaine.

La solution : geler les versions avec une date

La recette est minimaliste :

  1. Définis une variable d'environnement au début du workflow :

    env:
      UV_EXCLUDE_NEWER: "2026-07-12"
    

    Cela dit à uv : « résous les versions comme si on était au 12 juillet, n'utilise rien de plus récent ».

  2. Ajoute cette date dans ta clé de cache GitHub Actions :

    - uses: actions/cache@v3
      with:
        key: uvx-${{ env.UV_EXCLUDE_NEWER }}
    

Comment ça marche

Le premier run télécharge l'outil et le stocke. Les runs suivants trouvent la clé de cache identique et réutilisent ce qui est sauvegardé — aucune requête vers PyPI.

Quand tu veux mettre à jour tes outils, tu changes la date : UV_EXCLUDE_NEWER: "2026-07-20". GitHub détecte une nouvelle clé, télécharge les versions publiées après le 20 juillet, et met à jour le cache.

Pourquoi c'est élégant

Tu contrôles précisément quand tes outils se mettent à jour. Plus de « je me suis réveillé et ma build casse parce qu'une dépendance s'est mise à jour ». Et tu gagnes en vitesse : tes workflows respirent.

Et concrètement pour toi ?

Choisis ton profil — la lecture de l'article change selon qui tu es.

🔭 Curieux

Pour toi, c'est un exemple concret de comment la technique évite du gaspillage : au lieu de retélécharger les mêmes outils à chaque fois, on les garde en mémoire. C'est du bon sens appliqué à l'informatique.

Newsletters Noésis

3 minutes d'IA dans ta boîte mail, chaque matin.

Rejoins les francophones qui comprennent, essaient et progressent avec l'IA. Choisis ce que tu veux recevoir. Désabonnement en 1 clic.

Explorer les thèmes de cet article :