Skip to content

fix: restore ._version as a compat shim#1062

Merged
henryiii merged 4 commits intopypa:mainfrom
henryiii:henryiii/fix/hatchling
Jan 15, 2026
Merged

fix: restore ._version as a compat shim#1062
henryiii merged 4 commits intopypa:mainfrom
henryiii:henryiii/fix/hatchling

Conversation

@henryiii
Copy link
Copy Markdown
Contributor

@henryiii henryiii commented Jan 15, 2026

I was hoping this was not being used, but see https://github.com/pypa/hatch/blob/8e1a709e49009ee25cf924c5a9da477a03149a75/backend/src/hatchling/version/scheme/standard.py#L69-L85. It breaks hatch version, not sure if anything else is affected (it's in hatchling, which worries me).

This adds the compat shim I was considering originally, with a DeprecationWarning. We can elevate it to FutureWarning in one of the next releases, then remove it.

The second commit adds a warning if ._version is accessed. I forget if there's an issue with doing this on a property.

  • fix: hatching uses and modifies _version
  • fix: issue warnings if _version is used

@henryiii henryiii force-pushed the henryiii/fix/hatchling branch 2 times, most recently from 7872cfe to e03bb5b Compare January 15, 2026 21:45
Copy link
Copy Markdown
Member

@notatallshaw notatallshaw left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this is the best approach, it maintains compatibility, keeps performance, and strongly warns them to stop using internal object.

Going forward users will be better served by __replace__, which is fast and don't mutate the underlying object.

@henryiii henryiii force-pushed the henryiii/fix/hatchling branch from e03bb5b to 03812c5 Compare January 15, 2026 21:53

@property
@deprecated("Version._version is private and will be removed soon")
def _version(self) -> _Version:
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we need three deprecates? Won't it trigger twice now when you access Version._version?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wanted type checkers to complain when _Version is accessed directly or _version is used. Yes, I think you do get two runtime warnings, though.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can keep the double warning from occurring:

diff --git a/src/packaging/version.py b/src/packaging/version.py
index 4ddd897..5891335 100644
--- a/src/packaging/version.py
+++ b/src/packaging/version.py
@@ -12,6 +12,7 @@ from __future__ import annotations
 import re
 import sys
 import typing
+import warnings
 from typing import (
     Any,
     Callable,
@@ -34,7 +35,6 @@ elif typing.TYPE_CHECKING:
     from typing_extensions import deprecated
 else:  # pragma: no cover
     import functools
-    import warnings

     def deprecated(message: str) -> object:
         def decorator(func: object) -> object:
@@ -421,9 +421,11 @@ class Version(_BaseVersion):
     @property
     @deprecated("Version._version is private and will be removed soon")
     def _version(self) -> _Version:
-        return _Version(
-            self._epoch, self._release, self._dev, self._pre, self._post, self._local
-        )
+        with warnings.catch_warnings():
+            warnings.simplefilter("ignore", DeprecationWarning)
+            return _Version(
+                self._epoch, self._release, self._dev, self._pre, self._post, self._local
+            )

     @_version.setter
     @deprecated("Version._version is private and will be removed soon")
diff --git a/tests/test_version.py b/tests/test_version.py
index efbcfc0..344a7fa 100644
--- a/tests/test_version.py
+++ b/tests/test_version.py
@@ -1022,7 +1022,7 @@ def reset_version_parts(version: Version, **kwargs: typing.Any) -> None:  # noqa
 # These will be deprecated in 26.1, and removed in the future
 def test_deprecated__version() -> None:
     v = Version("1.2.3")
-    with pytest.warns(DeprecationWarning, match="is private"):
+    with pytest.warns(DeprecationWarning, match="_version is private"):
         assert v._version.release == (1, 2, 3)

But hatchling's usage will still trigger twice because it is also creating a _Version object directly. And the above patch is not great for threaded code.

If we had #1011 I could just not list _Version in __all__, which would make type checkers not see it.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah, I was thinking this was just for runtime warnings, I hadn't considered type checkers.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'll revert adding @deprecated to _Version for now, I think the __all__ approach later will be better.

Copy link
Copy Markdown
Member

@notatallshaw notatallshaw Jan 15, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we had #1011 I could just not list _Version in all, which would make type checkers not see it.

Yeah, if that causes type checkers to error I would rather do that than causing warnings multiple times, it's not really deprecated anyway, as it was never public.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(I'm not positive type checkers have implemented this yet, but the idea was they could, and that's why it's in typing_extensions)

#1011 gives us an actual public interface that's not just underscores. Type checkers respect __all__.

@henryiii
Copy link
Copy Markdown
Contributor Author

Added an underscore to deprecated, since we don't have __all__/__dir__ and someone might think it's public, and I want to remove it when we remove this warning.

@henryiii henryiii merged commit d5398b8 into pypa:main Jan 15, 2026
44 checks passed
@henryiii henryiii deleted the henryiii/fix/hatchling branch January 15, 2026 22:34
radermacher-iits pushed a commit to kubara-io/kubara that referenced this pull request Feb 19, 2026
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [packaging](https://github.com/pypa/packaging) | packages | major | `==25.0` → `==26.0` |

---

### Release Notes

<details>
<summary>pypa/packaging (packaging)</summary>

### [`v26.0`](https://github.com/pypa/packaging/releases/tag/26.0)

[Compare Source](pypa/packaging@25.0...26.0)

Read about the performance improvements here: <https://iscinumpy.dev/post/packaging-faster>.

#### What's Changed

Features:

- PEP 751: support pylock by [@&#8203;sbidoul](https://github.com/sbidoul) in [#&#8203;900](pypa/packaging#900)
- PEP 794: import name metadata by [@&#8203;brettcannon](https://github.com/brettcannon) in [#&#8203;948](pypa/packaging#948)
- Support writing metadata by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;846](pypa/packaging#846)
- Support `__replace__` for `Version` by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;1003](pypa/packaging#1003)
- Support positional pattern matching for `Version` and `Specifier` by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;1004](pypa/packaging#1004)

Behavior adaptations:

- PEP 440 handling of prereleases for `Specifier.contains`, `SpecifierSet.contains`, and `SpecifierSet.filter` by [@&#8203;notatallshaw](https://github.com/notatallshaw) in [#&#8203;897](pypa/packaging#897)
- Handle PEP 440 edge case in `SpecifierSet.filter` by [@&#8203;notatallshaw](https://github.com/notatallshaw) in [#&#8203;942](pypa/packaging#942)
- Adjust arbitrary equality intersection preservation in `SpecifierSet` by [@&#8203;notatallshaw](https://github.com/notatallshaw) in [#&#8203;951](pypa/packaging#951)
- Return `False` instead of raising for `.contains` with invalid version by [@&#8203;Liam-DeVoe](https://github.com/Liam-DeVoe) in [#&#8203;932](pypa/packaging#932)
- Support arbitrary equality on arbitrary strings for `Specifier` and `SpecifierSet`'s `filter` and `contains` method. by [@&#8203;notatallshaw](https://github.com/notatallshaw) in [#&#8203;954](pypa/packaging#954)
- Only try to parse as `Version` on certain marker keys, return `False` on unequal ordered comparsions by [@&#8203;JP-Ellis](https://github.com/JP-Ellis) in [#&#8203;939](pypa/packaging#939)

Fixes:

- Update `_hash` when unpickling `Tag()` by [@&#8203;dholth](https://github.com/dholth) in [#&#8203;860](pypa/packaging#860)
- Correct comment and simplify implicit prerelease handling in `Specifier.prereleases` by [@&#8203;notatallshaw](https://github.com/notatallshaw) in [#&#8203;896](pypa/packaging#896)
- Use explicit `_GLibCVersion` `NamedTuple` in `_manylinux` by [@&#8203;cthoyt](https://github.com/cthoyt) in [#&#8203;868](pypa/packaging#868)
- Detect invalid license expressions containing `()` by [@&#8203;bwoodsend](https://github.com/bwoodsend) in [#&#8203;879](pypa/packaging#879)
- Correct regex for metadata `'name'` format by [@&#8203;di](https://github.com/di) in [#&#8203;925](pypa/packaging#925)
- Improve the message around expecting a semicolon by [@&#8203;pradyunsg](https://github.com/pradyunsg) in [#&#8203;833](pypa/packaging#833)
- Support nested parens in license expressions by [@&#8203;Liam-DeVoe](https://github.com/Liam-DeVoe) in [#&#8203;931](pypa/packaging#931)
- Add space before at symbol in `Requirements` string by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;953](pypa/packaging#953)
- A root logger use found by ruff LOG, use `packaging` logger instead by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;965](pypa/packaging#965)
- Better support for subclassing `Marker` and `Requirement` by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;1022](pypa/packaging#1022)
- Normalize all extras, not just if it comes first by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;1024](pypa/packaging#1024)
- Don't produce a broken repr if `Marker` fails to construct by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;1033](pypa/packaging#1033)

Performance:

- Avoid recompiling regexes in the tokenizer for a 3x speedup by [@&#8203;hauntsaninja](https://github.com/hauntsaninja) in [#&#8203;1019](pypa/packaging#1019)
- Improve performance in `_manylinux.py` by [@&#8203;cthoyt](https://github.com/cthoyt) in [#&#8203;869](pypa/packaging#869)
- Minor cleanups to `Version` by [@&#8203;bearomorphism](https://github.com/bearomorphism) in [#&#8203;913](pypa/packaging#913)
- Skip redundant creation of `Version`s in specifier comparison by [@&#8203;notatallshaw](https://github.com/notatallshaw) in [#&#8203;986](pypa/packaging#986)
- Cache `Specifier`'s Version by [@&#8203;notatallshaw](https://github.com/notatallshaw) in [#&#8203;985](pypa/packaging#985)
- Make `Version` a little faster by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;987](pypa/packaging#987)
- Minor `Version` regex cleanup by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;990](pypa/packaging#990)
- Faster regex on Python 3.11.5+ by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;988](pypa/packaging#988) and [#&#8203;1055](pypa/packaging#1055)
- Lazily calculate `_key` in `Version` by [@&#8203;notatallshaw](https://github.com/notatallshaw) in [#&#8203;989](pypa/packaging#989) and regression for `packaging_legacy` fixed by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;1048](pypa/packaging#1048)
- Faster `canonicalize_version` by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;993](pypa/packaging#993)
- Use `fullmatch` in a couple more places by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;992](pypa/packaging#992)
- Use `fullmatch` for markers too by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;1029](pypa/packaging#1029)
- Use `map` instead of generator by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;996](pypa/packaging#996)
- Deprecate `._version` (`_Version`, a `NamedTuple`) by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;995](pypa/packaging#995) and [#&#8203;1062](pypa/packaging#1062)
- Avoid duplicate `Version` creation in `canonicalize_version` by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;994](pypa/packaging#994)
- Add `__slots__` to `Version` by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;1001](pypa/packaging#1001)
- Add `__slots__` to `Specifier`s by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;1002](pypa/packaging#1002)
- Add `__slots__` to `Node`s by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;1032](pypa/packaging#1032)
- Use `version.__replace__` in specifier comparison by [@&#8203;notatallshaw](https://github.com/notatallshaw) in [#&#8203;999](pypa/packaging#999)
- Use `_get_spec_version` in more places in `Specifier` by [@&#8203;notatallshaw](https://github.com/notatallshaw) in [#&#8203;1005](pypa/packaging#1005)
- Pull `set` construction out of function by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;1012](pypa/packaging#1012)
- Letter normalization dict for prereleases and the like by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;1014](pypa/packaging#1014)
- Avoid normalizing extras again when comparing by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;1028](pypa/packaging#1028)
- Speed up `Version.__str__` by about 10% by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;997](pypa/packaging#997)
- Increase the performance of `canonicalize_name` by avoiding a regex by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;1030](pypa/packaging#1030), [#&#8203;1047](pypa/packaging#1047), and [#&#8203;1064](pypa/packaging#1064)
- Faster zero stripping by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;1058](pypa/packaging#1058)

Type annotations:

- Fix a type annotation by [@&#8203;brettcannon](https://github.com/brettcannon) in [#&#8203;907](pypa/packaging#907)
- Fix tags return type in `parse_wheel_filename` docs by [@&#8203;ncoghlan](https://github.com/ncoghlan) in [#&#8203;973](pypa/packaging#973)
- Add type hint for `_version` in `.version.Version` by [@&#8203;brettcannon](https://github.com/brettcannon) in [#&#8203;927](pypa/packaging#927)
- Changed static type annotations in prereleases setter method in `specifier.py` by [@&#8203;subhajitsaha01](https://github.com/subhajitsaha01) in [#&#8203;930](pypa/packaging#930)
- Statically type the tests by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;982](pypa/packaging#982)

Internal:

- Test and declare support Python 3.14 by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;901](pypa/packaging#901)
- Modernize and speed up tests on Python 3.14 by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;903](pypa/packaging#903)
- Change our license metadata to use an SPDX license expression by [@&#8203;cdce8p](https://github.com/cdce8p) in [#&#8203;881](pypa/packaging#881)
- No need for `license-files` by [@&#8203;DimitriPapadopoulos](https://github.com/DimitriPapadopoulos) in [#&#8203;924](pypa/packaging#924)
- Update mypy by [@&#8203;hauntsaninja](https://github.com/hauntsaninja) in [#&#8203;891](pypa/packaging#891)
- Some config updates by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;902](pypa/packaging#902)
- Add spell check and rst check by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;904](pypa/packaging#904)
- Clean up ruff ignores by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;905](pypa/packaging#905)
- Update example for env marker `python_version` by [@&#8203;trim21](https://github.com/trim21) in [#&#8203;908](pypa/packaging#908)
- Move codespell configuration into pyproject.toml by [@&#8203;yarikoptic](https://github.com/yarikoptic) in [#&#8203;910](pypa/packaging#910)
- Check warning a little more precisely by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;837](pypa/packaging#837)
- Speed up mypy a little by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;836](pypa/packaging#836)
- Apply ruff/flake8-pyi rules (PYI) by [@&#8203;DimitriPapadopoulos](https://github.com/DimitriPapadopoulos) in [#&#8203;835](pypa/packaging#835)
- Better local runs for codespell by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;911](pypa/packaging#911)
- Remove outdated/confusing Gist link by [@&#8203;stefan6419846](https://github.com/stefan6419846) in [#&#8203;921](pypa/packaging#921)
- Fix docs and docs ci after [#&#8203;897](pypa/packaging#897) landed by [@&#8203;notatallshaw](https://github.com/notatallshaw) in [#&#8203;926](pypa/packaging#926)
- Run twine-check on push in CI by [@&#8203;EpicWink](https://github.com/EpicWink) in [#&#8203;922](pypa/packaging#922)
- `ruff` was renamed `ruff-check` in pre-commit by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;933](pypa/packaging#933)
- Fix incorrectly implicitly concatenated string in specifiers test by [@&#8203;notatallshaw](https://github.com/notatallshaw) in [#&#8203;946](pypa/packaging#946)
- Simplify conditional by [@&#8203;ofek](https://github.com/ofek) in [#&#8203;949](pypa/packaging#949)
- Modernize nox, use dependency-groups for tests by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;952](pypa/packaging#952)
- Add more checks that don't affect anything by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;957](pypa/packaging#957)
- Enable Ruff ISC rule by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;959](pypa/packaging#959)
- Ruff code FLY by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;963](pypa/packaging#963)
- pytest `log_level` is better than `log_cli_level` by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;956](pypa/packaging#956)
- Ruff code TRY by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;961](pypa/packaging#961)
- Add the ruff PL checks by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;964](pypa/packaging#964)
- Enable Ruff ARG rules by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;958](pypa/packaging#958)
- Ruff PT code (pytest) by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;960](pypa/packaging#960)
- Add ruff DTZ by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;968](pypa/packaging#968)
- Add ruff BLE by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;967](pypa/packaging#967)
- Add the ruff SIM checks by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;966](pypa/packaging#966)
- Adding ruff PERF by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;969](pypa/packaging#969)
- Move some config into coverage config by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;971](pypa/packaging#971)
- Check ruff C4 by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;962](pypa/packaging#962)
- Adding ruff T20 by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;972](pypa/packaging#972)
- Add a tests pass job by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;977](pypa/packaging#977)
- Add ruff TC by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;980](pypa/packaging#980)
- Adding part of ruff RET by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;979](pypa/packaging#979)
- Reorder mypy check by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;983](pypa/packaging#983)
- Enable ruff ALL by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;984](pypa/packaging#984)
- Link back to repo/source in furo by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;991](pypa/packaging#991)
- Add case insensitivity tests for arbitrary equality by [@&#8203;notatallshaw](https://github.com/notatallshaw) in [#&#8203;975](pypa/packaging#975)
- Synchronize documentation and code for markers by [@&#8203;zahlman](https://github.com/zahlman) in [#&#8203;1008](pypa/packaging#1008)
- Use `partition` in `_parse_project_urls` by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;1013](pypa/packaging#1013)
- auto-skip the dependabot PRs in the release changelog generation by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;1016](pypa/packaging#1016)
- Update unreleased section in changelog by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;1017](pypa/packaging#1017)
- Fix PR role to match extlinks by [@&#8203;hugovk](https://github.com/hugovk) in [#&#8203;1020](pypa/packaging#1020)
- Mention new parts in README by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;1023](pypa/packaging#1023)
- Replace a couple of asserts with else by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;1027](pypa/packaging#1027)
- Simplify and/or check a little more by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;1031](pypa/packaging#1031)
- Use slim runner for all check by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;1021](pypa/packaging#1021)
- Use typos instead of codespell by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;1015](pypa/packaging#1015)
- Update changelog with recent additions by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;1034](pypa/packaging#1034)
- Publish to PyPI via GitHub CI by [@&#8203;EpicWink](https://github.com/EpicWink) in [#&#8203;893](pypa/packaging#893)
- Use prek for faster pre-commit lint step by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;1037](pypa/packaging#1037)
- Add help text to noxfile by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;1038](pypa/packaging#1038)
- Update licenses to 3.27 by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;1036](pypa/packaging#1036)
- Use relative import in `packaging.licenses` by [@&#8203;notatallshaw](https://github.com/notatallshaw) in [#&#8203;1039](pypa/packaging#1039)
- Add zizmor and tighten up CI by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;1035](pypa/packaging#1035)
- Fix release script by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;1040](pypa/packaging#1040)
- Fix using a dev version (again) by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;1041](pypa/packaging#1041)
- Fix type hint of function used with `contextlib.contextmanager` by [@&#8203;SpecLad](https://github.com/SpecLad) in [#&#8203;1046](pypa/packaging#1046)
- Always run tests by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;1044](pypa/packaging#1044)
- Fix a changelog number by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;1042](pypa/packaging#1042)
- Fix the publish job by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;1043](pypa/packaging#1043)
- Get the correct tag on publish by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;1045](pypa/packaging#1045)
- Test on first public release of CPython 3.11 and newer by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;1056](pypa/packaging#1056)
- Fix publication job (again) by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;1051](pypa/packaging#1051)
- Use `actionlint` to check CI workflows by [@&#8203;miketheman](https://github.com/miketheman) in [#&#8203;1052](pypa/packaging#1052)
- Fix formatting of distribution types in metadata.rst by [@&#8203;brettcannon](https://github.com/brettcannon) in [#&#8203;1053](pypa/packaging#1053)

#### New Contributors

- [@&#8203;cdce8p](https://github.com/cdce8p) made their first contribution in [#&#8203;881](pypa/packaging#881)
- [@&#8203;dholth](https://github.com/dholth) made their first contribution in [#&#8203;860](pypa/packaging#860)
- [@&#8203;trim21](https://github.com/trim21) made their first contribution in [#&#8203;908](pypa/packaging#908)
- [@&#8203;yarikoptic](https://github.com/yarikoptic) made their first contribution in [#&#8203;910](pypa/packaging#910)
- [@&#8203;cthoyt](https://github.com/cthoyt) made their first contribution in [#&#8203;868](pypa/packaging#868)
- [@&#8203;bwoodsend](https://github.com/bwoodsend) made their first contribution in [#&#8203;879](pypa/packaging#879)
- [@&#8203;stefan6419846](https://github.com/stefan6419846) made their first contribution in [#&#8203;921](pypa/packaging#921)
- [@&#8203;bearomorphism](https://github.com/bearomorphism) made their first contribution in [#&#8203;913](pypa/packaging#913)
- [@&#8203;EpicWink](https://github.com/EpicWink) made their first contribution in [#&#8203;922](pypa/packaging#922)
- [@&#8203;Liam-DeVoe](https://github.com/Liam-DeVoe) made their first contribution in [#&#8203;932](pypa/packaging#932)
- [@&#8203;subhajitsaha01](https://github.com/subhajitsaha01) made their first contribution in [#&#8203;930](pypa/packaging#930)
- [@&#8203;ncoghlan](https://github.com/ncoghlan) made their first contribution in [#&#8203;973](pypa/packaging#973)
- [@&#8203;zahlman](https://github.com/zahlman) made their first contribution in [#&#8203;1008](pypa/packaging#1008)
- [@&#8203;JP-Ellis](https://github.com/JP-Ellis) made their first contribution in [#&#8203;939](pypa/packaging#939)

#### Since last RC

Fixes:

- Restore `._version` as a compat shim by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;1062](pypa/packaging#1062)

Performance:

- Dual replace by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;1064](pypa/packaging#1064)

Documentaiton:

- Prepare for 26.0 final by [@&#8203;henryiii](https://github.com/henryiii) in [#&#8203;1063](pypa/packaging#1063)

**Full Changelog**: <pypa/packaging@26.0rc3...26.0>

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4zLjYiLCJ1cGRhdGVkSW5WZXIiOiI0My4zLjYiLCJ0YXJnZXRCcmFuY2giOiJtYXN0ZXIiLCJsYWJlbHMiOltdfQ==-->

Reviewed-on: https://kubara.git.onstackit.cloud/STACKIT/kubara/pulls/280
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants