https://github.com/python/cpython/commit/c46265d94a2d2c5bcaabbbc312f8f6ac9162cd5f
commit: c46265d94a2d2c5bcaabbbc312f8f6ac9162cd5f
branch: main
author: Steve Dower <[email protected]>
committer: zooba <[email protected]>
date: 2025-10-13T20:43:14+01:00
summary:
gh-139810: Always generate -dev tags for PyManager packages (GH-139814)
files:
A Misc/NEWS.d/next/Windows/2025-10-08-22-54-38.gh-issue-139810.LAaemi.rst
M PC/layout/support/pymanager.py
diff --git
a/Misc/NEWS.d/next/Windows/2025-10-08-22-54-38.gh-issue-139810.LAaemi.rst
b/Misc/NEWS.d/next/Windows/2025-10-08-22-54-38.gh-issue-139810.LAaemi.rst
new file mode 100644
index 00000000000000..55252f288b0a33
--- /dev/null
+++ b/Misc/NEWS.d/next/Windows/2025-10-08-22-54-38.gh-issue-139810.LAaemi.rst
@@ -0,0 +1,2 @@
+Installing with ``py install 3[.x]-dev`` will now select final versions as
+well as prereleases.
diff --git a/PC/layout/support/pymanager.py b/PC/layout/support/pymanager.py
index 667c89cdd2cc7a..831d49ea3f9b46 100644
--- a/PC/layout/support/pymanager.py
+++ b/PC/layout/support/pymanager.py
@@ -80,7 +80,9 @@ def calculate_install_json(ns, *, for_embed=False,
for_test=False):
# Tag used in runtime ID (for side-by-side install/updates)
ID_TAG = XY_ARCH_TAG
- # Tag shown in 'py list' output
+ # Tag shown in 'py list' output.
+ # gh-139810: We only include '-dev' here for prereleases, even though it
+ # works for final releases too.
DISPLAY_TAG = f"{XY_TAG}-dev{TAG_ARCH}" if VER_SUFFIX else XY_ARCH_TAG
# Tag used for PEP 514 registration
SYS_WINVER = XY_TAG + (TAG_ARCH if TAG_ARCH != '-64' else '')
@@ -102,9 +104,10 @@ def calculate_install_json(ns, *, for_embed=False,
for_test=False):
FULL_ARCH_TAG,
XY_ARCH_TAG,
X_ARCH_TAG,
- # X_TAG and XY_TAG doesn't include VER_SUFFIX, so create -dev versions
- f"{XY_TAG}-dev{TAG_ARCH}" if XY_TAG and VER_SUFFIX else "",
- f"{X_TAG}-dev{TAG_ARCH}" if X_TAG and VER_SUFFIX else "",
+ # gh-139810: The -dev tags are always included so that the latest
+ # release is chosen, no matter whether it's prerelease or final.
+ f"{XY_TAG}-dev{TAG_ARCH}" if XY_TAG else "",
+ f"{X_TAG}-dev{TAG_ARCH}" if X_TAG else "",
]
# Generate run-for entries for each target.
@@ -115,16 +118,15 @@ def calculate_install_json(ns, *, for_embed=False,
for_test=False):
]:
if not base["target"]:
continue
- STD_RUN_FOR.append({**base, "tag": FULL_ARCH_TAG})
+ STD_RUN_FOR.extend([
+ {**base, "tag": FULL_ARCH_TAG},
+ {**base, "tag": f"{XY_TAG}-dev{TAG_ARCH}" if XY_TAG else ""},
+ {**base, "tag": f"{X_TAG}-dev{TAG_ARCH}" if X_TAG else ""},
+ ])
if XY_TAG:
STD_RUN_FOR.append({**base, "tag": XY_ARCH_TAG})
if X_TAG:
STD_RUN_FOR.append({**base, "tag": X_ARCH_TAG})
- if VER_SUFFIX:
- STD_RUN_FOR.extend([
- {**base, "tag": f"{XY_TAG}-dev{TAG_ARCH}" if XY_TAG else ""},
- {**base, "tag": f"{X_TAG}-dev{TAG_ARCH}" if X_TAG else ""},
- ])
# Generate alias entries for each target. We need both arch and non-arch
# versions as well as windowed/non-windowed versions to make sure that all
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]