Processus de publication de Django¶
- Publication majeure¶
Feature releases contain new features, improvements to existing features, and other enhancements. Each version will be mostly backwards compatible with the previous release. Exceptions to this rule will be listed in the release notes.
- Publication corrective¶
A release containing bug fixes and/or security fixes, issued as needed.
These releases will be 100% compatible with the associated feature release, unless this is impossible for security reasons or to prevent data loss, in which case the release notes will provide detailed upgrade instructions. Generally, you should always upgrade to the latest patch release. Each patch release supersedes earlier patch releases in its series, which may contain known security vulnerabilities.
- Publication avec prise en charge à long terme¶
Under the
A.Bversioning scheme, certain feature releases are designated as long-term support (LTS) releases. These releases receive security and data loss fixes for three years.Starting with Django 2028, there are no separate LTS releases. All feature releases receive security and data loss fixes for three years: one year of mainstream support followed by two years of extended support. See the annual release cycle for more details.
See the download page for the
A.Breleases that have been designated for long-term support.
Publications officielles¶
Since version 1.0, and ending with Django 6.2, Django’s release numbering works as follows:
Les versions sont numérotées sous la forme
A.BouA.B.C.A.Bis the feature release version number.Cis the patch release version number.Avant une nouvelle publication majeure, des publications alpha, beta et d’évaluation sont diffusées. Elles sont numérotées sous la forme
A.B alpha/beta/rc N, ce qui signifie laNièmeversion alpha/beta/d’évaluation de la versionA.B.
Dans git, chaque version de Django possède un « tag » nommé selon son numéro de version, signé avec la clé de publication de Django. De plus, chaque série de versions possède sa propre branche, appelée stable/A.B.x, et les publications corrigeant des anomalies ou des failles de sécurité sont produites à partir de ces branches.
For more information about how the Django project issues new releases for security purposes, please see our security policies.
Django 6.2 is the last release using this numbering scheme and release cadence. Please see the annual release cycle for details on the new release process.
Rythme de publication¶
From Django 2.0, and ending with Django 6.2, version numbers use a loose form of semantic versioning such that each version following a long-term support release will bump to the next « dot zero » version. For example: 2.0, 2.1, 2.2 (LTS), 3.0, 3.1, 3.2 (LTS), etc.
SemVer makes it easier to see at a glance how compatible releases are with each
other. It also helps to anticipate when compatibility shims will be removed.
It’s not a pure form of SemVer as each feature release will continue to have a
few documented backwards incompatibilities where a deprecation path isn’t
possible or not worth the cost. Also, deprecations started in an LTS release
(X.2) will be dropped in a non-dot-zero release (Y.1) to accommodate
our policy of keeping deprecation shims for at least two feature releases. Read
on to the next section for an example.
Politique d’obsolescence¶
A feature release may deprecate certain features from previous releases. If a
feature is deprecated in feature release A.x, it will continue to work in
all A.x versions (for all versions of x) but raise warnings. Deprecated
features will be removed in the B.0 release, or B.1 for features
deprecated in the last A.x feature release to ensure deprecations are done
over at least 2 feature releases.
Par exemple, si nous décidons de rendre obsolète une fonction dans Django 4.2 :
Django 4.2 contiendra une copie rétrocompatible de la fonction, mais en déclenchant un avertissement
RemovedInDjango51Warning.Django 5.0 (la version qui suit 4.2) contiendra encore la copie rétrocompatible.
Django 5.1 supprimera totalement la fonction.
Les avertissements sont silencieux par défaut. Vous pouvez faire afficher ces avertissements avec l’option -Wd de Python.
Un exemple plus générique
X.0X.1X.2LTSY.0: Drop deprecation shims added inX.0andX.1.Y.1: Drop deprecation shims added inX.2.Y.2LTS: No deprecation shims dropped (whileY.0is no longer supported, third-party apps need to maintain compatibility back toX.2LTS to ease LTS to LTS upgrades).Z.0: Drop deprecation shims added inY.0andY.1.
Features deprecated in Django 6.0, 6.1, or 6.2 are removed following the same rules, with Django 2028 taking the place of 7.0 and Django 2029 taking the place of 7.1. Features deprecated in Django 2028 or later follow the annual release cycle deprecation policy.
Voir aussi le guide Obsolescence d’une fonctionnalité.
Versions prises en charge¶
À tout instant, l’équipe de développement de Django prend en charge un ensemble de versions à différents degrés. Consultez la section des versions prises en charge de la page de téléchargement pour connaître l’état actuel de prise en charge de chaque version.
La branche
mainde développement reçoit les nouvelles fonctionnalités et les corrections de bogues qui nécessitent des révisions de code non triviales.Patches applied to the
mainbranch must also be applied to the last feature release branch, to be released in the next patch release of that feature series, when they fix critical problems:Failles de sécurité.
Bogues provoquant des pertes de données.
Bogues provoquant des plantages.
Des bogues fonctionnels majeurs dans des nouvelles fonctionnalités de la dernière version stable.
Des régressions par rapport aux versions précédentes de Django introduites dans la série actuelle de publications.
La règle de base est que des corrections sont rétroportées vers la dernière version stable s’il s’agit de bogues qui auraient bloqué une publication normale (bloqueurs de publication).
Security fixes and data loss bugs will be applied to the current
mainbranch and all supported feature release branches.Les corrections de documentation seront généralement rétroportés plus facilement vers la branche de publication. Ceci parce qu’il est grandement avantageux d’avoir la documentation de la dernière publication à jour et correcte, et le risque d’introduire des régressions est beaucoup moins présent.
Comme exemple concret, considérez un moment dans le temps à mi-chemin entre les publications Django 5.1 et 5.2. À cet instant-là :
Features will be added to the development
mainbranch, to be released as Django 5.2.Les corrections de bogues critiques seront appliqués à la branche
stable/5.1.xet publiées en tant que 5.1.1, 5.1.2, etc.Security fixes and bug fixes for data loss issues will be applied to
mainand to thestable/5.1.x,stable/5.0.x, andstable/4.2.x(LTS) branches. They will trigger the release of 5.1.1, 5.0.5, 4.2.8, etc.Les corrections de documentation seront appliquées à la branche
main, et, si elles peuvent facilement être rétroportées, également à la dernière branche stable,5.1.x.
Processus de publication¶
Django uses a time-based release schedule. Up to Django 6.2, feature releases happen every eight months or so. From Django 2028, they happen once a year, as described in the annual release cycle.
After each feature release, the release manager will publish a timeline for the next feature release. The timeline for an upcoming feature release can be found in the corresponding roadmap page, e.g. https://www.djangoproject.com/download/6.0/roadmap.
Active development / Pre-feature freeze¶
Work begins on the feature release A.B after the feature freeze of the
previous release, i.e. when the stable/A.B-1.x branch is forked.
Vous pouvez trouver la version de développement actuellement active dans le processus de publication de Django sur Trac.
Feature freeze / Alpha release¶
All major and minor features, including deprecations and breaking changes, must be merged by the feature freeze. Any features not done by this point will be deferred to the next feature release.
À partir de ce point, la branche stable/A.B.x divergera de la branche principale main.
Non-release blocking bug fix freeze / Beta release¶
After the alpha, all bug fixes merged in main are also backported to
stable/A.B.x. Refactors are backported at the discretion of the merger.
Mergers will be more and more conservative with backports, to avoid introducing
regressions.
En parallèle à cette phase, main peut continuer de recevoir de nouvelles fonctionnalités en vue de leur publication dans le cycle A.B+1.
Gel des chaînes à traduire / version de prépublication¶
S’il y a toujours un flux conséquent de problèmes bloquants à la date prévue de prépublication, une seconde beta sera produite pour encourager davantage de tests et la date de prépublication sera reportée d’environ 1 mois.
La version de prépublication marque le gel des chaînes, et cela arrive au moins deux semaines avant la version finale. Les traducteurs peuvent alors soumettre les traductions mises à jour afin que celles-ci soient incluses dans la version finale. Après cette étape, aucune nouvelle chaîne à traduire ne doit être ajoutée.
Après la publication de la version candidate, seuls les bogues bloquants la publication et les corrections de documentation sont rétroportés.
Version finale¶
Idéalement, la version finale sera produite deux semaines après la publication de la dernière version candidate.
Si des bogues majeurs sont toujours présents 2 semaines après la publication de la version candidate, une décision devra être prise sur la manière de procéder (il est probable qu’une nouvelle version candidate soit produite et que la date de la version finale soit repoussée).
The annual release cycle¶
Publications officielles¶
Starting with Django 2028, Django’s release numbering works as follows:
Versions are numbered in the form
YYYYorYYYY.N.YYYYis the feature release version number, using the four-digit year of release, for example 2028.Nis the patch release version number, incremented with each patch release, for example 2028.1 and 2028.2.Before a new feature release, there are alpha, beta, and release candidate releases, for example 2028 alpha 1, 2028 beta 1, and 2028 rc 1.
In git, each Django release will have a tag indicating its version number,
signed with the Django release key. Additionally, each release series has its
own branch, called stable/YYYY.x, and bugfix/security releases will be
issued from those branches.
For more information about how the Django project issues new releases for security purposes, please see our security policies.
Rythme de publication¶
One feature release will be made each calendar year. Final releases are planned for approximately the second week of January and use that calendar year’s number. The exact release date is at the release manager’s discretion.
Politique d’obsolescence¶
If a feature is deprecated in feature release YYYY, it will continue to
work in the following feature release, YYYY+1, while raising warnings. The
feature will be removed in YYYY+2.
For example, if a feature is deprecated in Django 2028:
Django 2028 will contain the deprecated feature and raise a
RemovedInDjango2030Warning.Django 2029 will continue to contain the deprecated feature.
Django 2030 will remove the feature.
Deprecation warnings are silent by default. You can turn on display of these
warnings with the python -Wd option.
Voir aussi le guide Obsolescence d’une fonctionnalité.
Versions prises en charge¶
Each feature release series goes through two support phases:
Mainstream support lasts one year, until the next feature release. During this time, patches applied to
mainare also applied to the release branch when they fix critical problems: security issues, data loss bugs, crashing bugs, major functionality bugs in new features, and regressions introduced in the current release series.Extended support lasts another two years. During this time, only security fixes and data loss fixes are applied.
See the supported versions section of the download page for the current state of support for each version.
As a concrete example, consider a moment in time halfway between the release of Django 2029 and 2030. At this point in time:
Features will be added to the development
mainbranch, to be released as Django 2030 around mid-January 2030.Critical bug fixes will be applied to the
stable/2029.xbranch, and released roughly once a month as patch releases 2029.1, 2029.2, etc.Security fixes and bug fixes for data loss issues will be applied to
mainand to each stable branch still in support, in this case, thestable/2029.x,stable/2028.x, andstable/6.2.x(LTS) branches. They will trigger a patch release for each version e.g. 2029.1, 2028.5, and 6.2.8.Documentation fixes will be applied to
main, and, if easily backported, to the latest stable branch,stable/2029.x.
Processus de publication¶
Django uses a time-based release schedule, with feature releases every year in January.
After each feature release, the release manager will publish a timeline for the next feature release. The timeline for an upcoming feature release can be found in the corresponding roadmap page, e.g. https://www.djangoproject.com/download/2028/roadmap.
Active development / Pre-feature freeze¶
Work begins on the feature release YYYY after the feature freeze of the
previous release, i.e. when the stable/YYYY-1.x branch is forked. For
Django 2028, the previous release is Django 6.2, so that branch is
stable/6.2.x.
Vous pouvez trouver la version de développement actuellement active dans le processus de publication de Django sur Trac.
Feature freeze / Alpha release¶
All major and minor features, including deprecations and breaking changes, must be merged by the feature freeze. Any features not done by this point will be deferred to the next feature release.
At this point, the stable/YYYY.x branch will be forked from main.
Non-release blocking bug fix freeze / Beta release¶
After the alpha, all bug fixes merged in main are also backported to
stable/YYYY.x. Refactors are backported at the discretion of the merger.
Mergers will be more and more conservative with backports, to avoid introducing
regressions.
In parallel to this phase, main can continue to receive new features, to be
released in the YYYY+1 cycle.
Gel des chaînes à traduire / version de prépublication¶
S’il y a toujours un flux conséquent de problèmes bloquants à la date prévue de prépublication, une seconde beta sera produite pour encourager davantage de tests et la date de prépublication sera reportée d’environ 1 mois.
La version de prépublication marque le gel des chaînes, et cela arrive au moins deux semaines avant la version finale. Les traducteurs peuvent alors soumettre les traductions mises à jour afin que celles-ci soient incluses dans la version finale. Après cette étape, aucune nouvelle chaîne à traduire ne doit être ajoutée.
Après la publication de la version candidate, seuls les bogues bloquants la publication et les corrections de documentation sont rétroportés.
Version finale¶
Ideally, the final release will ship in approximately the second week of January.
Si des bogues majeurs sont toujours présents 2 semaines après la publication de la version candidate, une décision devra être prise sur la manière de procéder (il est probable qu’une nouvelle version candidate soit produite et que la date de la version finale soit repoussée).