Unverified Commit 07f082f5 authored by Mayank Mittal's avatar Mayank Mittal Committed by GitHub

Fixes `isaaclab` scripts to deal with Isaac Sim pip installation (#631)

# Description

Earlier the script hard-coded with path to Isaac Sim installation as the
sym-linked directory "_isaac_sim". However, when doing PIP installation,
this workflow doesn't hold. The MR modifies the scripts `isaaclab.sh`
and `isaaclab.bat` to now check for PIP package installation and get
paths from there if they exist.

Fixes #516, #629

## Type of change

- Bug fix (non-breaking change which fixes an issue)

## Checklist

- [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with
`./isaaclab.sh --format`
- [x] I have made corresponding changes to the documentation
- [ ] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] I have updated the changelog and the corresponding version in the
extension's `config/extension.toml` file
- [x] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there

---------
Signed-off-by: 's avatarMayank Mittal <12863862+Mayankm96@users.noreply.github.com>
Co-authored-by: 's avatarKelly Guo <kellyg@nvidia.com>
parent fccda6e0
...@@ -31,11 +31,11 @@ except ModuleNotFoundError or ImportError: ...@@ -31,11 +31,11 @@ except ModuleNotFoundError or ImportError:
# check if the isaac-sim directory exists # check if the isaac-sim directory exists
if not os.path.exists(isaacsim_dir): if not os.path.exists(isaacsim_dir):
raise FileNotFoundError( raise FileNotFoundError(
f"Could not find the isaac-sim directory: {isaacsim_dir}. There are two possible reasons for this:\n" f"Could not find the isaac-sim directory: {isaacsim_dir}. There are two possible reasons for this:"
"\t1. The Isaac Sim directory does not exist as a symlink in the Isaac Lab directory.\n" f"\n\t1. The Isaac Sim directory does not exist as a symlink at: {os.path.join(ISAACLAB_DIR, '_isaac_sim')}"
"\t2. The script could import the 'isaacsim' package. This could be due to the 'isaacsim' package not being " "\n\t2. The script could import the 'isaacsim' package. This could be due to the 'isaacsim' package not being "
"installed in the Python environment.\n" "installed in the Python environment.\n"
"Please make sure that the Isaac Sim directory exists or that the 'isaacsim' package is installed." "\nPlease make sure that the Isaac Sim directory exists or that the 'isaacsim' package is installed."
) )
ISAACSIM_DIR = isaacsim_dir ISAACSIM_DIR = isaacsim_dir
...@@ -48,27 +48,28 @@ def overwrite_python_analysis_extra_paths(isaaclab_settings: str) -> str: ...@@ -48,27 +48,28 @@ def overwrite_python_analysis_extra_paths(isaaclab_settings: str) -> str:
The extraPaths are replaced with the path names from the isaac-sim settings file that exists in the The extraPaths are replaced with the path names from the isaac-sim settings file that exists in the
"{ISAACSIM_DIR}/.vscode/settings.json" file. "{ISAACSIM_DIR}/.vscode/settings.json" file.
If the isaac-sim settings file does not exist, the extraPaths are not overwritten.
Args: Args:
isaaclab_settings: The settings string to use as template. isaaclab_settings: The settings string to use as template.
Returns: Returns:
The settings string with overwritten python analysis extra paths. The settings string with overwritten python analysis extra paths.
Raises:
FileNotFoundError: If the isaac-sim settings file does not exist.
""" """
# isaac-sim settings # isaac-sim settings
isaacsim_vscode_filename = os.path.join(ISAACSIM_DIR, ".vscode", "settings.json") isaacsim_vscode_filename = os.path.join(ISAACSIM_DIR, ".vscode", "settings.json")
# make sure the isaac-sim settings file exists
if not os.path.exists(isaacsim_vscode_filename):
raise FileNotFoundError(f"Could not find the isaac-sim settings file: {isaacsim_vscode_filename}")
# we use the isaac-sim settings file to get the python.analysis.extraPaths for kit extensions
# if this file does not exist, we will not add any extra paths
if os.path.exists(isaacsim_vscode_filename):
# read the path names from the isaac-sim settings file # read the path names from the isaac-sim settings file
with open(isaacsim_vscode_filename) as f: with open(isaacsim_vscode_filename) as f:
vscode_settings = f.read() vscode_settings = f.read()
# extract the path names # extract the path names
# search for the python.analysis.extraPaths section and extract the contents # search for the python.analysis.extraPaths section and extract the contents
settings = re.search(r"\"python.analysis.extraPaths\": \[.*?\]", vscode_settings, flags=re.MULTILINE | re.DOTALL) settings = re.search(
r"\"python.analysis.extraPaths\": \[.*?\]", vscode_settings, flags=re.MULTILINE | re.DOTALL
)
settings = settings.group(0) settings = settings.group(0)
settings = settings.split('"python.analysis.extraPaths": [')[-1] settings = settings.split('"python.analysis.extraPaths": [')[-1]
settings = settings.split("]")[0] settings = settings.split("]")[0]
...@@ -81,6 +82,15 @@ def overwrite_python_analysis_extra_paths(isaaclab_settings: str) -> str: ...@@ -81,6 +82,15 @@ def overwrite_python_analysis_extra_paths(isaaclab_settings: str) -> str:
# change the path names to be relative to the Isaac Lab directory # change the path names to be relative to the Isaac Lab directory
rel_path = os.path.relpath(ISAACSIM_DIR, ISAACLAB_DIR) rel_path = os.path.relpath(ISAACSIM_DIR, ISAACLAB_DIR)
path_names = ['"${workspaceFolder}/' + rel_path + "/" + path_name + '"' for path_name in path_names] path_names = ['"${workspaceFolder}/' + rel_path + "/" + path_name + '"' for path_name in path_names]
else:
path_names = []
print(
f"[WARN] Could not find Isaac Sim VSCode settings: {isaacsim_vscode_filename}."
"\n\tThis will result in missing 'python.analysis.extraPaths' in the VSCode"
"\n\tsettings, which limits the functionality of the Python language server."
"\n\tHowever, it does not affect the functionality of the Isaac Lab project."
"\n\tWe are working on a fix for this issue with the Isaac Sim team."
)
# add the path names that are in the Isaac Lab extensions directory # add the path names that are in the Isaac Lab extensions directory
isaaclab_extensions = os.listdir(os.path.join(ISAACLAB_DIR, "source", "extensions")) isaaclab_extensions = os.listdir(os.path.join(ISAACLAB_DIR, "source", "extensions"))
...@@ -89,9 +99,9 @@ def overwrite_python_analysis_extra_paths(isaaclab_settings: str) -> str: ...@@ -89,9 +99,9 @@ def overwrite_python_analysis_extra_paths(isaaclab_settings: str) -> str:
# combine them into a single string # combine them into a single string
path_names = ",\n\t\t".expandtabs(4).join(path_names) path_names = ",\n\t\t".expandtabs(4).join(path_names)
# deal with the path separator being different on Windows and Unix # deal with the path separator being different on Windows and Unix
path_names = path_names.replace("/", os.sep) path_names = path_names.replace("\\", "/")
# replace the path names in the Isaac Lab settings file with the path names from the isaac-sim settings file # replace the path names in the Isaac Lab settings file with the path names parsed
isaaclab_settings = re.sub( isaaclab_settings = re.sub(
r"\"python.analysis.extraPaths\": \[.*?\]", r"\"python.analysis.extraPaths\": \[.*?\]",
'"python.analysis.extraPaths": [\n\t\t'.expandtabs(4) + path_names + "\n\t]".expandtabs(4), '"python.analysis.extraPaths": [\n\t\t'.expandtabs(4) + path_names + "\n\t]".expandtabs(4),
...@@ -116,10 +126,7 @@ def overwrite_default_python_interpreter(isaaclab_settings: str) -> str: ...@@ -116,10 +126,7 @@ def overwrite_default_python_interpreter(isaaclab_settings: str) -> str:
The settings string with overwritten default python interpreter. The settings string with overwritten default python interpreter.
""" """
# read executable name # read executable name
python_exe = sys.executable python_exe = sys.executable.replace("\\", "/")
# if python interpreter is from conda, use that. Otherwise, use the template.
if "conda" not in python_exe:
return isaaclab_settings
# replace the default python interpreter in the Isaac Lab settings file with the path to the # replace the default python interpreter in the Isaac Lab settings file with the path to the
# python interpreter in the Isaac Lab directory # python interpreter in the Isaac Lab directory
isaaclab_settings = re.sub( isaaclab_settings = re.sub(
...@@ -146,9 +153,9 @@ def main(): ...@@ -146,9 +153,9 @@ def main():
# overwrite the python.analysis.extraPaths in the Isaac Lab settings file with the path names # overwrite the python.analysis.extraPaths in the Isaac Lab settings file with the path names
isaaclab_settings = overwrite_python_analysis_extra_paths(isaaclab_template_settings) isaaclab_settings = overwrite_python_analysis_extra_paths(isaaclab_template_settings)
# overwrite the default python interpreter in the Isaac Lab settings file # overwrite the default python interpreter in the Isaac Lab settings file with the path to the
# NOTE: thisis disabled since we don't need it. The default interpreter should always be the one from isaac-sim # python interpreter used to call this script
# isaaclab_settings = overwrite_default_python_interpreter(isaaclab_settings) isaaclab_settings = overwrite_default_python_interpreter(isaaclab_settings)
# add template notice to the top of the file # add template notice to the top of the file
header_message = ( header_message = (
......
# Copyright (c) 2022-2024, The Isaac Lab Project Developers.
# All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause
# This Dockerfile is used to build a Docker image for the Isaac Lab framework.
#
# It uses the pip package manager to install Isaac Sim and the Isaac Lab framework.
#
# To build the Docker image and run the Docker container, follow the steps below:
#
# 1. Build the Docker image:
# docker build -t isaac-lab:latest -f docker/Dockerfile.pip .
# 2. Run the Docker container:
# docker run -it --gpus all --rm --network=host --name isaac-lab -v $(pwd):/root/isaaclab isaac-lab:latest
# Base image: Ubuntu 22.04
FROM ubuntu:22.04 AS base
# Set default RUN shell to bash
SHELL ["/bin/bash", "-c"]
# Adds labels to the Dockerfile
LABEL version="1.0"
LABEL description="Dockerfile for building and running the Isaac Lab framework in Ubuntu 22.04 container image."
# Arguments
# Path to the Isaac Lab directory
ENV ISAACLAB_PATH=/root/isaaclab
# Home dir of docker user, typically '/root'
ENV DOCKER_USER_HOME=/root
# Set environment variables
ENV LANG=C.UTF-8
ENV DEBIAN_FRONTEND=noninteractive
USER root
# Install dependencies and remove cache
RUN --mount=type=cache,target=/var/cache/apt \
apt-get update && apt-get install -y --no-install-recommends \
build-essential \
cmake \
git \
libglib2.0-0 \
ncurses-term && \
apt -y autoremove && apt clean autoclean && \
rm -rf /var/lib/apt/lists/*
# for singularity usage, have to create the directories that will binded
RUN mkdir -p ${DOCKER_USER_HOME}/.cache/ov && \
mkdir -p ${DOCKER_USER_HOME}/.cache/pip && \
mkdir -p ${DOCKER_USER_HOME}/.cache/nvidia/GLCache && \
mkdir -p ${DOCKER_USER_HOME}/.nv/ComputeCache && \
mkdir -p ${DOCKER_USER_HOME}/.nvidia-omniverse/logs && \
mkdir -p ${DOCKER_USER_HOME}/.local/share/ov/data && \
mkdir -p ${DOCKER_USER_HOME}/Documents
# for singularity usage, create NVIDIA binary placeholders
RUN touch /bin/nvidia-smi && \
touch /bin/nvidia-debugdump && \
touch /bin/nvidia-persistenced && \
touch /bin/nvidia-cuda-mps-control && \
touch /bin/nvidia-cuda-mps-server && \
touch /etc/localtime && \
mkdir -p /var/run/nvidia-persistenced && \
touch /var/run/nvidia-persistenced/socket
# Install python3 and pip
RUN apt-get update && apt-get install -y --no-install-recommends \
python3 \
python3-pip && \
apt -y autoremove && apt clean autoclean && \
rm -rf /var/lib/apt/lists/*
# Maintain python3 as the default python version
RUN update-alternatives --install /usr/bin/python python /usr/bin/python3 1
RUN update-alternatives --install /usr/bin/pip pip /usr/bin/pip3 1
# Install python packages
RUN pip3 install --no-cache-dir --upgrade pip && \
pip install torch==2.2.2 --index-url https://download.pytorch.org/whl/cu118
RUN pip install isaacsim-rl isaacsim-replicator isaacsim-extscache-physics isaacsim-extscache-kit-sdk isaacsim-extscache-kit isaacsim-app --extra-index-url https://pypi.nvidia.com
# Mount the Isaac Lab directory (files to exclude are defined in .dockerignore)
COPY ../ ${ISAACLAB_PATH}
# installing Isaac Lab dependencies
# use pip caching to avoid reinstalling large packages
RUN --mount=type=cache,target=${DOCKER_USER_HOME}/.cache/pip \
${ISAACLAB_PATH}/isaaclab.sh --install
# aliasing isaaclab.sh and python for convenience
RUN echo "export ISAACLAB_PATH=${ISAACLAB_PATH}" >> ${HOME}/.bashrc && \
echo "alias isaaclab=${ISAACLAB_PATH}/isaaclab.sh" >> ${HOME}/.bashrc && \
echo "export TZ=$(date +%Z)" >> ${HOME}/.bashrc
# make working directory as the Isaac Lab directory
# this is the default directory when the container is run
WORKDIR ${ISAACLAB_PATH}
...@@ -25,7 +25,7 @@ fi ...@@ -25,7 +25,7 @@ fi
# print the usage description # print the usage description
print_help () { print_help () {
echo -e "\nusage: $(basename "$0") [-h] [run] [start] [stop] -- Utility for handling docker in Isaac Lab." echo -e "\nusage: $(basename "$0") [-h] [...] -- Utility for handling Docker in Isaac Lab."
echo -e "\noptional arguments:" echo -e "\noptional arguments:"
echo -e "\t-h, --help Display the help content." echo -e "\t-h, --help Display the help content."
echo -e "\tstart [profile] Build the docker image and create the container in detached mode." echo -e "\tstart [profile] Build the docker image and create the container in detached mode."
...@@ -36,8 +36,9 @@ print_help () { ...@@ -36,8 +36,9 @@ print_help () {
echo -e "\tjob [profile] [job_args] Submit a job to the cluster." echo -e "\tjob [profile] [job_args] Submit a job to the cluster."
echo -e "\tconfig [profile] Parse, resolve and render compose file in canonical format." echo -e "\tconfig [profile] Parse, resolve and render compose file in canonical format."
echo -e "\n" echo -e "\n"
echo -e "[profile] is the optional container profile specification and [job_args] optional arguments specific" echo -e "where: "
echo -e "to the executed script" echo -e "\t[profile] is the optional container profile specification. Example: 'isaaclab', 'base', 'ros2'."
echo -e "\t[job_args] are optional arguments specific to the executed script."
echo -e "\n" >&2 echo -e "\n" >&2
} }
...@@ -56,8 +57,8 @@ install_apptainer() { ...@@ -56,8 +57,8 @@ install_apptainer() {
install_yq() { install_yq() {
# Installing yq to handle file parsing # Installing yq to handle file parsing
# Installation procedure from here: https://github.com/mikefarah/yq # Installation procedure from here: https://github.com/mikefarah/yq?tab=readme-ov-file#linux-via-snap
read -p "[INFO] Required 'yq' package could not be found. Would you like to install it via wget? (y/N)" yq_answer read -p "[INFO] Required 'yq' package could not be found. Would you like to install it via snap? (y/N)" yq_answer
if [ "$yq_answer" != "${yq_answer#[Yy]}" ]; then if [ "$yq_answer" != "${yq_answer#[Yy]}" ]; then
sudo snap install yq sudo snap install yq
else else
...@@ -67,17 +68,29 @@ install_yq() { ...@@ -67,17 +68,29 @@ install_yq() {
} }
set_statefile_variable() { set_statefile_variable() {
# Check if yq is installed
if ! command -v yq &> /dev/null; then
install_yq
fi
# Stores key $1 with value $2 in yaml $STATEFILE # Stores key $1 with value $2 in yaml $STATEFILE
yq -i '.["'"$1"'"] = "'"$2"'"' $STATEFILE yq -i '.["'"$1"'"] = "'"$2"'"' $STATEFILE
} }
load_statefile_variable() { load_statefile_variable() {
# Check if yq is installed
if ! command -v yq &> /dev/null; then
install_yq
fi
# Loads key $1 from yaml $STATEFILE as an envvar # Loads key $1 from yaml $STATEFILE as an envvar
# If key does not exist, the loaded var will equal "null" # If key does not exist, the loaded var will equal "null"
eval $1="$(yq ".$1" $STATEFILE)" eval $1="$(yq ".$1" $STATEFILE)"
} }
delete_statefile_variable() { delete_statefile_variable() {
# Check if yq is installed
if ! command -v yq &> /dev/null; then
install_yq
fi
# Deletes key $1 from yaml $STATEFILE # Deletes key $1 from yaml $STATEFILE
yq -i "del(.$1)" $STATEFILE yq -i "del(.$1)" $STATEFILE
} }
...@@ -270,10 +283,6 @@ if ! command -v docker &> /dev/null; then ...@@ -270,10 +283,6 @@ if ! command -v docker &> /dev/null; then
exit 1 exit 1
fi fi
if ! command -v yq &> /dev/null; then
install_yq
fi
# parse arguments # parse arguments
mode="$1" mode="$1"
profile_arg="$2" # Capture the second argument as the potential profile argument profile_arg="$2" # Capture the second argument as the potential profile argument
......
.. _isaacsim-binaries-installation:
Installation using Isaac Sim Binaries Installation using Isaac Sim Binaries
===================================== =====================================
......
.. _isaacsim-pip-installation:
Installation using Isaac Sim pip Installation using Isaac Sim pip
================================ ================================
...@@ -5,18 +7,18 @@ Installation using Isaac Sim pip ...@@ -5,18 +7,18 @@ Installation using Isaac Sim pip
Installing Isaac Sim Installing Isaac Sim
-------------------- --------------------
.. note:: From Isaac Sim 4.0 release, it is possible to install Isaac Sim using pip. This approach is experimental and may have
compatibility issues with some Linux distributions. If you encounter any issues, please report them to the
Installing Isaac Sim from pip is currently an experimental feature. `Isaac Sim Forums <https://docs.omniverse.nvidia.com/isaacsim/latest/common/feedback.html>`_.
If errors occur, please report them to the
`Isaac Sim Forums <https://docs.omniverse.nvidia.com/isaacsim/latest/common/feedback.html>`_
and install Isaac Sim from pre-built binaries.
.. note:: .. attention::
Installing Isaac Sim with pip requires GLIBC 2.34+ version compatibility. Installing Isaac Sim with pip requires GLIBC 2.34+ version compatibility.
To check the GLIBC version on your system, use command ``ldd --version``. To check the GLIBC version on your system, use command ``ldd --version``.
This may pose compatibility issues with some Linux distributions. For instance, Ubuntu 20.04 LTS has GLIBC 2.31
by default. If you encounter compatibility issues, we recommend following the
:ref:`Isaac Sim Binaries Installation <isaacsim-binaries-installation>` approach.
- To use the pip installation approach for Isaac Sim, we recommend first creating a virtual environment. - To use the pip installation approach for Isaac Sim, we recommend first creating a virtual environment.
Ensure that the python version of the virtual environment is **Python 3.10**. Ensure that the python version of the virtual environment is **Python 3.10**.
......
...@@ -12,40 +12,57 @@ goto main ...@@ -12,40 +12,57 @@ goto main
rem Helper functions rem Helper functions
rem extract the python from isaacsim rem extract Isaac Sim directory
:extract_python_exe :extract_isaacsim_path
rem Check if IsaacSim directory manually specified rem check if conda environment is activated and isaacsim package is installed
rem Note: for manually build isaacsim, this: _build/linux-x86_64/release
if not "%ISAACSIM_PATH%"=="" (
rem Use local build
set build_path=%ISAACSIM_PATH%
) else (
rem Use TeamCity build
set build_path=%ISAACLAB_PATH%\_isaac_sim
)
rem check if using conda
if not "%CONDA_PREFIX%"=="" ( if not "%CONDA_PREFIX%"=="" (
rem use conda python rem use conda python
set python_exe=%CONDA_PREFIX%\python set python_exe=%CONDA_PREFIX%\python
) else ( call !python_exe! -m pip show isaacsim-rl > nul 2>&1
rem check if isaacsim is installed
pip show isaacsim-rl > nul 2>&1
if errorlevel 1 ( if errorlevel 1 (
rem use python from kit if Isaac Sim not installed from pip rem Use the sym-link path to Isaac Sim directory
set python_exe=%build_path%\python.bat set isaac_path=%ISAACLAB_PATH%\_isaac_sim
) else ( ) else (
rem use current python if Isaac Sim is installed from pip rem retrieve the isaacsim path from the installed package
set "python_exe=" set "isaac_path="
for /f "delims=" %%i in ('where python') do ( for /f "delims=" %%i in ('!python_exe! -c "import isaacsim; import os; print(os.environ['ISAAC_PATH'])"') do (
if not defined python_exe ( if not defined isaac_path (
set "python_exe=%%i" set "isaac_path=%%i"
) )
) )
) )
) else (
rem Use the sym-link path to Isaac Sim directory
set isaac_path=%ISAACLAB_PATH%\_isaac_sim
)
rem Check if the directory exists
if not exist "%isaac_path%" (
echo [ERROR] Unable to find the Isaac Sim directory: %isaac_path%
echo %tab%This could be due to the following reasons:
echo %tab%1. Conda environment with Isaac Sim pip package is not activated.
echo %tab%2. Isaac Sim directory is not available at the default path: %ISAACLAB_PATH%\_isaac_sim
exit /b 1
)
goto :eof
rem extract the python from isaacsim
:extract_python_exe
rem check if using conda
if not "%CONDA_PREFIX%"=="" (
rem use conda python
set python_exe=%CONDA_PREFIX%\python
) else (
rem obtain isaacsim path
call :extract_isaacsim_path
rem use python from kit if Isaac Sim not installed from pip
set python_exe=!isaac_path!\python.bat
) )
rem check if there is a python path available rem check if there is a python path available
if "%python_exe%"=="" ( if "%python_exe%"=="" (
echo [ERROR] No python executable found at path: %build_path% echo [ERROR] Unable to find any Python executable at path: %isaac_path%
echo %tab%This could be due to the following reasons:
echo %tab%1. Conda environment is not activated.
echo %tab%2. Python executable is not available at the default path: %ISAACLAB_PATH%\_isaac_sim\python.bat
exit /b 1 exit /b 1
) )
goto :eof goto :eof
...@@ -53,20 +70,20 @@ goto :eof ...@@ -53,20 +70,20 @@ goto :eof
rem extract the simulator exe from isaacsim rem extract the simulator exe from isaacsim
:extract_isaacsim_exe :extract_isaacsim_exe
rem Check if IsaacSim directory manually specified call :extract_python_exe
rem Note: for manually build isaacsim, this: _build\linux-x86_64\release call !python_exe! -m pip show isaacsim-rl > nul 2>&1
if not "%ISAACSIM_PATH%"=="" ( if errorlevel 1 (
rem Use local build rem obtain isaacsim path
set build_path=%ISAACSIM_PATH% call :extract_isaacsim_path
rem python executable to use
set isaacsim_exe=!isaac_path!\isaac-sim.bat
) else ( ) else (
rem Use TeamCity build rem if isaac sim installed from pip
set build_path=%ISAACLAB_PATH%\_isaac_sim set isaacsim_exe=isaacsim
) )
rem python executable to use
set isaacsim_exe=%build_path%\isaac-sim.bat
rem check if there is a python path available rem check if there is a python path available
if not exist "%isaacsim_exe%" ( if not exist "%isaacsim_exe%" (
echo [ERROR] No isaac-sim executable found at path: %build_path% echo [ERROR] No isaac-sim executable found at path: !isaac_path!
exit /b 1 exit /b 1
) )
goto :eof goto :eof
...@@ -95,15 +112,6 @@ if errorlevel 1 ( ...@@ -95,15 +112,6 @@ if errorlevel 1 (
echo [ERROR] Conda could not be found. Please install conda and try again. echo [ERROR] Conda could not be found. Please install conda and try again.
exit /b 1 exit /b 1
) )
rem check if Isaac Sim directory manually specified
rem Note: for manually build Isaac Sim, this: _build\windows-x86_64\release
if not "%ISAACSIM_PATH%"=="" (
rem Use local build
set "build_path=%ISAACSIM_PATH%"
) else (
rem Use TeamCity build
set "build_path=%ISAACLAB_PATH%\_isaac_sim"
)
rem check if the environment exists rem check if the environment exists
call conda env list | findstr /c:"%env_name%" >nul call conda env list | findstr /c:"%env_name%" >nul
if %errorlevel% equ 0 ( if %errorlevel% equ 0 (
...@@ -124,27 +132,34 @@ call conda activate %env_name% ...@@ -124,27 +132,34 @@ call conda activate %env_name%
rem setup directories to load isaac-sim variables rem setup directories to load isaac-sim variables
mkdir "%CONDA_PREFIX%\etc\conda\activate.d" 2>nul mkdir "%CONDA_PREFIX%\etc\conda\activate.d" 2>nul
mkdir "%CONDA_PREFIX%\etc\conda\deactivate.d" 2>nul mkdir "%CONDA_PREFIX%\etc\conda\deactivate.d" 2>nul
rem obtain isaacsim path
call :extract_isaacsim_path
rem add variables to environment during activation rem add variables to environment during activation
( (
echo @echo off echo @echo off
rem for isaac-sim echo rem for isaac-sim
echo set CARB_APP_PATH=%build_path%\kit
echo set EXP_PATH=%build_path%\apps
echo set ISAAC_PATH=%build_path%
echo set PYTHONPATH=%PYTHONPATH%;%build_path%\site
echo set "RESOURCE_NAME=IsaacSim" echo set "RESOURCE_NAME=IsaacSim"
echo set CARB_APP_PATH=!isaac_path!\kit
echo set EXP_PATH=!isaac_path!\apps
echo set ISAAC_PATH=!isaac_path!
echo set PYTHONPATH=%PYTHONPATH%;!isaac_path!\site
echo.
echo rem for isaac-lab
echo doskey isaaclab=isaaclab.bat $* echo doskey isaaclab=isaaclab.bat $*
) > "%CONDA_PREFIX%\etc\conda\activate.d\env_vars.bat" ) > "%CONDA_PREFIX%\etc\conda\activate.d\env_vars.bat"
( (
echo $env:CARB_APP_PATH="%build_path%\kit" echo $env:CARB_APP_PATH="!isaac_path!\kit"
echo $env:EXP_PATH="%build_path%\apps" echo $env:EXP_PATH="!isaac_path!\apps"
echo $env:ISAAC_PATH="%build_path%" echo $env:ISAAC_PATH="!isaac_path!"
echo $env:PYTHONPATH="%PYTHONPATH%;%build_path%\site" echo $env:PYTHONPATH="%PYTHONPATH%;!isaac_path!\site"
echo $env:RESOURCE_NAME="IsaacSim" echo $env:RESOURCE_NAME="IsaacSim"
) > "%CONDA_PREFIX%\etc\conda\activate.d\env_vars.ps1" ) > "%CONDA_PREFIX%\etc\conda\activate.d\env_vars.ps1"
rem reactivate the environment to load the variables rem reactivate the environment to load the variables
call conda activate %env_name% call conda activate %env_name%
rem remove variables from environment during deactivation rem remove variables from environment during deactivation
( (
echo @echo off echo @echo off
...@@ -153,6 +168,8 @@ rem remove variables from environment during deactivation ...@@ -153,6 +168,8 @@ rem remove variables from environment during deactivation
echo set "EXP_PATH=" echo set "EXP_PATH="
echo set "ISAAC_PATH=" echo set "ISAAC_PATH="
echo set "RESOURCE_NAME=" echo set "RESOURCE_NAME="
echo.
echo rem for isaac-lab
echo doskey isaaclab = echo doskey isaaclab =
echo. echo.
echo rem restore paths echo rem restore paths
...@@ -160,9 +177,6 @@ rem remove variables from environment during deactivation ...@@ -160,9 +177,6 @@ rem remove variables from environment during deactivation
echo set "LD_LIBRARY_PATH=%cache_ld_library_path%" echo set "LD_LIBRARY_PATH=%cache_ld_library_path%"
) > "%CONDA_PREFIX%\etc\conda\deactivate.d\unsetenv_vars.bat" ) > "%CONDA_PREFIX%\etc\conda\deactivate.d\unsetenv_vars.bat"
( (
echo $env:CARB_APP_PATH=""
echo $env:EXP_PATH=""
echo $env:ISAAC_PATH=""
echo $env:RESOURCE_NAME="" echo $env:RESOURCE_NAME=""
echo $env:PYTHONPATH="%cache_pythonpath%" echo $env:PYTHONPATH="%cache_pythonpath%"
echo $env:LD_LIBRARY_PATH="%cache_pythonpath%" echo $env:LD_LIBRARY_PATH="%cache_pythonpath%"
...@@ -171,6 +185,7 @@ rem remove variables from environment during deactivation ...@@ -171,6 +185,7 @@ rem remove variables from environment during deactivation
rem install some extra dependencies rem install some extra dependencies
echo [INFO] Installing extra dependencies (this might take a few minutes)... echo [INFO] Installing extra dependencies (this might take a few minutes)...
call conda install -c conda-forge -y importlib_metadata >nul 2>&1 call conda install -c conda-forge -y importlib_metadata >nul 2>&1
rem deactivate the environment rem deactivate the environment
call conda deactivate call conda deactivate
rem add information to the user about alias rem add information to the user about alias
...@@ -179,8 +194,8 @@ echo [INFO] Created conda environment named '%env_name%'. ...@@ -179,8 +194,8 @@ echo [INFO] Created conda environment named '%env_name%'.
echo. echo.
echo 1. To activate the environment, run: conda activate %env_name% echo 1. To activate the environment, run: conda activate %env_name%
echo 2. To install Isaac Lab extensions, run: isaaclab -i echo 2. To install Isaac Lab extensions, run: isaaclab -i
echo 4. To perform formatting, run: isaaclab -f echo 3. To perform formatting, run: isaaclab -f
echo 5. To deactivate the environment, run: conda deactivate echo 4. To deactivate the environment, run: conda deactivate
echo. echo.
goto :eof goto :eof
...@@ -189,7 +204,7 @@ rem Update the vscode settings from template and Isaac Sim settings ...@@ -189,7 +204,7 @@ rem Update the vscode settings from template and Isaac Sim settings
:update_vscode_settings :update_vscode_settings
echo [INFO] Setting up vscode settings... echo [INFO] Setting up vscode settings...
rem Retrieve the python executable rem Retrieve the python executable
call :extract_python_exe python_exe call :extract_python_exe
rem Path to setup_vscode.py rem Path to setup_vscode.py
set "setup_vscode_script=%ISAACLAB_PATH%\.vscode\tools\setup_vscode.py" set "setup_vscode_script=%ISAACLAB_PATH%\.vscode\tools\setup_vscode.py"
rem Check if the file exists before attempting to run it rem Check if the file exists before attempting to run it
...@@ -244,12 +259,6 @@ if "%arg%"=="-i" ( ...@@ -244,12 +259,6 @@ if "%arg%"=="-i" (
set ext_folder="%%d" set ext_folder="%%d"
call :install_isaaclab_extension call :install_isaaclab_extension
) )
call !python_exe! -m pip show isaacsim-rl > nul 2>&1
rem if not installing from pip, set up VScode
if errorlevel 1 (
rem setup vscode settings
call :update_vscode_settings
)
rem install the python packages for supported reinforcement learning frameworks rem install the python packages for supported reinforcement learning frameworks
echo [INFO] Installing extra requirements such as learning frameworks... echo [INFO] Installing extra requirements such as learning frameworks...
if "%~2"=="" ( if "%~2"=="" (
...@@ -265,7 +274,7 @@ if "%arg%"=="-i" ( ...@@ -265,7 +274,7 @@ if "%arg%"=="-i" (
shift shift
) )
rem install the rl-frameworks specified rem install the rl-frameworks specified
!python_exe! -m pip install -e %ISAACLAB_PATH%\source\extensions\omni.isaac.lab_tasks[!framework_name!] call !python_exe! -m pip install -e %ISAACLAB_PATH%\source\extensions\omni.isaac.lab_tasks[!framework_name!]
shift shift
) else if "%arg%"=="--install" ( ) else if "%arg%"=="--install" (
rem install the python packages in omni.isaac.rl/source directory rem install the python packages in omni.isaac.rl/source directory
...@@ -275,12 +284,6 @@ if "%arg%"=="-i" ( ...@@ -275,12 +284,6 @@ if "%arg%"=="-i" (
set ext_folder="%%d" set ext_folder="%%d"
call :install_isaaclab_extension call :install_isaaclab_extension
) )
call !python_exe! -m pip show isaacsim-rl > nul 2>&1
rem if not installing from pip, set up VScode
if errorlevel 1 (
rem setup vscode settings
call :update_vscode_settings
)
rem install the python packages for supported reinforcement learning frameworks rem install the python packages for supported reinforcement learning frameworks
echo [INFO] Installing extra requirements such as learning frameworks... echo [INFO] Installing extra requirements such as learning frameworks...
if "%~2"=="" ( if "%~2"=="" (
...@@ -296,7 +299,10 @@ if "%arg%"=="-i" ( ...@@ -296,7 +299,10 @@ if "%arg%"=="-i" (
shift shift
) )
rem install the rl-frameworks specified rem install the rl-frameworks specified
!python_exe! -m pip install -e %ISAACLAB_PATH%\source\extensions\omni.isaac.lab_tasks[!framework_name!] call !python_exe! -m pip install -e %ISAACLAB_PATH%\source\extensions\omni.isaac.lab_tasks[!framework_name!]
rem update the vscode settings
rem once we have a docker container, we need to disable vscode settings
call :update_vscode_settings
shift shift
) else if "%arg%"=="-c" ( ) else if "%arg%"=="-c" (
rem use default name if not provided rem use default name if not provided
...@@ -413,7 +419,7 @@ if "%arg%"=="-i" ( ...@@ -413,7 +419,7 @@ if "%arg%"=="-i" (
) else if "%arg%"=="-s" ( ) else if "%arg%"=="-s" (
rem run the simulator exe provided by isaacsim rem run the simulator exe provided by isaacsim
call :extract_isaacsim_exe call :extract_isaacsim_exe
echo [INFO] Running isaac-sim from: %isaacsim_exe% echo [INFO] Running isaac-sim from: !isaacsim_exe!
set "allArgs=" set "allArgs="
for %%a in (%*) do ( for %%a in (%*) do (
REM Append each argument to the variable, skip the first one REM Append each argument to the variable, skip the first one
...@@ -428,7 +434,7 @@ if "%arg%"=="-i" ( ...@@ -428,7 +434,7 @@ if "%arg%"=="-i" (
) else if "%arg%"=="--sim" ( ) else if "%arg%"=="--sim" (
rem run the simulator exe provided by Isaac Sim rem run the simulator exe provided by Isaac Sim
call :extract_isaacsim_exe call :extract_isaacsim_exe
echo [INFO] Running isaac-sim from: %isaacsim_exe% echo [INFO] Running isaac-sim from: !isaacsim_exe!
set "allArgs=" set "allArgs="
for %%a in (%*) do ( for %%a in (%*) do (
REM Append each argument to the variable, skip the first one REM Append each argument to the variable, skip the first one
......
...@@ -22,34 +22,78 @@ export ISAACLAB_PATH="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && p ...@@ -22,34 +22,78 @@ export ISAACLAB_PATH="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && p
# Helper functions # Helper functions
#== #==
# extract the python from isaacsim # extract isaac sim path
extract_python_exe() { extract_isaacsim_path() {
# Check if IsaacSim directory manually specified # Check if we have pip package installed inside conda environment
# Note: for manually build isaacsim, this: _build/linux-x86_64/release if ! [[ -z "${CONDA_PREFIX}" ]]; then
if [ ! -z ${ISAACSIM_PATH} ]; # Use the python executable to get the path
then local python_exe=${CONDA_PREFIX}/bin/python
# Use local build # Retrieve the path importing isaac sim and getting the environment path
build_path=${ISAACSIM_PATH} if [ $(${python_exe} -m pip list | grep -c 'isaacsim-rl') ]; then
local isaac_path=$(${python_exe} -c "import isaacsim; import os; print(os.environ['ISAAC_PATH'])")
else
# If package not installed, try with the default path
local isaac_path=${ISAACLAB_PATH}/_isaac_sim
fi
elif command -v python &> /dev/null; then
# note: we need to deal with this case because of docker containers
# Retrieve the path importing isaac sim and getting the environment path
if [ $(python -m pip list | grep -c 'isaacsim-rl') ]; then
local isaac_path=$(python -c "import isaacsim; import os; print(os.environ['ISAAC_PATH'])")
else
# If package not installed, use an empty path for failure
local isaac_path=''
fi
else else
# Use TeamCity build # Use the sym-link path to Isaac Sim directory
build_path=${ISAACLAB_PATH}/_isaac_sim local isaac_path=${ISAACLAB_PATH}/_isaac_sim
fi fi
# check if there is a path available
if [ ! -d "${isaac_path}" ]; then
# throw an error if no path is found
echo -e "[ERROR] Unable to find the Isaac Sim directory: '${isaac_path}'" >&2
echo -e "\tThis could be due to the following reasons:" >&2
echo -e "\t1. Conda environment is not activated." >&2
echo -e "\t2. Isaac Sim pip package 'isaacsim-rl' is not installed." >&2
echo -e "\t3. Isaac Sim directory is not available at the default path: ${ISAACLAB_PATH}/_isaac_sim" >&2
# exit the script
exit 1
fi
# return the result
echo ${isaac_path}
}
# extract the python from isaacsim
extract_python_exe() {
# check if using conda # check if using conda
if ! [[ -z "${CONDA_PREFIX}" ]]; then if ! [[ -z "${CONDA_PREFIX}" ]]; then
# use conda python # use conda python
local python_exe=${CONDA_PREFIX}/bin/python local python_exe=${CONDA_PREFIX}/bin/python
elif command -v python &> /dev/null; then
# note: we need to deal with this case because of docker containers
if [ $(python -m pip list | grep -c 'isaacsim-rl') ]; then
local python_exe=$(which python)
else else
if pip show isaacsim-rl > /dev/null 2>&1; then # leave a blank path for failure
# use current python executable local python_exe=''
python_exe=$(which python) fi
else else
# use python from kit # use python from kit
local python_exe=${build_path}/python.sh local python_exe=${ISAACLAB_PATH}/_isaac_sim/python.sh
fi
fi fi
# check if there is a python path available # check if there is a python path available
if [ ! -f "${python_exe}" ]; then if [ ! -f "${python_exe}" ]; then
echo "[ERROR] No python executable found at path: ${build_path}" >&2 echo -e "[ERROR] Unable to find any Python executable at path: '${python_exe}'" >&2
echo -e "\tThis could be due to the following reasons:" >&2
echo -e "\t1. Conda environment is not activated." >&2
echo -e "\t2. Isaac Sim pip package 'isaacsim-rl' is not installed." >&2
echo -e "\t3. Python executable is not available at the default path: ${ISAACLAB_PATH}/_isaac_sim/python.sh" >&2
exit 1
fi
# kit dependencies are built with python 3.10 so any other version will not work
# this is needed in case users have multiple python versions installed and the wrong one is being used
if [ "$(${python_exe} --version | grep -c '3.10')" -eq 0 ]; then
echo "[ERROR] Found Python version: $(${python_exe} --version) while expecting 3.10. Please use the correct python version." >&2
exit 1 exit 1
fi fi
# return the result # return the result
...@@ -58,21 +102,13 @@ extract_python_exe() { ...@@ -58,21 +102,13 @@ extract_python_exe() {
# extract the simulator exe from isaacsim # extract the simulator exe from isaacsim
extract_isaacsim_exe() { extract_isaacsim_exe() {
# Check if IsaacSim directory manually specified # obtain the isaac sim path
# Note: for manually build isaacsim, this: _build/linux-x86_64/release local isaac_path=$(extract_isaacsim_path)
if [ ! -z ${ISAACSIM_PATH} ];
then
# Use local build
build_path=${ISAACSIM_PATH}
else
# Use TeamCity build
build_path=${ISAACLAB_PATH}/_isaac_sim
fi
# python executable to use # python executable to use
local isaacsim_exe=${build_path}/isaac-sim.sh local isaacsim_exe=${isaac_path}/isaac-sim.sh
# check if there is a python path available # check if there is a python path available
if [ ! -f "${isaacsim_exe}" ]; then if [ ! -f "${isaacsim_exe}" ]; then
echo "[ERROR] No isaac-sim executable found at path: ${build_path}" >&2 echo "[ERROR] No Isaac Sim executable found at path: ${isaacsim_exe}" >&2
exit 1 exit 1
fi fi
# return the result # return the result
...@@ -100,16 +136,7 @@ setup_conda_env() { ...@@ -100,16 +136,7 @@ setup_conda_env() {
echo "[ERROR] Conda could not be found. Please install conda and try again." echo "[ERROR] Conda could not be found. Please install conda and try again."
exit 1 exit 1
fi fi
# Check if IsaacSim directory manually specified
# Note: for manually build isaacsim, this: _build/linux-x86_64/release
if [ ! -z ${ISAACSIM_PATH} ];
then
# Use local build
build_path=${ISAACSIM_PATH}
else
# Use TeamCity build
build_path=${ISAACLAB_PATH}/_isaac_sim
fi
# check if the environment exists # check if the environment exists
if { conda env list | grep -w ${env_name}; } >/dev/null 2>&1; then if { conda env list | grep -w ${env_name}; } >/dev/null 2>&1; then
echo -e "[INFO] Conda environment named '${env_name}' already exists." echo -e "[INFO] Conda environment named '${env_name}' already exists."
...@@ -117,6 +144,7 @@ setup_conda_env() { ...@@ -117,6 +144,7 @@ setup_conda_env() {
echo -e "[INFO] Creating conda environment named '${env_name}'..." echo -e "[INFO] Creating conda environment named '${env_name}'..."
conda create -y --name ${env_name} python=3.10 conda create -y --name ${env_name} python=3.10
fi fi
# cache current paths for later # cache current paths for later
cache_pythonpath=$PYTHONPATH cache_pythonpath=$PYTHONPATH
cache_ld_library_path=$LD_LIBRARY_PATH cache_ld_library_path=$LD_LIBRARY_PATH
...@@ -129,12 +157,9 @@ setup_conda_env() { ...@@ -129,12 +157,9 @@ setup_conda_env() {
# setup directories to load Isaac Sim variables # setup directories to load Isaac Sim variables
mkdir -p ${CONDA_PREFIX}/etc/conda/activate.d mkdir -p ${CONDA_PREFIX}/etc/conda/activate.d
mkdir -p ${CONDA_PREFIX}/etc/conda/deactivate.d mkdir -p ${CONDA_PREFIX}/etc/conda/deactivate.d
# add variables to environment during activation # add variables to environment during activation
local isaacsim_setup_conda_env_script=${ISAACLAB_PATH}/_isaac_sim/setup_conda_env.sh
printf '%s\n' '#!/usr/bin/env bash' '' \ printf '%s\n' '#!/usr/bin/env bash' '' \
'# for Isaac Sim' \
'source '${isaacsim_setup_conda_env_script}'' \
'' \
'# for Isaac Lab' \ '# for Isaac Lab' \
'export ISAACLAB_PATH='${ISAACLAB_PATH}'' \ 'export ISAACLAB_PATH='${ISAACLAB_PATH}'' \
'alias isaaclab='${ISAACLAB_PATH}'/isaaclab.sh' \ 'alias isaaclab='${ISAACLAB_PATH}'/isaaclab.sh' \
...@@ -142,28 +167,51 @@ setup_conda_env() { ...@@ -142,28 +167,51 @@ setup_conda_env() {
'# show icon if not runninng headless' \ '# show icon if not runninng headless' \
'export RESOURCE_NAME="IsaacSim"' \ 'export RESOURCE_NAME="IsaacSim"' \
'' > ${CONDA_PREFIX}/etc/conda/activate.d/setenv.sh '' > ${CONDA_PREFIX}/etc/conda/activate.d/setenv.sh
# check if we have _isaac_sim directory -> if so that means binaries were installed.
# we need to setup conda variables to load the binaries
local isaacsim_setup_conda_env_script=${ISAACLAB_PATH}/_isaac_sim/setup_conda_env.sh
if [ -f "${isaacsim_setup_conda_env_script}" ]; then
# add variables to environment during activation
printf '' \
'# for Isaac Sim' \
'source '${isaacsim_setup_conda_env_script}'' \
'' >> ${CONDA_PREFIX}/etc/conda/activate.d/setenv.sh
fi
# reactivate the environment to load the variables # reactivate the environment to load the variables
# needed because deactivate complains about Isaac Lab alias since it otherwise doesn't exist # needed because deactivate complains about Isaac Lab alias since it otherwise doesn't exist
conda activate ${env_name} conda activate ${env_name}
# remove variables from environment during deactivation # remove variables from environment during deactivation
printf '%s\n' '#!/usr/bin/env bash' '' \ printf '%s\n' '#!/usr/bin/env bash' '' \
'# for Isaac Lab' \ '# for Isaac Lab' \
'unalias isaaclab &>/dev/null' \ 'unalias isaaclab &>/dev/null' \
'unset ISAACLAB_PATH' \ 'unset ISAACLAB_PATH' \
'' \ '' \
'# for Isaac Sim' \
'unset CARB_APP_PATH' \
'unset EXP_PATH' \
'unset ISAAC_PATH' \
'unset RESOURCE_NAME' \
'' \
'# restore paths' \ '# restore paths' \
'export PYTHONPATH='${cache_pythonpath}'' \ 'export PYTHONPATH='${cache_pythonpath}'' \
'export LD_LIBRARY_PATH='${cache_ld_library_path}'' \ 'export LD_LIBRARY_PATH='${cache_ld_library_path}'' \
'' \
'# for Isaac Sim' \
'unset RESOURCE_NAME' \
'' > ${CONDA_PREFIX}/etc/conda/deactivate.d/unsetenv.sh '' > ${CONDA_PREFIX}/etc/conda/deactivate.d/unsetenv.sh
# check if we have _isaac_sim directory -> if so that means binaries were installed.
if [ -f "${isaacsim_setup_conda_env_script}" ]; then
# add variables to environment during activation
printf '' \
'# for Isaac Sim' \
'unset CARB_APP_PATH' \
'unset EXP_PATH' \
'unset ISAAC_PATH' \
'' >> ${CONDA_PREFIX}/etc/conda/deactivate.d/unsetenv.sh
fi
# install some extra dependencies # install some extra dependencies
echo -e "[INFO] Installing extra dependencies (this might take a few minutes)..." echo -e "[INFO] Installing extra dependencies (this might take a few minutes)..."
conda install -c conda-forge -y importlib_metadata &> /dev/null conda install -c conda-forge -y importlib_metadata &> /dev/null
# deactivate the environment # deactivate the environment
conda deactivate conda deactivate
# add information to the user about alias # add information to the user about alias
...@@ -187,7 +235,7 @@ update_vscode_settings() { ...@@ -187,7 +235,7 @@ update_vscode_settings() {
if [ -f "${setup_vscode_script}" ]; then if [ -f "${setup_vscode_script}" ]; then
${python_exe} "${setup_vscode_script}" ${python_exe} "${setup_vscode_script}"
else else
echo "[WARNING] setup_vscode.py not found. Aborting vscode settings setup." echo "[WARNING] Unable to find the script 'setup_vscode.py'. Aborting vscode settings setup."
fi fi
} }
...@@ -234,12 +282,6 @@ while [[ $# -gt 0 ]]; do ...@@ -234,12 +282,6 @@ while [[ $# -gt 0 ]]; do
export -f install_isaaclab_extension export -f install_isaaclab_extension
# source directory # source directory
find -L "${ISAACLAB_PATH}/source/extensions" -mindepth 1 -maxdepth 1 -type d -exec bash -c 'install_isaaclab_extension "{}"' \; find -L "${ISAACLAB_PATH}/source/extensions" -mindepth 1 -maxdepth 1 -type d -exec bash -c 'install_isaaclab_extension "{}"' \;
# unset local variables
unset install_isaaclab_extension
# setup vscode settings
if ! ${python_exe} -m pip show isaacsim-rl &>/dev/null; then
update_vscode_settings
fi
# install the python packages for supported reinforcement learning frameworks # install the python packages for supported reinforcement learning frameworks
echo "[INFO] Installing extra requirements such as learning frameworks..." echo "[INFO] Installing extra requirements such as learning frameworks..."
# check if specified which rl-framework to install # check if specified which rl-framework to install
...@@ -257,6 +299,19 @@ while [[ $# -gt 0 ]]; do ...@@ -257,6 +299,19 @@ while [[ $# -gt 0 ]]; do
fi fi
# install the rl-frameworks specified # install the rl-frameworks specified
${python_exe} -m pip install -e ${ISAACLAB_PATH}/source/extensions/omni.isaac.lab_tasks["${framework_name}"] ${python_exe} -m pip install -e ${ISAACLAB_PATH}/source/extensions/omni.isaac.lab_tasks["${framework_name}"]
# check if we are inside a docker container (in that case don't setup VSCode)
if [ -f "/.dockerenv" ]; then
echo "[INFO] Running inside a docker container. Skipping VSCode settings setup."
echo "[INFO] To setup VSCode settings, run 'isaaclab -v'."
else
# update the vscode settings
update_vscode_settings
fi
# unset local variables
unset extract_python_exe
unset install_isaaclab_extension
shift # past argument shift # past argument
;; ;;
-c|--conda) -c|--conda)
...@@ -283,7 +338,7 @@ while [[ $# -gt 0 ]]; do ...@@ -283,7 +338,7 @@ while [[ $# -gt 0 ]]; do
fi fi
# run the formatter over the repository # run the formatter over the repository
# check if pre-commit is installed # check if pre-commit is installed
if ! command -v pre-commit &>/dev/null; then if [ ! command -v pre-commit &>/dev/null ]; then
echo "[INFO] Installing pre-commit..." echo "[INFO] Installing pre-commit..."
pip install pre-commit pip install pre-commit
fi fi
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment