mirror of
https://github.com/huggingface/lerobot.git
synced 2026-05-22 03:59:42 +00:00
fix(docker): bypass uv extras chain bug in libero_plus Dockerfile
uv silently skips packages when resolving a nested extras chain (lerobot[libero_plus] -> lerobot[libero] -> hf-libero -> robosuite). POST-INSTALL grep confirmed robosuite absent after install despite uv reporting 'Resolved 113 packages, Installed 1'. Fix: install all libero_plus deps directly by name, bypassing the extras chain entirely. Also add --plain flag to build script for verbose output. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -14,15 +14,24 @@
|
|||||||
|
|
||||||
FROM lerobot-eval-base:latest
|
FROM lerobot-eval-base:latest
|
||||||
|
|
||||||
# Diagnostic: show what's in the venv before the libero_plus install
|
# Install libero_plus deps explicitly rather than via ".[libero_plus]" extras chain.
|
||||||
RUN echo "=== PRE-INSTALL ===" && uv pip list | grep -iE "robosuite|bddl|robomimic|hf.libero|scikit.image|wand" || echo "(none of the libero_plus-specific packages are installed)"
|
# uv has a bug where it considers packages "already resolved" when coming through
|
||||||
|
# a nested lerobot[libero] → lerobot[libero_plus] extras chain, silently skipping them.
|
||||||
|
RUN uv pip install --no-cache \
|
||||||
|
"hf-libero>=0.1.3,<0.2.0" \
|
||||||
|
"hf-egl-probe>=1.0.1" \
|
||||||
|
"transformers>=5.3.0,<6.0.0" \
|
||||||
|
"scipy>=1.14.0,<2.0.0" \
|
||||||
|
"bddl>=1.0.1,<2.0.0" \
|
||||||
|
"future" \
|
||||||
|
"easydict>=1.9" \
|
||||||
|
"wand" \
|
||||||
|
"scikit-image>=0.20.0" \
|
||||||
|
"gym>=0.25.0,<0.27.0"
|
||||||
|
|
||||||
RUN uv pip install --no-cache ".[libero_plus]" \
|
# Clone LIBERO-plus; install with --no-deps (runtime deps declared above via hf-libero).
|
||||||
&& echo "=== POST-INSTALL ===" && uv pip list | grep -iE "robosuite|bddl|robomimic" \
|
# Add .pth so the libero module can locate its data files at runtime.
|
||||||
# Clone LIBERO-plus; its setup.py has empty install_requires so deps come from the
|
RUN git clone --depth 1 https://github.com/sylvestf/LIBERO-plus.git /tmp/LIBERO-plus \
|
||||||
# lerobot[libero] extra above. Install the package to get LIBERO-plus environments,
|
|
||||||
# then add a .pth so the libero module can locate its data files at runtime.
|
|
||||||
&& git clone --depth 1 https://github.com/sylvestf/LIBERO-plus.git /tmp/LIBERO-plus \
|
|
||||||
&& uv pip install --no-cache --no-deps /tmp/LIBERO-plus \
|
&& uv pip install --no-cache --no-deps /tmp/LIBERO-plus \
|
||||||
&& python -c "import pathlib, site; pathlib.Path(site.getsitepackages()[0], 'libero_plus_repo.pth').write_text('/tmp/LIBERO-plus\n')" \
|
&& python -c "import pathlib, site; pathlib.Path(site.getsitepackages()[0], 'libero_plus_repo.pth').write_text('/tmp/LIBERO-plus\n')" \
|
||||||
&& python -c "import libero, robosuite, bddl"
|
&& python -c "import libero, robosuite, bddl"
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ PUSH=false
|
|||||||
HUB_ORG=""
|
HUB_ORG=""
|
||||||
BENCHMARKS="libero libero_plus robomme robocasa"
|
BENCHMARKS="libero libero_plus robomme robocasa"
|
||||||
NO_CACHE_BASE=false
|
NO_CACHE_BASE=false
|
||||||
|
PROGRESS="auto"
|
||||||
|
|
||||||
for arg in "$@"; do
|
for arg in "$@"; do
|
||||||
case "$arg" in
|
case "$arg" in
|
||||||
@@ -34,6 +35,7 @@ for arg in "$@"; do
|
|||||||
--hub_org=*) HUB_ORG="${arg#*=}" ;;
|
--hub_org=*) HUB_ORG="${arg#*=}" ;;
|
||||||
--benchmarks=*) BENCHMARKS="${arg#*=}" ;;
|
--benchmarks=*) BENCHMARKS="${arg#*=}" ;;
|
||||||
--no-cache-base) NO_CACHE_BASE=true ;;
|
--no-cache-base) NO_CACHE_BASE=true ;;
|
||||||
|
--plain) PROGRESS="plain" ;;
|
||||||
*) echo "Unknown arg: $arg"; exit 1 ;;
|
*) echo "Unknown arg: $arg"; exit 1 ;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
@@ -57,6 +59,7 @@ fi
|
|||||||
echo "=== Building lerobot-eval-base ==="
|
echo "=== Building lerobot-eval-base ==="
|
||||||
docker build \
|
docker build \
|
||||||
${BASE_CACHE_FLAG} \
|
${BASE_CACHE_FLAG} \
|
||||||
|
--progress="${PROGRESS}" \
|
||||||
-f "${SCRIPT_DIR}/Dockerfile.eval-base" \
|
-f "${SCRIPT_DIR}/Dockerfile.eval-base" \
|
||||||
-t lerobot-eval-base:latest \
|
-t lerobot-eval-base:latest \
|
||||||
"${REPO_ROOT}" || fail "lerobot-eval-base build failed"
|
"${REPO_ROOT}" || fail "lerobot-eval-base build failed"
|
||||||
@@ -80,6 +83,7 @@ for BENCHMARK in $BENCHMARKS; do
|
|||||||
echo ""
|
echo ""
|
||||||
echo "=== Building ${LOCAL_TAG} from $(basename ${DOCKERFILE}) ==="
|
echo "=== Building ${LOCAL_TAG} from $(basename ${DOCKERFILE}) ==="
|
||||||
docker build \
|
docker build \
|
||||||
|
--progress="${PROGRESS}" \
|
||||||
-f "${DOCKERFILE}" \
|
-f "${DOCKERFILE}" \
|
||||||
-t "${LOCAL_TAG}" \
|
-t "${LOCAL_TAG}" \
|
||||||
"${REPO_ROOT}" || fail "${LOCAL_TAG} build failed"
|
"${REPO_ROOT}" || fail "${LOCAL_TAG} build failed"
|
||||||
|
|||||||
Reference in New Issue
Block a user