Bug: PythonUvBuilder does not target Lambda manylinux compatibility
Maintainer antworten meist innerhalb von 6 Tagen
Bewertung
- Schwierigkeit
- 3/5
- Geschätzter Aufwand
- 1-2 Tage
- Anfängerfreundlichkeit
- 70/100
Rechercherichtung
Start by reading the PythonUvBuilder and UvRunner code that constructs the uv pip install platform target; the issue identifies the python_uv workflow and gives a local wheel reproduction. Check how Python runtime version and architecture map to Lambda's AL2 and AL2023 glibc compatibility, then run the reproduction for both architectures and runtime groups. Done means the Python 3.12+ case selects manylinux_2_34, the Python 3.8–3.11 case targets AL2 compatibility, and the incompatible wheel is rejected.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Description
PythonUvBuilder passes x86_64-unknown-linux-gnu or aarch64-unknown-linux-gnu to uv pip install for every Python runtime. These generic targets do not encode Lambda's runtime-specific manylinux compatibility.
On Windows with uv 0.11.26, I reproduced both:
python3.11: given wheels taggedmanylinux_2_17andmanylinux_2_28, the builder selects the latter. Lambda's AL2 runtime has glibc 2.26, so a wheel requiring 2.28 is incompatible.python3.12: given wheels taggedmanylinux_2_34andmanylinux_2_35, the builder fails to find a compatible wheel, even though Lambda's AL2023 runtime supports glibc 2.34. Usingx86_64-manylinux_2_34selects the correct wheel.
The same results reproduce for arm64. The fixtures below test wheel selection using valid wheel metadata; they do not require compiling or loading a native extension.
Steps to reproduce
Run with aws-lambda-builders 1.68.0 and uv installed. This example exercises the Python 3.12 failure using local wheels only:
import os
from pathlib import Path
from tempfile import TemporaryDirectory
from zipfile import ZipFile
from aws_lambda_builders.workflows.python_uv.packager import UvRunner
with TemporaryDirectory() as directory:
root = Path(directory)
wheels = root / "wheels"
wheels.mkdir()
for minor in (34, 35):
tag = f"py3-none-manylinux_2_{minor}_x86_64"
with ZipFile(wheels / f"platform_demo-1.0.0-{tag}.whl", "w") as wheel:
wheel.writestr("platform_demo.py", f"GLIBC_MINOR = {minor}\n")
wheel.writestr("platform_demo-1.0.0.dist-info/METADATA",
"Metadata-Version: 2.1\nName: platform-demo\nVersion: 1.0.0\n")
wheel.writestr("platform_demo-1.0.0.dist-info/WHEEL",
f"Wheel-Version: 1.0\nRoot-Is-Purelib: false\nTag: {tag}\n")
wheel.writestr("platform_demo-1.0.0.dist-info/RECORD", "")
manifest = root / "requirements.txt"
manifest.write_text("platform-demo==1.0.0\n", encoding="utf-8")
os.environ.update(UV_NO_INDEX="1", UV_OFFLINE="1", UV_FIND_LINKS=wheels.as_uri())
UvRunner().install_requirements(
str(manifest), str(root / "artifacts"),
python_version="3.12", platform="linux", architecture="x86_64",
)
Observed result
UvInstallationError: ... platform-demo==1.0.0 has no wheels with a matching platform tag (e.g., manylinux_2_28_x86_64)
Expected result
Select the glibc 2.34 wheel for Python 3.12+, reject the 2.35 wheel, and use AL2-compatible targeting for Python 3.8-3.11. The selection should follow the Lambda runtime and architecture rather than generic GNU/Linux defaults.
AWS documents the glibc 2.26 / 2.34 runtime boundary. UV supports explicit manylinux targets.
Environment and related work
- Windows, Python 3.13.3, uv 0.11.26
- aws-lambda-builders 1.68.0, upstream commit
e3e14536501e38b0d6d8db582ddec6d0e0bd6f8a - Reproduced through
LambdaBuilder.build()for both architectures and both experimental-flag settings. - #700, #752, and #762 concern
python_pip; this report concerns the separatepython_uvcommand construction. I checked the open/closed issue and PR history for an existing UV fix.
- Vorherrschende Sprache
- Python
- Sterne
- 381
- Forks
- 161
- Ø Merge
- 5 T. 14 Std.
- Gemergte PRs (30 T.)
- 3
Entwicklungsumgebung
- Kein Dockerfile und keine Docker-Compose-Datei
- Hat eine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus aws/aws-lambda-builders
-
Bug: PythonUvBuilder resolves local requirements from the caller directoryEvtl. vergeben @vinsymoyya hat das vor 2 Tagen übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
aws/aws-lambda-builders#952 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 6 Tagen
-
python_uv: `UvConfig.compile_bytecode` is never passed to uv, so the option has no effectEvtl. vergeben @xujiantop-crypto hat das vor 52 Tagen übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 76/100
aws/aws-lambda-builders#925 · 1 Reaktion ·
Maintainer antworten meist innerhalb von 6 Tagen
-
Bytecode compiled during build is always discarded at runtime: SAM packaging writes 1980 timestamps, so timestamp-based .pyc never validateEvtl. vergeben @xujiantop-crypto hat das vor 52 Tagen übernommen. Offen
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 64/100
aws/aws-lambda-builders#924 · 1 Kommentar · 1 Reaktion ·
Maintainer antworten meist innerhalb von 6 Tagen
-
Bug: PythonUvBuilder fails to build app with dependencies on editable installs in the workspaceEvtl. vergeben @noritada hat das vor 121 Tagen übernommen. Offenstage/needs-triage
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 25/100
aws/aws-lambda-builders#892 ·
Maintainer antworten meist innerhalb von 6 Tagen
-
Feature request: Add native uv support and configurationEvtl. vergeben Ein verknüpfter Pull Request ist offen oder bereits gemergt. Offenstage/needs-triage type/feature
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 38/100
aws/aws-lambda-builders#839 · 3 Kommentare · 1 Reaktion ·
Maintainer antworten meist innerhalb von 6 Tagen
Alle Issues in aws/aws-lambda-builders
Ähnliche Issues
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 82/100
aws-samples/sample-per-model-bedrock#795 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 74/100
Maintainer antworten meist innerhalb von 1 Tag
-
Pretalx reports older version to be the latest release than what is actually installed and availableOffen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 70/100
Maintainer antworten meist innerhalb von 1 Tag
-
bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 75/100
micropython/micropython#19906 ·
Maintainer antworten meist innerhalb von 1 Tag