Bug: PythonUvBuilder resolves local requirements from the caller directory

Offen Anfängerfreundlich
#952 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Maintainer antworten meist innerhalb von 6 Tagen

@vinsymoyya arbeitet bereits daran.

Seit 05.11.2026.

  • #953 von @vinsymoyya — offen

Bewertung

Schwierigkeit
2/5
Geschätzter Aufwand
1-3 Stunden
Anfängerfreundlichkeit
78/100
Issue-Typ
Bug
Klarheit
Klar beschrieben
Aktivitätsstatus
Aktiv
Tech-Stack
python
Bereich
build-system

Rechercherichtung

Beginne in aws_lambda_builders.workflows.python_uv.packager bei PythonUvDependencyBuilder.build_dependencies und vergleiche dann den Build-Pfad für requirements mit dem pyproject-Build-Pfad, der ein Arbeitsverzeichnis bereitstellt. Reproduziere den Fehler mit dem im Issue beschriebenen lokalen Wheel und requirements.txt, indem du den Build außerhalb des Funktionsverzeichnisses ausführst. Das Ziel ist erreicht, wenn das Wheel relativ zum Manifest aufgelöst und sein Modul in das angeforderte Artefaktverzeichnis geschrieben wird.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

Description

PythonUvBuilder resolves relative wheel and local package paths in a requirements manifest against the process working directory, rather than the manifest directory. A function with a vendored wheel therefore fails when built from its parent directory. The pyproject build path already supplies a working directory to uv; the requirements build path does not.

Steps to reproduce

With aws-lambda-builders 1.68.0 and uv installed, run this from outside the temporary function directory:

from pathlib import Path
from tempfile import TemporaryDirectory
from zipfile import ZipFile
from aws_lambda_builders.workflows.python_uv.packager import PythonUvDependencyBuilder

with TemporaryDirectory() as directory:
    root = Path(directory)
    app = root / "function"
    app.mkdir()
    wheel = app / "local_demo-1.0.0-py3-none-any.whl"
    with ZipFile(wheel, "w") as archive:
        archive.writestr("local_demo.py", "VALUE = 42\n")
        archive.writestr("local_demo-1.0.0.dist-info/METADATA",
                        "Metadata-Version: 2.1\nName: local-demo\nVersion: 1.0.0\n")
        archive.writestr("local_demo-1.0.0.dist-info/WHEEL",
                        "Wheel-Version: 1.0\nRoot-Is-Purelib: true\nTag: py3-none-any\n")
        archive.writestr("local_demo-1.0.0.dist-info/RECORD", "")
    manifest = app / "requirements.txt"
    manifest.write_text(f"./{wheel.name}\n", encoding="utf-8")
    target, scratch = root / "artifacts", root / "scratch"
    target.mkdir()
    scratch.mkdir()
    PythonUvDependencyBuilder(runtime="python3.13").build_dependencies(
        str(target), str(scratch), str(manifest)
    )
Observed result

UvBuildError: ... UV pip install failed: ... Distribution not found at: file:///<caller-directory>/local_demo-1.0.0-py3-none-any.whl

The wheel exists in function/; it is looked up outside that directory. This also reproduces through LambdaBuilder.build() with either absolute or relative build paths.

Expected result

Install the local wheel from the requirements manifest's directory and write its module into the requested artifact directory, independently of the caller's working directory.

Environment
  • Windows, Python 3.13.3, uv 0.11.26
  • aws-lambda-builders 1.68.0, develop commit e3e14536501e38b0d6d8db582ddec6d0e0bd6f8a
  • Reproduction uses a local wheel only; no AWS account or package index is needed.

I checked the open and closed issue/PR history. #887 addresses workspace-root discovery for pyproject builds; this reproduction uses only requirements.txt and no workspace.

Vorherrschende Sprache
Python
Sterne
381
Forks
161
Ø Merge
5 T. 14 Std.
Gemergte PRs (30 T.)
3

Entwicklungsumgebung

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus aws/aws-lambda-builders

Alle Issues in aws/aws-lambda-builders

Ähnliche Issues

Weitere Issues zu Python

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.