Skip to content

Commit 1dc513f

Browse files
committed
Prefer optimized builds for freethreaded Python downloads
1 parent c683191 commit 1dc513f

File tree

3 files changed

+40
-22
lines changed

3 files changed

+40
-22
lines changed

crates/uv-python/download-metadata.json

+6-6
Original file line numberDiff line numberDiff line change
@@ -151,8 +151,8 @@
151151
"minor": 13,
152152
"patch": 0,
153153
"prerelease": "",
154-
"url": "https://github.com/indygreg/python-build-standalone/releases/download/20241008/cpython-3.13.0%2B20241008-aarch64-apple-darwin-freethreaded%2Bdebug-full.tar.zst",
155-
"sha256": "4ba7f477c56af4f057ca40535aa6907662b7206e3b8b39971d0a507b1c955e44",
154+
"url": "https://github.com/indygreg/python-build-standalone/releases/download/20241008/cpython-3.13.0%2B20241008-aarch64-apple-darwin-freethreaded%2Bpgo%2Blto-full.tar.zst",
155+
"sha256": "8cc1586c4ee730bb33b7e6d39f1b6388f895075fadb1771e3c27b0561abb9242",
156156
"variant": "freethreaded"
157157
},
158158
"cpython-3.13.0+freethreaded-darwin-x86_64-none": {
@@ -164,8 +164,8 @@
164164
"minor": 13,
165165
"patch": 0,
166166
"prerelease": "",
167-
"url": "https://github.com/indygreg/python-build-standalone/releases/download/20241008/cpython-3.13.0%2B20241008-x86_64-apple-darwin-freethreaded%2Bdebug-full.tar.zst",
168-
"sha256": "b72b7df7cd22a4e7462dbe95633c5ca61caab41237d68e0ff89e9774cd4985e7",
167+
"url": "https://github.com/indygreg/python-build-standalone/releases/download/20241008/cpython-3.13.0%2B20241008-x86_64-apple-darwin-freethreaded%2Bpgo%2Blto-full.tar.zst",
168+
"sha256": "117528b68096379b1303faee1f4f9e32ef3d255207ec92fb063f1bd0b942549d",
169169
"variant": "freethreaded"
170170
},
171171
"cpython-3.13.0+freethreaded-linux-aarch64-gnu": {
@@ -242,8 +242,8 @@
242242
"minor": 13,
243243
"patch": 0,
244244
"prerelease": "",
245-
"url": "https://github.com/indygreg/python-build-standalone/releases/download/20241008/cpython-3.13.0%2B20241008-x86_64-unknown-linux-gnu-freethreaded%2Bdebug-full.tar.zst",
246-
"sha256": "2b46a0f38711cfcdffab90f69ea1372288bd6dcb0f9676b765babb491d42ce06",
245+
"url": "https://github.com/indygreg/python-build-standalone/releases/download/20241008/cpython-3.13.0%2B20241008-x86_64-unknown-linux-gnu-freethreaded%2Bpgo%2Blto-full.tar.zst",
246+
"sha256": "00a159a64640ce614bdac064b270a9854d86d40d1d8387a822daf1fe0881e64b",
247247
"variant": "freethreaded"
248248
},
249249
"cpython-3.13.0+freethreaded-windows-i686-none": {

crates/uv-python/fetch-download-metadata.py

+28-10
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
import logging
5151
import os
5252
import re
53-
from dataclasses import dataclass
53+
from dataclasses import dataclass, field
5454
from enum import StrEnum
5555
from pathlib import Path
5656
from typing import Generator, Iterable, NamedTuple, Self
@@ -120,6 +120,7 @@ class PythonDownload:
120120
filename: str
121121
url: str
122122
sha256: str | None = None
123+
build_options: list[str] = field(default_factory=list)
123124
variant: Variant | None = None
124125

125126
def key(self) -> str:
@@ -211,14 +212,14 @@ async def _fetch_downloads(self, pages: int = 100) -> list[PythonDownload]:
211212
download
212213
)
213214

214-
# Collapse CPython variants to a single URL flavor per triple and variant
215+
# Collapse CPython variants to a single flavor per triple and variant
215216
downloads = []
216217
for version_downloads in downloads_by_version.values():
217218
selected: dict[
218219
tuple[PlatformTriple, Variant | None], tuple[PythonDownload, int]
219220
] = {}
220221
for download in version_downloads:
221-
priority = self._get_flavor_priority(download.flavor)
222+
priority = self._get_priority(download)
222223
existing = selected.get((download.triple, download.variant))
223224
if existing:
224225
existing_download, existing_priority = existing
@@ -301,10 +302,10 @@ def _parse_download_url(self, url: str) -> PythonDownload | None:
301302

302303
version, _date, triple, build_options, flavor = match.groups()
303304

304-
variants = build_options.split("+") if build_options else []
305+
build_options = build_options.split("+") if build_options else []
305306
variant: Variant | None
306307
for variant in Variant:
307-
if variant in variants:
308+
if variant in build_options:
308309
break
309310
else:
310311
variant = None
@@ -322,6 +323,7 @@ def _parse_download_url(self, url: str) -> PythonDownload | None:
322323
implementation=self.implementation,
323324
filename=filename,
324325
url=url,
326+
build_options=build_options,
325327
variant=variant,
326328
)
327329

@@ -355,13 +357,29 @@ def _normalize_arch(self, arch: str) -> str:
355357
def _normalize_os(self, os: str) -> str:
356358
return os
357359

358-
def _get_flavor_priority(self, flavor: str) -> int:
359-
"""Returns the priority of a flavor. Lower is better."""
360+
def _get_priority(self, download: PythonDownload) -> tuple[int, int]:
361+
"""
362+
Returns the priority of a download, a lower score is better.
363+
"""
364+
flavor_priority = self._flavor_priority(download.flavor)
365+
build_option_priority = self._build_option_priority(download.build_options)
366+
return (flavor_priority, build_option_priority)
367+
368+
def _flavor_priority(self, flavor: str) -> int:
360369
try:
361-
pref = self.FLAVOR_PREFERENCES.index(flavor)
370+
priority = self.FLAVOR_PREFERENCES.index(flavor)
362371
except ValueError:
363-
pref = len(self.FLAVOR_PREFERENCES) + 1
364-
return pref
372+
priority = len(self.FLAVOR_PREFERENCES) + 1
373+
return priority
374+
375+
def _build_option_priority(self, build_options: list[str]) -> int:
376+
# Prefer optimized builds
377+
return -1 * sum(
378+
(
379+
"lgo" in build_options,
380+
"pgo" in build_options,
381+
)
382+
)
365383

366384

367385
class PyPyFinder(Finder):

crates/uv-python/src/downloads.inc

+6-6
Original file line numberDiff line numberDiff line change
@@ -196,8 +196,8 @@ pub(crate) const PYTHON_DOWNLOADS: &[ManagedPythonDownload] = &[
196196
variant: PythonVariant::Freethreaded
197197

198198
},
199-
url: "https://github.com/indygreg/python-build-standalone/releases/download/20241008/cpython-3.13.0%2B20241008-aarch64-apple-darwin-freethreaded%2Bdebug-full.tar.zst",
200-
sha256: Some("4ba7f477c56af4f057ca40535aa6907662b7206e3b8b39971d0a507b1c955e44")
199+
url: "https://github.com/indygreg/python-build-standalone/releases/download/20241008/cpython-3.13.0%2B20241008-aarch64-apple-darwin-freethreaded%2Bpgo%2Blto-full.tar.zst",
200+
sha256: Some("8cc1586c4ee730bb33b7e6d39f1b6388f895075fadb1771e3c27b0561abb9242")
201201
},
202202
ManagedPythonDownload {
203203
key: PythonInstallationKey {
@@ -212,8 +212,8 @@ pub(crate) const PYTHON_DOWNLOADS: &[ManagedPythonDownload] = &[
212212
variant: PythonVariant::Freethreaded
213213

214214
},
215-
url: "https://github.com/indygreg/python-build-standalone/releases/download/20241008/cpython-3.13.0%2B20241008-x86_64-apple-darwin-freethreaded%2Bdebug-full.tar.zst",
216-
sha256: Some("b72b7df7cd22a4e7462dbe95633c5ca61caab41237d68e0ff89e9774cd4985e7")
215+
url: "https://github.com/indygreg/python-build-standalone/releases/download/20241008/cpython-3.13.0%2B20241008-x86_64-apple-darwin-freethreaded%2Bpgo%2Blto-full.tar.zst",
216+
sha256: Some("117528b68096379b1303faee1f4f9e32ef3d255207ec92fb063f1bd0b942549d")
217217
},
218218
ManagedPythonDownload {
219219
key: PythonInstallationKey {
@@ -308,8 +308,8 @@ pub(crate) const PYTHON_DOWNLOADS: &[ManagedPythonDownload] = &[
308308
variant: PythonVariant::Freethreaded
309309

310310
},
311-
url: "https://github.com/indygreg/python-build-standalone/releases/download/20241008/cpython-3.13.0%2B20241008-x86_64-unknown-linux-gnu-freethreaded%2Bdebug-full.tar.zst",
312-
sha256: Some("2b46a0f38711cfcdffab90f69ea1372288bd6dcb0f9676b765babb491d42ce06")
311+
url: "https://github.com/indygreg/python-build-standalone/releases/download/20241008/cpython-3.13.0%2B20241008-x86_64-unknown-linux-gnu-freethreaded%2Bpgo%2Blto-full.tar.zst",
312+
sha256: Some("00a159a64640ce614bdac064b270a9854d86d40d1d8387a822daf1fe0881e64b")
313313
},
314314
ManagedPythonDownload {
315315
key: PythonInstallationKey {

0 commit comments

Comments
 (0)