Skip to content

[pull] master from aio-libs:master#532

Merged
pull[bot] merged 4 commits intotj-python:masterfrom
aio-libs:master
Apr 15, 2026
Merged

[pull] master from aio-libs:master#532
pull[bot] merged 4 commits intotj-python:masterfrom
aio-libs:master

Conversation

@pull
Copy link
Copy Markdown

@pull pull bot commented Apr 15, 2026

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.4)

Can you help keep this open source service alive? 💖 Please sponsor : )

dependabot bot added 4 commits April 15, 2026 11:18
Bumps [virtualenv](https://github.com/pypa/virtualenv) from 21.2.0 to
21.2.4.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/pypa/virtualenv/releases">virtualenv's
releases</a>.</em></p>
<blockquote>
<h2>21.2.4</h2>
<!-- raw HTML omitted -->
<h2>What's Changed</h2>
<ul>
<li>🐛 fix(periodic-update): refuse unverified HTTPS to PyPI by default
by <a
href="https://github.com/gaborbernat"><code>@​gaborbernat</code></a> in
<a
href="https://redirect.github.com/pypa/virtualenv/pull/3122">pypa/virtualenv#3122</a></li>
<li>🐛 fix(zipapp): enforce ROOT containment with Path.relative_to by <a
href="https://github.com/gaborbernat"><code>@​gaborbernat</code></a> in
<a
href="https://redirect.github.com/pypa/virtualenv/pull/3121">pypa/virtualenv#3121</a></li>
<li>🐛 fix(seed): validate distribution and version before pip download
by <a
href="https://github.com/gaborbernat"><code>@​gaborbernat</code></a> in
<a
href="https://redirect.github.com/pypa/virtualenv/pull/3120">pypa/virtualenv#3120</a></li>
<li>🐛 fix(seed): verify sha256 of bundled wheels on load by <a
href="https://github.com/gaborbernat"><code>@​gaborbernat</code></a> in
<a
href="https://redirect.github.com/pypa/virtualenv/pull/3119">pypa/virtualenv#3119</a></li>
<li>🐛 fix(seed): validate wheel zip entries before extraction by <a
href="https://github.com/gaborbernat"><code>@​gaborbernat</code></a> in
<a
href="https://redirect.github.com/pypa/virtualenv/pull/3118">pypa/virtualenv#3118</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/pypa/virtualenv/compare/21.2.3...21.2.4">https://github.com/pypa/virtualenv/compare/21.2.3...21.2.4</a></p>
<h2>21.2.3</h2>
<!-- raw HTML omitted -->
<p><strong>Full Changelog</strong>: <a
href="https://github.com/pypa/virtualenv/compare/21.2.2...21.2.3">https://github.com/pypa/virtualenv/compare/21.2.2...21.2.3</a></p>
<h2>21.2.2</h2>
<!-- raw HTML omitted -->
<h2>What's Changed</h2>
<ul>
<li>bump python-discovery minimum to 1.2.2 by <a
href="https://github.com/rahuldevikar"><code>@​rahuldevikar</code></a>
in <a
href="https://redirect.github.com/pypa/virtualenv/pull/3117">pypa/virtualenv#3117</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/pypa/virtualenv/compare/21.2.1...21.2.2">https://github.com/pypa/virtualenv/compare/21.2.1...21.2.2</a></p>
<h2>21.2.1</h2>
<!-- raw HTML omitted -->
<h2>What's Changed</h2>
<ul>
<li>Upgrade embedded pip/setuptools/wheel by <a
href="https://github.com/github-actions"><code>@​github-actions</code></a>[bot]
in <a
href="https://redirect.github.com/pypa/virtualenv/pull/3093">pypa/virtualenv#3093</a></li>
<li>Enhance upgrade workflow: age check, dedup, issue tracking by <a
href="https://github.com/rahuldevikar"><code>@​rahuldevikar</code></a>
in <a
href="https://redirect.github.com/pypa/virtualenv/pull/3094">pypa/virtualenv#3094</a></li>
<li>🐛 fix(create): use commonpath for correct path validation by <a
href="https://github.com/gaborbernat"><code>@​gaborbernat</code></a> in
<a
href="https://redirect.github.com/pypa/virtualenv/pull/3097">pypa/virtualenv#3097</a></li>
<li>🔒 ci(workflows): add zizmor security auditing by <a
href="https://github.com/gaborbernat"><code>@​gaborbernat</code></a> in
<a
href="https://redirect.github.com/pypa/virtualenv/pull/3099">pypa/virtualenv#3099</a></li>
<li>Add current and previous maintainers by <a
href="https://github.com/rahuldevikar"><code>@​rahuldevikar</code></a>
in <a
href="https://redirect.github.com/pypa/virtualenv/pull/3101">pypa/virtualenv#3101</a></li>
<li>🔧 fix(ci): restore git credentials for release and upgrade jobs by
<a href="https://github.com/gaborbernat"><code>@​gaborbernat</code></a>
in <a
href="https://redirect.github.com/pypa/virtualenv/pull/3102">pypa/virtualenv#3102</a></li>
<li>Fix broken Installation link in README by <a
href="https://github.com/Bahtya"><code>@​Bahtya</code></a> in <a
href="https://redirect.github.com/pypa/virtualenv/pull/3106">pypa/virtualenv#3106</a></li>
<li>fix: use terminal width for help formatting instead of hardcoded 240
by <a href="https://github.com/Bahtya"><code>@​Bahtya</code></a> in <a
href="https://redirect.github.com/pypa/virtualenv/pull/3110">pypa/virtualenv#3110</a></li>
<li>🐛 fix(nushell): surface actionable hint in deactivate error output
by <a
href="https://github.com/gaborbernat"><code>@​gaborbernat</code></a> in
<a
href="https://redirect.github.com/pypa/virtualenv/pull/3112">pypa/virtualenv#3112</a></li>
<li>👷 ci: fix setup-uv warnings and drop brew@3.9 by <a
href="https://github.com/gaborbernat"><code>@​gaborbernat</code></a> in
<a
href="https://redirect.github.com/pypa/virtualenv/pull/3113">pypa/virtualenv#3113</a></li>
<li>fix(ci): fix pre-release push and release note generation by <a
href="https://github.com/gaborbernat"><code>@​gaborbernat</code></a> in
<a
href="https://redirect.github.com/pypa/virtualenv/pull/3114">pypa/virtualenv#3114</a></li>
<li>fix(ci): check out repo in publish job for gh release notes by <a
href="https://github.com/gaborbernat"><code>@​gaborbernat</code></a> in
<a
href="https://redirect.github.com/pypa/virtualenv/pull/3115">pypa/virtualenv#3115</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/github-actions"><code>@​github-actions</code></a>[bot]
made their first contribution in <a
href="https://redirect.github.com/pypa/virtualenv/pull/3093">pypa/virtualenv#3093</a></li>
<li><a href="https://github.com/Bahtya"><code>@​Bahtya</code></a> made
their first contribution in <a
href="https://redirect.github.com/pypa/virtualenv/pull/3106">pypa/virtualenv#3106</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/pypa/virtualenv/blob/main/docs/changelog.rst">virtualenv's
changelog</a>.</em></p>
<blockquote>
<h1>Bugfixes - 21.2.4</h1>
<ul>
<li>Security hardening: validate each entry of a seed wheel archive
before extracting it so a tampered wheel cannot escape
the app-data image directory via an absolute path or <code>..</code>
traversal. (:issue:<code>3118</code>)</li>
<li>Security hardening: verify the SHA-256 of every bundled seed wheel
when it is loaded so a corrupted or tampered file
on disk fails loud instead of being handed to pip. The hash table is
generated alongside <code>BUNDLE_SUPPORT</code> by
<code>tasks/upgrade_wheels.py</code>. (:issue:<code>3119</code>)</li>
<li>Security hardening: validate the distribution name and version
specifier passed to <code>pip download</code> when acquiring a
seed wheel so extras, pip flags, or shell metacharacters cannot be
smuggled into the subprocess command line.
(:issue:<code>3120</code>)</li>
<li>Security hardening: replace the string-prefix containment check in
<code>virtualenv.util.zipapp</code> with
<code>Path.relative_to</code> so the zipapp extraction helpers refuse
any path that does not resolve under the archive root.
(:issue:<code>3121</code>)</li>
<li>Security hardening: do not silently fall back to an unverified HTTPS
context when the periodic update request to PyPI
fails TLS verification. The returned metadata drives which wheel version
virtualenv considers &quot;up to date&quot;, so
accepting an unverified response lets a network-level attacker suppress
security updates. Set
<code>VIRTUALENV_PERIODIC_UPDATE_INSECURE=1</code> to restore the
previous behavior on hosts with broken trust stores.
(:issue:<code>3122</code>)</li>
</ul>
<hr />
<p>v21.2.3 (2026-04-14)</p>
<hr />
<p>No significant changes.</p>
<hr />
<p>v21.2.2 (2026-04-13)</p>
<hr />
<h1>Bugfixes - 21.2.2</h1>
<ul>
<li>Bump <code>python-discovery</code> minimum to
<code>&gt;=1.2.2</code> to include <code>normalize_isa</code> support -
by :user:<code>rahuldevikar</code>.
(:issue:<code>3117</code>)</li>
</ul>
<hr />
<p>v21.2.1 (2026-04-09)</p>
<hr />
<h1>Bugfixes - 21.2.1</h1>
<ul>
<li>
<p>Upgrade embedded wheels:</p>
<ul>
<li>setuptools to <code>82.0.1</code> from <code>82.0.0</code>
(:issue:<code>3093</code>)</li>
</ul>
</li>
<li>
<p>Use terminal width for help formatting instead of hardcoded 240.
(:issue:<code>3110</code>)</p>
</li>
</ul>
<hr />
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/pypa/virtualenv/commit/15063c10b3afae1d3fa3234e99f956434051f7b5"><code>15063c1</code></a>
release 21.2.4</li>
<li><a
href="https://github.com/pypa/virtualenv/commit/754602d6f07d262f4f352cc590bd3f9ef3b157fe"><code>754602d</code></a>
🐛 fix(seed): validate wheel zip entries before extraction (<a
href="https://redirect.github.com/pypa/virtualenv/issues/3118">#3118</a>)</li>
<li><a
href="https://github.com/pypa/virtualenv/commit/43deabf249c10896d09a282aa254a837fdcef9b5"><code>43deabf</code></a>
🐛 fix(seed): verify sha256 of bundled wheels on load (<a
href="https://redirect.github.com/pypa/virtualenv/issues/3119">#3119</a>)</li>
<li><a
href="https://github.com/pypa/virtualenv/commit/4e412b0ba38284487267f481026ea218689fa9bd"><code>4e412b0</code></a>
🐛 fix(seed): validate distribution and version before pip download (<a
href="https://redirect.github.com/pypa/virtualenv/issues/3120">#3120</a>)</li>
<li><a
href="https://github.com/pypa/virtualenv/commit/130981834946a828174e37ecdd250f530f09832f"><code>1309818</code></a>
🐛 fix(zipapp): enforce ROOT containment with Path.relative_to (<a
href="https://redirect.github.com/pypa/virtualenv/issues/3121">#3121</a>)</li>
<li><a
href="https://github.com/pypa/virtualenv/commit/48f6fdcc14b8654236f9081adbff10a32f536940"><code>48f6fdc</code></a>
🐛 fix(periodic-update): refuse unverified HTTPS to PyPI by default (<a
href="https://redirect.github.com/pypa/virtualenv/issues/3122">#3122</a>)</li>
<li><a
href="https://github.com/pypa/virtualenv/commit/a5fb4a290d60776e2b3f81696bd7291913aa25d4"><code>a5fb4a2</code></a>
release 21.2.3</li>
<li><a
href="https://github.com/pypa/virtualenv/commit/7f91a9a0bfbc549fc10274164135cf02c8ca8167"><code>7f91a9a</code></a>
release 21.2.2</li>
<li><a
href="https://github.com/pypa/virtualenv/commit/33348d69426ef49ea26dcab7f12b474706968813"><code>33348d6</code></a>
bump python-discovery minimum to 1.2.2 (<a
href="https://redirect.github.com/pypa/virtualenv/issues/3117">#3117</a>)</li>
<li><a
href="https://github.com/pypa/virtualenv/commit/d73ff7c2dccd6a60223b5c4ed673d7f3e7df9a43"><code>d73ff7c</code></a>
[pre-commit.ci] pre-commit autoupdate (<a
href="https://redirect.github.com/pypa/virtualenv/issues/3116">#3116</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/pypa/virtualenv/compare/21.2.0...21.2.4">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=virtualenv&package-manager=pip&previous-version=21.2.0&new-version=21.2.4)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [build](https://github.com/pypa/build) from 1.4.2 to 1.4.3.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/pypa/build/releases">build's
releases</a>.</em></p>
<blockquote>
<h2>1.4.3</h2>
<!-- raw HTML omitted -->
<h2>What's Changed</h2>
<ul>
<li>🐛 fix(api): resolve thread-safety races in build API by <a
href="https://github.com/gaborbernat"><code>@​gaborbernat</code></a> in
<a
href="https://redirect.github.com/pypa/build/pull/1015">pypa/build#1015</a></li>
<li>🐛 fix(builder): validate backend-path entries exist on disk by <a
href="https://github.com/gaborbernat"><code>@​gaborbernat</code></a> in
<a
href="https://redirect.github.com/pypa/build/pull/1016">pypa/build#1016</a></li>
<li>test: cover config settings build paths by <a
href="https://github.com/terminalchai"><code>@​terminalchai</code></a>
in <a
href="https://redirect.github.com/pypa/build/pull/992">pypa/build#992</a></li>
<li>Add kind=(step, ) for root messages with * by <a
href="https://github.com/abitrolly"><code>@​abitrolly</code></a> in <a
href="https://redirect.github.com/pypa/build/pull/973">pypa/build#973</a></li>
<li>fix: correct changelog category ordering by <a
href="https://github.com/gaborbernat"><code>@​gaborbernat</code></a> in
<a
href="https://redirect.github.com/pypa/build/pull/1017">pypa/build#1017</a></li>
<li>🐛 fix(cli): show full dependency chain in missing deps error by <a
href="https://github.com/gaborbernat"><code>@​gaborbernat</code></a> in
<a
href="https://redirect.github.com/pypa/build/pull/1019">pypa/build#1019</a></li>
<li>tests: fully annotate by <a
href="https://github.com/henryiii"><code>@​henryiii</code></a> in <a
href="https://redirect.github.com/pypa/build/pull/1020">pypa/build#1020</a></li>
<li>chore: lazy imports by <a
href="https://github.com/henryiii"><code>@​henryiii</code></a> in <a
href="https://redirect.github.com/pypa/build/pull/1021">pypa/build#1021</a></li>
<li>chore: adding more ruff codes by <a
href="https://github.com/henryiii"><code>@​henryiii</code></a> in <a
href="https://redirect.github.com/pypa/build/pull/1022">pypa/build#1022</a></li>
<li>tests: improve annotations by <a
href="https://github.com/henryiii"><code>@​henryiii</code></a> in <a
href="https://redirect.github.com/pypa/build/pull/1023">pypa/build#1023</a></li>
<li>🧪 test(coverage): achieve 100% test coverage by <a
href="https://github.com/gaborbernat"><code>@​gaborbernat</code></a> in
<a
href="https://redirect.github.com/pypa/build/pull/1018">pypa/build#1018</a></li>
<li>chore: add ruff PT by <a
href="https://github.com/henryiii"><code>@​henryiii</code></a> in <a
href="https://redirect.github.com/pypa/build/pull/1025">pypa/build#1025</a></li>
<li>chore: add ruff PYI by <a
href="https://github.com/henryiii"><code>@​henryiii</code></a> in <a
href="https://redirect.github.com/pypa/build/pull/1026">pypa/build#1026</a></li>
<li>chore: add ruff SIM/RET by <a
href="https://github.com/henryiii"><code>@​henryiii</code></a> in <a
href="https://redirect.github.com/pypa/build/pull/1028">pypa/build#1028</a></li>
<li>🐛 fix(env): strip PYTHONPATH from isolated builds by <a
href="https://github.com/gaborbernat"><code>@​gaborbernat</code></a> in
<a
href="https://redirect.github.com/pypa/build/pull/1024">pypa/build#1024</a></li>
<li>chore: use ruff ALL by <a
href="https://github.com/henryiii"><code>@​henryiii</code></a> in <a
href="https://redirect.github.com/pypa/build/pull/1029">pypa/build#1029</a></li>
<li>🐛 fix(env): prevent pip credential hang with private indexes by <a
href="https://github.com/gaborbernat"><code>@​gaborbernat</code></a> in
<a
href="https://redirect.github.com/pypa/build/pull/1030">pypa/build#1030</a></li>
<li>🐛 fix(check_dependency): verify URL reqs via PEP 610 by <a
href="https://github.com/gaborbernat"><code>@​gaborbernat</code></a> in
<a
href="https://redirect.github.com/pypa/build/pull/1027">pypa/build#1027</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/terminalchai"><code>@​terminalchai</code></a>
made their first contribution in <a
href="https://redirect.github.com/pypa/build/pull/992">pypa/build#992</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/pypa/build/compare/1.4.2...1.4.3">https://github.com/pypa/build/compare/1.4.2...1.4.3</a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/pypa/build/blob/main/CHANGELOG.rst">build's
changelog</a>.</em></p>
<blockquote>
<p>####################
1.4.3 (2026-04-10)
####################</p>
<hr />
<p>Features</p>
<hr />
<ul>
<li>Add <code>kind</code> parameter to log messages to separate semantic
and representation - by :user:<code>abitrolly</code>
(:issue:<code>973</code>)</li>
</ul>
<hr />
<p>Bugfixes</p>
<hr />
<ul>
<li>Strip <code>PYTHONPATH</code> from the environment during isolated
builds to prevent host packages from leaking into the build
<ul>
<li>by :user:<code>gaborbernat</code> (:issue:<code>405</code>)</li>
</ul>
</li>
<li>Pass <code>--no-input</code> to pip to prevent hidden credential
prompts that cause hangs, and automatically set
<code>PIP_KEYRING_PROVIDER=subprocess</code> (or
<code>UV_KEYRING_PROVIDER=subprocess</code> for the uv installer) when
the <code>keyring</code>
CLI is on <code>PATH</code> -- by :user:<code>gaborbernat</code>
(:issue:<code>409</code>)</li>
<li><code>check_dependency</code> now reports URL requirements as unmet
instead of silently accepting them when a package with the
same name is installed - by :user:<code>gaborbernat</code>
(:issue:<code>860</code>)</li>
<li>Fix misleading missing dependency error display where transitive
dependency chains showed the top-level package on a
separate line, making it appear as if the top-level package itself was
missing - by :user:<code>gaborbernat</code>
(:issue:<code>875</code>)</li>
<li>Fix towncrier template to generate changelog categories in
definition order - by :user:<code>gaborbernat</code>
(:issue:<code>1007</code>)</li>
<li>Resolve thread-safety races in the build API - by
:user:<code>gaborbernat</code> (:issue:<code>1015</code>)</li>
<li>Validate <code>backend-path</code> entries exist on disk with a
clear error - by :user:<code>gaborbernat</code>
(:issue:<code>1016</code>)</li>
</ul>
<hr />
<p>Miscellaneous</p>
<hr />
<ul>
<li>:issue:<code>1020</code>, :issue:<code>1021</code></li>
</ul>
<p>####################
1.4.2 (2026-03-25)
####################</p>
<hr />
<p>Bugfixes</p>
<hr />
<ul>
<li>Ensure the <code>uv</code> installer uses the current version of
Python, avoiding an issue if <code>UV_PYTHON</code> is set, for
example. (:issue:<code>977</code>)</li>
<li>Fix <code>_has_valid_outer_pip</code> returning <code>True</code>
when pip is missing, causing build to try using a non-existent pip
instead of falling back to virtualenv. (:issue:<code>1003</code>)</li>
</ul>
<p>####################
1.4.1 (2026-03-24)
####################</p>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/pypa/build/commit/130b043d1a1c1a12a0558f2598430b769f074690"><code>130b043</code></a>
chore: prepare for 1.4.3</li>
<li><a
href="https://github.com/pypa/build/commit/7642efe3f3c5163aa5839d23dda606f3a07eaf21"><code>7642efe</code></a>
🐛 fix(check_dependency): verify URL reqs via PEP 610 (<a
href="https://redirect.github.com/pypa/build/issues/1027">#1027</a>)</li>
<li><a
href="https://github.com/pypa/build/commit/d407530dffe9e7c6141ec533f3271ced2aef9220"><code>d407530</code></a>
🐛 fix(env): prevent pip credential hang with private indexes (<a
href="https://redirect.github.com/pypa/build/issues/1030">#1030</a>)</li>
<li><a
href="https://github.com/pypa/build/commit/b3dc114be71c6823f6892d933b7ddee7c391ce45"><code>b3dc114</code></a>
chore: use ruff ALL (<a
href="https://redirect.github.com/pypa/build/issues/1029">#1029</a>)</li>
<li><a
href="https://github.com/pypa/build/commit/27b67b2db1807f2547af670e4d14401a6605bf3b"><code>27b67b2</code></a>
🐛 fix(env): strip PYTHONPATH from isolated builds (<a
href="https://redirect.github.com/pypa/build/issues/1024">#1024</a>)</li>
<li><a
href="https://github.com/pypa/build/commit/c1454fd30db0e733a65cdc1a927a99525e8e027e"><code>c1454fd</code></a>
chore: add ruff SIM/RET (<a
href="https://redirect.github.com/pypa/build/issues/1028">#1028</a>)</li>
<li><a
href="https://github.com/pypa/build/commit/0b1ca1cf1a0ec451fec3a2836b622c91effefaf6"><code>0b1ca1c</code></a>
chore: add ruff PYI (<a
href="https://redirect.github.com/pypa/build/issues/1026">#1026</a>)</li>
<li><a
href="https://github.com/pypa/build/commit/f1dfe82156c43b0808d283e818e4490b1362eae8"><code>f1dfe82</code></a>
chore: add ruff PT (<a
href="https://redirect.github.com/pypa/build/issues/1025">#1025</a>)</li>
<li><a
href="https://github.com/pypa/build/commit/4348292f7a8d010be2f1b689696bf9608ddf7885"><code>4348292</code></a>
🧪 test(coverage): achieve 100% test coverage (<a
href="https://redirect.github.com/pypa/build/issues/1018">#1018</a>)</li>
<li><a
href="https://github.com/pypa/build/commit/5d3390b31abfedfb6f8698f9d68a88eb37396eba"><code>5d3390b</code></a>
tests: improve annotations (<a
href="https://redirect.github.com/pypa/build/issues/1023">#1023</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/pypa/build/compare/1.4.2...1.4.3">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=build&package-manager=pip&previous-version=1.4.2&new-version=1.4.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [filelock](https://github.com/tox-dev/py-filelock) from 3.25.2 to
3.28.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/tox-dev/py-filelock/releases">filelock's
releases</a>.</em></p>
<blockquote>
<h2>3.28.0</h2>
<!-- raw HTML omitted -->
<h2>What's Changed</h2>
<ul>
<li>🐛 fix(ci): unbreak release workflow, publish to PyPI again by <a
href="https://github.com/gaborbernat"><code>@​gaborbernat</code></a> in
<a
href="https://redirect.github.com/tox-dev/filelock/pull/529">tox-dev/filelock#529</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/tox-dev/filelock/compare/3.27.0...3.28.0">https://github.com/tox-dev/filelock/compare/3.27.0...3.28.0</a></p>
<h2>3.27.0</h2>
<!-- raw HTML omitted -->
<h2>What's Changed</h2>
<ul>
<li>✨ feat(rw): add SoftReadWriteLock for NFS and HPC clusters by <a
href="https://github.com/gaborbernat"><code>@​gaborbernat</code></a> in
<a
href="https://redirect.github.com/tox-dev/filelock/pull/528">tox-dev/filelock#528</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/tox-dev/filelock/compare/3.26.1...3.27.0">https://github.com/tox-dev/filelock/compare/3.26.1...3.27.0</a></p>
<h2>3.26.1</h2>
<!-- raw HTML omitted -->
<h2>What's Changed</h2>
<ul>
<li>🐛 fix(asyncio): add <strong>exit</strong> to BaseAsyncFileLock and
fix <strong>del</strong> loop handling by <a
href="https://github.com/naarob"><code>@​naarob</code></a> in <a
href="https://redirect.github.com/tox-dev/filelock/pull/518">tox-dev/filelock#518</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/naarob"><code>@​naarob</code></a> made
their first contribution in <a
href="https://redirect.github.com/tox-dev/filelock/pull/518">tox-dev/filelock#518</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/tox-dev/filelock/compare/3.26.0...3.26.1">https://github.com/tox-dev/filelock/compare/3.26.0...3.26.1</a></p>
<h2>3.26.0</h2>
<!-- raw HTML omitted -->
<h2>What's Changed</h2>
<ul>
<li>🔒 ci(workflows): add zizmor security auditing by <a
href="https://github.com/gaborbernat"><code>@​gaborbernat</code></a> in
<a
href="https://redirect.github.com/tox-dev/filelock/pull/517">tox-dev/filelock#517</a></li>
<li>🔧 fix(ci): restore git credentials for release job by <a
href="https://github.com/gaborbernat"><code>@​gaborbernat</code></a> in
<a
href="https://redirect.github.com/tox-dev/filelock/pull/520">tox-dev/filelock#520</a></li>
<li>✨ feat(soft): add PID inspection and lock breaking by <a
href="https://github.com/gaborbernat"><code>@​gaborbernat</code></a> in
<a
href="https://redirect.github.com/tox-dev/filelock/pull/524">tox-dev/filelock#524</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/tox-dev/filelock/compare/3.25.2...3.26.0">https://github.com/tox-dev/filelock/compare/3.25.2...3.26.0</a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/tox-dev/filelock/blob/main/docs/changelog.rst">filelock's
changelog</a>.</em></p>
<blockquote>
<p>###########
Changelog
###########</p>
<hr />
<p>3.28.0 (2026-04-14)</p>
<hr />
<ul>
<li>🐛 fix(ci): unbreak release workflow, publish to PyPI again
:pr:<code>529</code></li>
</ul>
<hr />
<p>3.26.1 (2026-04-09)</p>
<hr />
<ul>
<li>🐛 fix(asyncio): add <strong>exit</strong> to BaseAsyncFileLock and
fix <strong>del</strong> loop handling :pr:<code>518</code> - by
:user:<code>naarob</code></li>
<li>build(deps): bump pypa/gh-action-pypi-publish from 1.13.0 to 1.14.0
:pr:<code>525</code> - by :user:<code>dependabot[bot]</code></li>
</ul>
<hr />
<p>3.26.0 (2026-04-06)</p>
<hr />
<ul>
<li>✨ feat(soft): add PID inspection and lock breaking
:pr:<code>524</code></li>
<li>[pre-commit.ci] pre-commit autoupdate :pr:<code>523</code> - by
:user:<code>pre-commit-ci[bot]</code></li>
<li>build(deps): bump astral-sh/setup-uv from 7.6.0 to 8.0.0
:pr:<code>522</code> - by :user:<code>dependabot[bot]</code></li>
<li>Remove persist-credentials: false from release job
:pr:<code>520</code></li>
<li>[pre-commit.ci] pre-commit autoupdate :pr:<code>519</code> - by
:user:<code>pre-commit-ci[bot]</code></li>
<li>🔒 ci(workflows): add zizmor security auditing
:pr:<code>517</code></li>
<li>[pre-commit.ci] pre-commit autoupdate :pr:<code>516</code> - by
:user:<code>pre-commit-ci[bot]</code></li>
<li>[pre-commit.ci] pre-commit autoupdate :pr:<code>514</code> - by
:user:<code>pre-commit-ci[bot]</code></li>
</ul>
<hr />
<p>3.25.2 (2026-03-11)</p>
<hr />
<ul>
<li>🐛 fix(unix): suppress EIO on close in Docker bind mounts
:pr:<code>513</code></li>
</ul>
<hr />
<p>3.25.1 (2026-03-09)</p>
<hr />
<ul>
<li>[pre-commit.ci] pre-commit autoupdate :pr:<code>510</code> - by
:user:<code>pre-commit-ci[bot]</code></li>
<li>🐛 fix(win): restore best-effort lock file cleanup on release
:pr:<code>511</code></li>
<li>[pre-commit.ci] pre-commit autoupdate :pr:<code>508</code> - by
:user:<code>pre-commit-ci[bot]</code></li>
<li>📝 docs(logo): add branded project logo :pr:<code>507</code></li>
</ul>
<hr />
<p>3.25.0 (2026-03-01)</p>
<hr />
<ul>
<li>✨ feat(async): add AsyncReadWriteLock :pr:<code>506</code></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/tox-dev/filelock/commit/55de20c0819652362881906fa289feff5a323c19"><code>55de20c</code></a>
Release 3.28.0</li>
<li><a
href="https://github.com/tox-dev/filelock/commit/476b0e4a92776fe530b5d993247342f039004174"><code>476b0e4</code></a>
🐛 fix(ci): unbreak release workflow, publish to PyPI again (<a
href="https://redirect.github.com/tox-dev/py-filelock/issues/529">#529</a>)</li>
<li><a
href="https://github.com/tox-dev/filelock/commit/824713edc32b54efd66566907f97c1238502810e"><code>824713e</code></a>
✨ feat(rw): add SoftReadWriteLock for NFS and HPC clusters (<a
href="https://redirect.github.com/tox-dev/py-filelock/issues/528">#528</a>)</li>
<li><a
href="https://github.com/tox-dev/filelock/commit/9879de9298db93ffba0a9f58d9de75e9e2a00fc1"><code>9879de9</code></a>
[pre-commit.ci] pre-commit autoupdate (<a
href="https://redirect.github.com/tox-dev/py-filelock/issues/527">#527</a>)</li>
<li><a
href="https://github.com/tox-dev/filelock/commit/4cfab498b6916f89be46152efa4a72e9731be98f"><code>4cfab49</code></a>
Release 3.26.1</li>
<li><a
href="https://github.com/tox-dev/filelock/commit/734c9f26e8107ad24886129fc68865f0b46cf71f"><code>734c9f2</code></a>
🐛 fix(asyncio): add <strong>exit</strong> to BaseAsyncFileLock and fix
<strong>del</strong> loop handli...</li>
<li><a
href="https://github.com/tox-dev/filelock/commit/c9f9cb4c63b69d1bcfbcf98fe7c8dc439f51d473"><code>c9f9cb4</code></a>
build(deps): bump pypa/gh-action-pypi-publish from 1.13.0 to 1.14.0 (<a
href="https://redirect.github.com/tox-dev/py-filelock/issues/525">#525</a>)</li>
<li><a
href="https://github.com/tox-dev/filelock/commit/ad728d72a3e492297208c16b7c0787f4bfb6ccd0"><code>ad728d7</code></a>
Release 3.26.0</li>
<li><a
href="https://github.com/tox-dev/filelock/commit/f8a9849d63f256229d7c6481081c5df58f63e2ba"><code>f8a9849</code></a>
✨ feat(soft): add PID inspection and lock breaking (<a
href="https://redirect.github.com/tox-dev/py-filelock/issues/524">#524</a>)</li>
<li><a
href="https://github.com/tox-dev/filelock/commit/fc53a83fa16c748b687e598f12540b876c642fce"><code>fc53a83</code></a>
[pre-commit.ci] pre-commit autoupdate (<a
href="https://redirect.github.com/tox-dev/py-filelock/issues/523">#523</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/tox-dev/py-filelock/compare/3.25.2...3.28.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=filelock&package-manager=pip&previous-version=3.25.2&new-version=3.28.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [packaging](https://github.com/pypa/packaging) from 26.0 to 26.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/pypa/packaging/releases">packaging's
releases</a>.</em></p>
<blockquote>
<h2>26.1</h2>
<p>Features:</p>
<ul>
<li><del>PEP 783: add handling for Emscripten wheel tags by <a
href="https://github.com/hoodmane"><code>@​hoodmane</code></a> in <a
href="https://redirect.github.com/pypa/packaging/pull/804">pypa/packaging#804</a></del>
(old name used in implementation, will be fixed in next release)</li>
<li>PEP 803: add handling for the <code>abi3.abi3t</code> free-threading
tag by <a
href="https://github.com/ngoldbaum"><code>@​ngoldbaum</code></a> in <a
href="https://redirect.github.com/pypa/packaging/pull/1099">pypa/packaging#1099</a></li>
<li>PEP 723: add <code>packaging.dependency_groups</code> module, based
on the <code>dependency-groups</code> package by <a
href="https://github.com/sirosen"><code>@​sirosen</code></a> in <a
href="https://redirect.github.com/pypa/packaging/pull/1065">pypa/packaging#1065</a></li>
<li>Add the <code>packaging.direct_url</code> module by <a
href="https://github.com/sbidoul"><code>@​sbidoul</code></a> in <a
href="https://redirect.github.com/pypa/packaging/pull/944">pypa/packaging#944</a></li>
<li>Add the <code>packaging.errors</code> module by <a
href="https://github.com/henryiii"><code>@​henryiii</code></a> in <a
href="https://redirect.github.com/pypa/packaging/pull/1071">pypa/packaging#1071</a></li>
<li>Add <code>SpecifierSet.is_unsatisfiable</code> using ranges (new
internals that will be expanded in future versions) by <a
href="https://github.com/notatallshaw"><code>@​notatallshaw</code></a>
in <a
href="https://redirect.github.com/pypa/packaging/pull/1119">pypa/packaging#1119</a></li>
<li>Add <code>create_compatible_tags_selector</code> to select
compatible tags by <a
href="https://github.com/sbidoul"><code>@​sbidoul</code></a> in <a
href="https://redirect.github.com/pypa/packaging/pull/1110">pypa/packaging#1110</a></li>
<li>Add a <code>key</code> argument to
<code>SpecifierSet.filter()</code> by <a
href="https://github.com/frostming"><code>@​frostming</code></a> in <a
href="https://redirect.github.com/pypa/packaging/pull/1068">pypa/packaging#1068</a></li>
<li>Support <code>&amp;</code> and <code>|</code> for
<code>Marker</code>'s by <a
href="https://github.com/henryiii"><code>@​henryiii</code></a> in <a
href="https://redirect.github.com/pypa/packaging/pull/1146">pypa/packaging#1146</a></li>
<li>Normalize <code>Version.__replace__</code> and add
<code>Version.from_parts</code> by <a
href="https://github.com/henryiii"><code>@​henryiii</code></a> in <a
href="https://redirect.github.com/pypa/packaging/pull/1078">pypa/packaging#1078</a></li>
<li>Add an option to validate compressed tag set sort order in
<code>parse_wheel_filename</code> by <a
href="https://github.com/r266-tech"><code>@​r266-tech</code></a> in <a
href="https://redirect.github.com/pypa/packaging/pull/1150">pypa/packaging#1150</a></li>
</ul>
<p>Behavior adaptations:</p>
<ul>
<li>Narrow exclusion of pre-releases for <code>&lt;V.postN</code> to
match spec by <a
href="https://github.com/notatallshaw"><code>@​notatallshaw</code></a>
in <a
href="https://redirect.github.com/pypa/packaging/pull/1140">pypa/packaging#1140</a></li>
<li>Narrow exclusion of post-releases for <code>&gt;V</code> to match
spec by <a
href="https://github.com/notatallshaw"><code>@​notatallshaw</code></a>
in <a
href="https://redirect.github.com/pypa/packaging/pull/1141">pypa/packaging#1141</a></li>
<li>Rename <code>format_full_version</code> to
<code>_format_full_version</code> to make it visibly private by <a
href="https://github.com/r266-tech"><code>@​r266-tech</code></a> in <a
href="https://redirect.github.com/pypa/packaging/pull/1125">pypa/packaging#1125</a></li>
<li>Restrict local version to ASCII by <a
href="https://github.com/henryiii"><code>@​henryiii</code></a> in <a
href="https://redirect.github.com/pypa/packaging/pull/1102">pypa/packaging#1102</a></li>
</ul>
<p>Pylock (PEP 751) updates:</p>
<ul>
<li>Add pylock <code>select</code> function by <a
href="https://github.com/sbidoul"><code>@​sbidoul</code></a> in <a
href="https://redirect.github.com/pypa/packaging/pull/1092">pypa/packaging#1092</a></li>
<li>Document pylock <code>select()</code> method and
<code>PylockSelectError</code> by <a
href="https://github.com/r266-tech"><code>@​r266-tech</code></a> in <a
href="https://redirect.github.com/pypa/packaging/pull/1153">pypa/packaging#1153</a></li>
<li>Add <code>filename</code> property to <code>PackageSdist</code> and
<code>PackageWheel</code>, more validation by <a
href="https://github.com/sbidoul"><code>@​sbidoul</code></a> in <a
href="https://redirect.github.com/pypa/packaging/pull/1095">pypa/packaging#1095</a></li>
<li>Give preference to path over url by <a
href="https://github.com/sbidoul"><code>@​sbidoul</code></a> in <a
href="https://redirect.github.com/pypa/packaging/pull/1128">pypa/packaging#1128</a></li>
<li>Validate name/version consistency in file names by <a
href="https://github.com/sbidoul"><code>@​sbidoul</code></a> in <a
href="https://redirect.github.com/pypa/packaging/pull/1114">pypa/packaging#1114</a></li>
</ul>
<p>Fixes:</p>
<ul>
<li>Fix <code>&gt;</code> comparison for versions with dev+local
segments by <a
href="https://github.com/veeceey"><code>@​veeceey</code></a> in <a
href="https://redirect.github.com/pypa/packaging/pull/1097">pypa/packaging#1097</a></li>
<li>Fix incorrect self-comparison for <code>InfinityType</code> and
<code>NegativeInfinityType</code> by <a
href="https://github.com/bysiber"><code>@​bysiber</code></a> in <a
href="https://redirect.github.com/pypa/packaging/pull/1093">pypa/packaging#1093</a></li>
<li>Canonicalize when deduplicating specifiers in
<code>SpecifierSet</code> by <a
href="https://github.com/notatallshaw"><code>@​notatallshaw</code></a>
in <a
href="https://redirect.github.com/pypa/packaging/pull/1109">pypa/packaging#1109</a></li>
<li>Fix charset error message formatting by <a
href="https://github.com/notatallshaw"><code>@​notatallshaw</code></a>
in <a
href="https://redirect.github.com/pypa/packaging/pull/1121">pypa/packaging#1121</a></li>
<li>Handle the <code>key</code> parameter in
<code>SpecifierSet.filter</code> when specifiers are empty and
prerelease is <code>False</code> by <a
href="https://github.com/notatallshaw"><code>@​notatallshaw</code></a>
in <a
href="https://redirect.github.com/pypa/packaging/pull/1096">pypa/packaging#1096</a></li>
<li>Standardize inner components of <code>repr</code> output by <a
href="https://github.com/henryiii"><code>@​henryiii</code></a> in <a
href="https://redirect.github.com/pypa/packaging/pull/1090">pypa/packaging#1090</a></li>
<li><code>Specifier</code>'s <code>===</code> uses original string, not
normalized, when available by <a
href="https://github.com/notatallshaw"><code>@​notatallshaw</code></a>
in <a
href="https://redirect.github.com/pypa/packaging/pull/1124">pypa/packaging#1124</a></li>
<li>Propagate int-max-str-digits <code>ValueError</code> by <a
href="https://github.com/notatallshaw"><code>@​notatallshaw</code></a>
in <a
href="https://redirect.github.com/pypa/packaging/pull/1155">pypa/packaging#1155</a></li>
</ul>
<p>Performance:</p>
<ul>
<li>Add fast path for parsing simple versions (digits and dots only) by
<a
href="https://github.com/notatallshaw"><code>@​notatallshaw</code></a>
in <a
href="https://redirect.github.com/pypa/packaging/pull/1082">pypa/packaging#1082</a></li>
<li>Add fast path for <code>Version</code> to <code>Version</code>
comparison by skipping <code>_key</code> property by <a
href="https://github.com/notatallshaw"><code>@​notatallshaw</code></a>
in <a
href="https://redirect.github.com/pypa/packaging/pull/1083">pypa/packaging#1083</a></li>
<li>Cache <code>Version</code> hash value in dedicated slot by <a
href="https://github.com/notatallshaw"><code>@​notatallshaw</code></a>
in <a
href="https://redirect.github.com/pypa/packaging/pull/1118">pypa/packaging#1118</a></li>
<li>Overhaul <code>_cmpkey</code> to remove use of custom objects by <a
href="https://github.com/notatallshaw"><code>@​notatallshaw</code></a>
in <a
href="https://redirect.github.com/pypa/packaging/pull/1116">pypa/packaging#1116</a></li>
<li>Skip <code>__replace__</code> in Specifier comparison if not needed
by <a
href="https://github.com/notatallshaw"><code>@​notatallshaw</code></a>
in <a
href="https://redirect.github.com/pypa/packaging/pull/1081">pypa/packaging#1081</a></li>
<li><code>SpecifierSet</code> use <code>tuple</code> instead of
<code>frozenset</code> for <code>_specs</code> by <a
href="https://github.com/notatallshaw"><code>@​notatallshaw</code></a>
in <a
href="https://redirect.github.com/pypa/packaging/pull/1108">pypa/packaging#1108</a></li>
<li>Speed up complex <code>SpecifierSet</code> filtering by implementing
cost-based ordering by <a
href="https://github.com/notatallshaw"><code>@​notatallshaw</code></a>
in <a
href="https://redirect.github.com/pypa/packaging/pull/1105">pypa/packaging#1105</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/pypa/packaging/blob/main/CHANGELOG.rst">packaging's
changelog</a>.</em></p>
<blockquote>
<p>26.1 - 2026-04-14</p>
<pre><code>
Features:
<ul>
<li>PEP 783: add handling for Emscripten wheel tags in
(:pull:<code>804</code>)</li>
<li>PEP 803: add handling for the <code>abi3.abi3t</code> free-threading
tag in (:pull:<code>1099</code>)</li>
<li>PEP 723: add <code>packaging.dependency_groups</code> module, based
on the <code>dependency-groups</code> package in
(:pull:<code>1065</code>)</li>
<li>Add the <code>packaging.direct_url</code> module in
(:pull:<code>944</code>)</li>
<li>Add the <code>packaging.errors</code> module in
(:pull:<code>1071</code>)</li>
<li>Add <code>SpecifierSet.is_unsatisfiable</code> using ranges (new
internals that will be expanded in future versions) in
(:pull:<code>1119</code>)</li>
<li>Add <code>create_compatible_tags_selector</code> to select
compatible tags in (:pull:<code>1110</code>)</li>
<li>Add a <code>key</code> argument to
<code>SpecifierSet.filter()</code> in (:pull:<code>1068</code>)</li>
<li>Support <code>&amp;amp;</code> and <code>|</code> for
<code>Marker</code>'s in (:pull:<code>1146</code>)</li>
<li>Normalize <code>Version.__replace__</code> and add
<code>Version.from_parts</code> in (:pull:<code>1078</code>)</li>
<li>Add an option to validate compressed tag set sort order in
<code>parse_wheel_filename</code> in (:pull:<code>1150</code>)</li>
</ul>
<p>Behavior adaptations:</p>
<ul>
<li>Narrow exclusion of pre-releases for <code>&amp;lt;V.postN</code> to
match spec in (:pull:<code>1140</code>)</li>
<li>Narrow exclusion of post-releases for <code>&amp;gt;V</code> to
match spec in (:pull:<code>1141</code>)</li>
<li>Rename <code>format_full_version</code> to
<code>_format_full_version</code> to make it visibly private in
(:pull:<code>1125</code>)</li>
<li>Restrict local version to ASCII in (:pull:<code>1102</code>)</li>
</ul>
<p>Pylock (PEP 751) updates:</p>
<ul>
<li>Add pylock <code>select</code> function in
(:pull:<code>1092</code>)</li>
<li>Document pylock <code>select()</code> method and
<code>PylockSelectError</code> in (:pull:<code>1153</code>)</li>
<li>Add <code>filename</code> property to <code>PackageSdist</code> and
<code>PackageWheel</code>, more validation in
(:pull:<code>1095</code>)</li>
<li>Give preference to path over url in (:pull:<code>1128</code>)</li>
<li>Validate name/version consistency in file names in
(:pull:<code>1114</code>)</li>
</ul>
<p>Fixes:</p>
<ul>
<li>Fix <code>&amp;gt;</code> comparison for versions with dev+local
segments in (:pull:<code>1097</code>)</li>
<li>Fix incorrect self-comparison for <code>InfinityType</code> and
<code>NegativeInfinityType</code> in (:pull:<code>1093</code>)</li>
<li>Canonicalize when deduplicating specifiers in
<code>SpecifierSet</code> in (:pull:<code>1109</code>)</li>
<li>Fix charset error message formatting in
(:pull:<code>1121</code>)</li>
<li>Handle the <code>key</code> parameter in
<code>SpecifierSet.filter</code> when specifiers are empty and
prerelease is <code>False</code> in (:pull:<code>1096</code>)</li>
<li>Standardize inner components of <code>repr</code> output in
(:pull:<code>1090</code>)</li>
<li><code>Specifier</code>'s <code>===</code> uses original string, not
normalized, when available in (:pull:<code>1124</code>)</li>
<li>Propagate int-max-str-digits <code>ValueError</code> in
(:pull:<code>1155</code>)</li>
</ul>
<p>Performance:</p>
<ul>
<li>Add fast path for parsing simple versions (digits and dots only) in
(:pull:<code>1082</code>)</li>
<li>Add fast path for <code>Version</code> to <code>Version</code>
comparison by skipping <code>_key</code> property in
(:pull:<code>1083</code>)</li>
<li>Cache <code>Version</code> hash value in dedicated slot in
(:pull:<code>1118</code>)</li>
<li>Overhaul <code>_cmpkey</code> to remove use of custom objects in
(:pull:<code>1116</code>)</li>
<li>Skip <code>__replace__</code> in Specifier comparison if not needed
in (:pull:<code>1081</code>)<br />
&lt;/tr&gt;&lt;/table&gt;<br />
</code></pre></li>
</ul>
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/pypa/packaging/commit/c1a88a3e035e8bfe47dbc957f4a2493e8a7b4f3c"><code>c1a88a3</code></a>
Bump for release</li>
<li><a
href="https://github.com/pypa/packaging/commit/702c25ecc297054f9597acda987a75dd6833acf5"><code>702c25e</code></a>
docs: update changelog for 26.1 (<a
href="https://redirect.github.com/pypa/packaging/issues/1156">#1156</a>)</li>
<li><a
href="https://github.com/pypa/packaging/commit/3f4f5d46808f51709aba8341d4121f20752b3235"><code>3f4f5d4</code></a>
Implement <code>is_unsatisfiable</code> on <code>SpecifierSet</code>
using ranges (<a
href="https://redirect.github.com/pypa/packaging/issues/1119">#1119</a>)</li>
<li><a
href="https://github.com/pypa/packaging/commit/06c6555f44f0f7b84459c876375c5b1d52ee7fef"><code>06c6555</code></a>
Propagate int-max-str-digits ValueError (<a
href="https://redirect.github.com/pypa/packaging/issues/1155">#1155</a>)</li>
<li><a
href="https://github.com/pypa/packaging/commit/905c90c1eb8c77dede11899194ca4b0f5eaf188d"><code>905c90c</code></a>
feat: option to validate compressed tag set sort order in
`parse_wheel_filena...</li>
<li><a
href="https://github.com/pypa/packaging/commit/af0026cff97a8f28d165d6ac4afb58b2cdc8ffc5"><code>af0026c</code></a>
docs(pylock): document select() method and PylockSelectError (<a
href="https://redirect.github.com/pypa/packaging/issues/1153">#1153</a>)</li>
<li><a
href="https://github.com/pypa/packaging/commit/668da8662a112036e4850b68980790cb2d10dae9"><code>668da86</code></a>
Rename format_full_version to _format_full_version to make it visibly
private...</li>
<li><a
href="https://github.com/pypa/packaging/commit/f294d529e2634798a98fd9cee6708307a5c1792c"><code>f294d52</code></a>
tests: do not reload the tags module (<a
href="https://redirect.github.com/pypa/packaging/issues/1152">#1152</a>)</li>
<li><a
href="https://github.com/pypa/packaging/commit/2c6c7dfa2d406e44b91f3f8d26eeed72437c9435"><code>2c6c7df</code></a>
feat: add handling for Emscripten wheels tags per PEP 783 (<a
href="https://redirect.github.com/pypa/packaging/issues/804">#804</a>)</li>
<li><a
href="https://github.com/pypa/packaging/commit/6762eea4de40da02c119d02cc77c907c6b446b86"><code>6762eea</code></a>
docs(markers): document &amp; and | operators for combining Marker
objects (<a
href="https://redirect.github.com/pypa/packaging/issues/1151">#1151</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/pypa/packaging/compare/26.0...26.1">compare
view</a></li>
</ul>
</details>
<br />

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
@pull pull bot locked and limited conversation to collaborators Apr 15, 2026
@pull pull bot added the ⤵️ pull label Apr 15, 2026
@pull pull bot merged commit 995ae8a into tj-python:master Apr 15, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants