From dd848196252de5a6976b9f74875e53dfb72c1aa0 Mon Sep 17 00:00:00 2001 From: Pepijn Date: Fri, 10 Apr 2026 14:42:26 +0200 Subject: [PATCH] fix(docker): use uv pip install instead of uv sync (cross-extra conflict) uv sync --locked validates the entire lockfile across all extras. Since robomme depends on mani-skill which pins numpy<2.0, and the base project requires numpy>=2.0, the full lockfile is unsatisfiable. Switch to uv pip install -e ".[libero,smolvla]" which only resolves the requested extras for the current Python version and platform, avoiding the cross-extra numpy conflict entirely. Co-Authored-By: Claude Opus 4.6 (1M context) --- docker/Dockerfile.benchmark.libero | 6 +++++- docker/Dockerfile.benchmark.metaworld | 4 +++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/docker/Dockerfile.benchmark.libero b/docker/Dockerfile.benchmark.libero index 9037fd87e..a16179c7d 100644 --- a/docker/Dockerfile.benchmark.libero +++ b/docker/Dockerfile.benchmark.libero @@ -64,10 +64,14 @@ RUN uv venv --python python${PYTHON_VERSION} # ── Dependency layer (cached unless pyproject.toml / uv.lock change) ──────── # Copy only the files uv needs to resolve deps, plus a minimal package stub # so the editable install can succeed without the full source tree. +# Uses `uv pip install` instead of `uv sync` because uv sync validates the +# entire lockfile across all extras — robomme's numpy<2.0 conflicts with the +# base numpy>=2.0, making the full lockfile unsatisfiable. pip-style install +# only resolves the requested extras for the current platform. COPY --chown=user_lerobot:user_lerobot setup.py pyproject.toml uv.lock README.md MANIFEST.in ./ RUN mkdir -p src/lerobot && touch src/lerobot/__init__.py src/lerobot/py.typed -RUN uv sync --locked --extra libero --extra smolvla --no-cache +RUN uv pip install --no-cache -e ".[libero,smolvla]" # Pre-download lerobot/libero-assets from HF Hub so nothing is fetched at # runtime (which times out on CI). Point the libero config at the cached path. diff --git a/docker/Dockerfile.benchmark.metaworld b/docker/Dockerfile.benchmark.metaworld index fd4ebd142..f6a61e1b4 100644 --- a/docker/Dockerfile.benchmark.metaworld +++ b/docker/Dockerfile.benchmark.metaworld @@ -64,10 +64,12 @@ RUN uv venv --python python${PYTHON_VERSION} # ── Dependency layer (cached unless pyproject.toml / uv.lock change) ──────── # Copy only the files uv needs to resolve deps, plus a minimal package stub # so the editable install can succeed without the full source tree. +# Uses `uv pip install` instead of `uv sync` — see Dockerfile.benchmark.libero +# for rationale (cross-extra numpy conflict with robomme). COPY --chown=user_lerobot:user_lerobot setup.py pyproject.toml uv.lock README.md MANIFEST.in ./ RUN mkdir -p src/lerobot && touch src/lerobot/__init__.py src/lerobot/py.typed -RUN uv sync --locked --extra metaworld --extra smolvla --no-cache +RUN uv pip install --no-cache -e ".[metaworld,smolvla]" # Workaround: Triton ships ptxas without the execute bit set. # Without this chmod, any JIT compilation (e.g. torch.compile) fails