Bug: PythonUvBuilder resolves local requirements from the caller directory

Aberta Para iniciantes
#952 1 comentário 0 reações 0 responsáveis Ver no GitHub

Mantenedores costumam responder em até 6 dias

@vinsymoyya já está trabalhando nisso.

Desde 5/11/2026.

  • #953 de @vinsymoyya — aberto

Avaliação

Dificuldade
2/5
Tempo estimado
1-3 horas
Facilidade para iniciantes
78/100
Tipo de issue
Bug
Clareza
Claramente especificada
Status de atividade
Ativa
Stack de tecnologia
python
Domínio
build-system

Direção de pesquisa

Comece em aws_lambda_builders.workflows.python_uv.packager, em PythonUvDependencyBuilder.build_dependencies, e depois compare o caminho de build de requirements com o caminho de build de pyproject, que fornece um diretório de trabalho. Reproduza o problema com o wheel local e requirements.txt descritos na issue, executando o build de fora do diretório da função. O objetivo é que o wheel seja resolvido em relação ao manifesto e que seu módulo seja gravado no diretório de artefatos solicitado.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

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.

Linguagem predominante
Python
Estrelas
381
Forks
161
Merge médio
5d 14h
PRs com merge (30d)
3

Preparar o ambiente

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de aws/aws-lambda-builders

Todas as issues de aws/aws-lambda-builders

Issues semelhantes

Mais issues de Python

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.