Aller au contenu

Numéros de version brûlés sur PyPI

Ce document recense les numéros de version qui ne peuvent plus jamais être publiés sur PyPI pour le paquet forge-mvc.
Il sert de garde-fou : avant tout bump de version et tout tag de release, vérifier que la version cible n'est pas dans la liste ci-dessous.

Pourquoi un numéro peut être « brûlé »

PyPI applique une règle stricte et irréversible : un numéro de version (et un nom de fichier) qui a déjà été utilisé ne peut jamais être réutilisé, même après suppression de la release.
Une tentative de réupload échoue avec une erreur du type « This filename has already been used ».

Yanker (remiser) une version ne libère pas le numéro non plus : la version reste occupée par son ancien contenu.
Que le numéro soit yanked ou supprimé, il est indisponible pour un nouveau contenu.

Liste des numéros interdits

Version Statut Origine Action requise
1.0.1 supprimée de PyPI (2026-06-09) prototype Forge 1.x d'avant le renumérotage vers la trajectoire publique 1.0 ne jamais bumper ni taguer
1.1.0 supprimée de PyPI (2026-06-09) prototype Forge 1.x d'avant le renumérotage vers la trajectoire publique 1.0 ne jamais bumper ni taguer

Ces deux versions avaient été publiées le 2026-05-01, puis remisées (yanked), puis supprimées définitivement le 2026-06-09 pour réparer la commande forge update (voir section suivante).

Conséquence pratique sur le versionnage

La trajectoire actuelle est 1.0.0bN (bêta publique), puis un jour 1.0.0 stable.
Après le 1.0.0 stable, les premiers correctifs et élargissements ne pourront pas s'appeler 1.0.1 ni 1.1.0.
Il faudra sauter ces numéros, par exemple :

  • au lieu de 1.0.1 : passer à 1.0.2 ;
  • au lieu de 1.1.0 : passer à 1.1.1 (ou un autre incrément mineur libre).

Contexte : pourquoi ces versions ont été supprimées

Tant que 1.0.1 et 1.1.0 (versions finales) existaient sur l'index, même remisées, elles cassaient forge update.
La commande lance pip install --upgrade forge-mvc sans --pre.
Or :

  1. pip constate qu'il existe des versions finales sur l'index, donc il exclut toutes les pré-releases, dont la dernière bêta ;
  2. puis il écarte 1.0.1 et 1.1.0 parce qu'elles sont yanked ;
  3. il ne reste alors rien de plus récent que la version installée, et l'utilisateur reste bloqué sur son ancienne bêta.

Leur suppression complète rétablit le repli automatique de pip sur les pré-releases : il n'y a plus aucune version finale sur l'index, donc forge update sans --pre récupère de nouveau la dernière bêta.

Vérification de l'état de l'index

Pour contrôler à tout moment qu'aucun numéro brûlé n'est réapparu sur PyPI :

curl -s -H "Cache-Control: no-cache" "https://pypi.org/pypi/forge-mvc/json" \
  | python3 -c "import sys,json; r=list(json.load(sys.stdin)['releases']); print('1.0.1 present ?', '1.0.1' in r); print('1.1.0 present ?', '1.1.0' in r)"

Les deux réponses doivent être False.