Outils de développement

test de version PEP 440Comprendre les versions candidates de Python

Une version par ligne : normalisation, tri ou vérification de conditions séparées par des virgules.

test de version PEP 440

Versions (une par ligne)

Rapport

Saisissez des données ou chargez un exemple.

Les données sont traitées dans ce navigateur et ne sont pas envoyées à un serveur.

Options

Les virgules signifient ET. Une contrainte vide n’impose aucune borne. Opérateurs : ~= == != <= >= < > === ; .* uniquement avec les préfixes == ou !=.

1 000 lignes non vides au maximum ; 256 unités UTF-16 par ligne, 2 048 par contrainte, 100 000 au total. La saisie reste inchangée.

Vérification des candidats…

Ce test de version PEP 440 aide à comprendre pourquoi une publication apparemment plus récente ne satisfait pas une dépendance. Une écriture valide, un rang supérieur et une correspondance avec les conditions ne signifient pas la même chose.

Pour comparer les versions Python, 1.0 et 1.0.0 ont le même rang. Pourtant, leur forme normalisée conserve le nombre de composantes. Les segments epoch, dev, post et local exigent des règles que le tri alphabétique ne fournit pas.

Pourquoi utiliser ce test de version PEP 440 ?

Conserver la trace de la normalisation

Le test de version PEP 440 affiche v01.1 à côté de sa forme normalisée 1.1. Dépliez une ligne pour voir ses segments sans remplacer la liste source. Une différence de casse ou de séparateur reste ainsi identifiable.

Des graphies différentes traversent une étape de normalisation et deviennent des cartes segmentées, tandis que les originaux restent visibles.

Expliquer une préversion écartée

La politique automatique commence par les candidats satisfaisant toutes les conditions. Si une version non préliminaire convient, elle est prioritaire. Sinon, les préversions admissibles peuvent être retenues. Ajouter une version stable peut donc modifier le résultat des autres lignes.

Deux filtres montrent des préversions mises de côté face à une version stable, puis admises lorsqu’aucune stable ne convient.

Trois points qui changent le résultat

01

Choisir la bonne question

Normaliser vérifie les écritures sans filtrage. Trier utilise le rang Python et conserve l’ordre initial des valeurs égales. Vérifier les conditions garde l’ordre de saisie et distingue une contrainte non satisfaite d’une exclusion liée aux préversions.

02

Essayer la liste entière

Retirez une version stable qui satisfait les conditions pour observer le recours aux préversions. Inclure ne change pas les bornes : 1.0rc1 reste inférieur à 1.0 et ne satisfait donc pas >=1.0.

03

Exporter seulement un rapport à jour

Le calcul automatique attend 350 ms. Désactivez-le pour utiliser le bouton ou Ctrl/Cmd+Entrée. Toute modification bloque immédiatement les anciens exports. Exemple et Effacer demandent un aperçu ; Annuler la modification restaure la saisie et le rapport précédents.

Écriture, ordre et admissibilité

Normaliser un identifiant de version

Les préfixes v, zéros initiaux, alias alpha ou preview et séparateurs locaux sont normalisés. Le nombre de composantes de publication est conservé : 1.0.0 reste affiché ainsi, même si son rang est identique à celui de 1.0.

Trier toutes les composantes pertinentes

L’epoch précède les nombres de publication, puis les règles ordonnent développement, alpha, bêta, rc, finale et post-publication. Les segments locaux numériques sont comparés comme des entiers. Les très grandes valeurs ne sont pas arrondies.

Combiner les contraintes

Les opérateurs ~=, ==, !=, <=, >=, <, > et === sont reconnus. Une virgule signifie ET. Les égalités et exclusions acceptent des préfixes comme 1.4.*. Le numéro de ligne physique est conservé même lorsque des lignes vides sont ignorées.

Garder les erreurs dans le résultat

Une version incorrecte reste signalée dans sa ligne ; une contrainte incorrecte empêche tout le calcul. Le tri place les lignes invalides à la fin. L’affichage progresse par 50 lignes, tandis que le JSON contient toujours toutes les lignes traitées et leurs erreurs.

Périmètre et limites réelles

Ce n’est pas un gestionnaire de paquets
Les noms de paquets, extras, marqueurs d’environnement, fichiers requirements, URL et fichiers de verrouillage ne sont pas interprétés. Aucun accès à PyPI, installation, résolution de dépendances, modification de projet ou incrément de version n’est effectué. Une correspondance ne prouve pas la compatibilité de l’API.
Pas de raccourcis issus d’autres formats
Le caret, le tilde seul, les groupes OU et les plages avec tiret sont refusés. Utilisez par exemple ~=1.4 pour une publication compatible. Une condition vide n’impose aucune borne, mais la politique de préversion reste active. Les segments vides entre virgules sont ignorés.
Les règles de local dépendent de l’opérateur
Une étiquette locale influence le tri. Une égalité publique ignore l’étiquette locale du candidat ; une égalité explicitement locale la compare. Les conditions ordonnées et compatibles ne peuvent pas inclure local : >=1.0+linux est invalide.
Une limite volontaire pour ===
Cet opérateur compare l’écriture normalisée du candidat sans équivalence par ajout de zéros. Les candidats doivent néanmoins être des versions PEP valides. legacy reste donc invalide même avec ===legacy ; le comportement historique d’un installateur n’est pas reproduit.
La politique automatique dépend de cette liste
Les versions dev sont des préversions. Une condition positive nommant une préversion peut les autoriser. Sinon, le recours dépend de l’existence d’une version non préliminaire satisfaisant toutes les conditions. Les paquets déjà installés ne sont pas pris en compte.
Des plafonds sans troncature silencieuse
Maximum : 1 000 lignes non vides, 256 unités UTF-16 par ligne, 2 048 par contrainte et 100 000 dans la liste. Ce sont les limites de cet outil. Les lignes vides sont ignorées, les doublons conservés et la normalisation ou le tri ne réécrit jamais la saisie.

Questions sur le test de version PEP 440

Que signifie ~= dans une dépendance Python ?

Il combine une borne inférieure et un préfixe de publication. ~=1.4 accepte les versions à partir de 1.4 dans la série 1.*, tandis que ~=1.4.0 reste dans 1.4.*. ~=1, avec une seule composante, est invalide. La sélection des préversions est traitée séparément.

Pourquoi une préversion passe-t-elle seule, mais pas dans une liste ?

Le filtrage automatique peut retenir les préversions lorsqu’aucune autre version admissible n’existe. Ajouter une finale ou une post-publication convenable modifie ce choix collectif. Inclure montre toutes les candidates respectant les bornes ; Exclure interdit aussi le recours automatique.

Quel est l’ordre entre version publique et locale ?

À partie publique identique, la version locale vient après : 1.0 < 1.0+abc. Les segments locaux numériques suivent les segments textuels. Les valeurs normalisées égales gardent leur ordre initial. Contrairement aux métadonnées de construction SemVer, local affecte donc le classement.

Puis-je mettre une étiquette locale dans une contrainte ?

Oui avec == ou !=, par exemple ==1.0+linux.1. Elle est refusée avec >= ou ~=. Une contrainte publique ==1.0 peut accepter 1.0+linux.1, car elle n’impose pas une construction locale particulière.

Comment comparer des numéros de version en Python ?

packaging.version.Version fournit l’ordre conforme à PEP. L’implémentation du navigateur est confrontée à packaging 26.0. Une comparaison de chaînes peut inverser 1.10 et 1.9, et un autre format ne reconnaît pas nécessairement epoch ou post.

Un joker .* peut-il suivre pre ou post ?

Non. ==1.0.* est un préfixe de publication valide, mais ==1.0rc1.* et ==1.0.post1.* sont invalides. Utilisez une égalité exacte ou des bornes ordinaires pour ces suffixes. Le joker ne dispense pas de la politique de préversion.

Un résultat inattendu ?

Vérifier les candidats réels

Revenez au test de version PEP 440 avec votre liste complète et sa contrainte. Examinez les lignes invalides et l’explication des préversions avant de conserver le rapport actuel et ses valeurs d’origine.