Skip to content

Improves installation UX and documentation for Kit-less and uv flows#4879

Open
rdsa-nv wants to merge 31 commits intoisaac-sim:developfrom
rdsa-nv:user/ruben/installation
Open

Improves installation UX and documentation for Kit-less and uv flows#4879
rdsa-nv wants to merge 31 commits intoisaac-sim:developfrom
rdsa-nv:user/ruben/installation

Conversation

@rdsa-nv
Copy link
Contributor

@rdsa-nv rdsa-nv commented Mar 8, 2026

Description

Improvements to the installation and documentation within UV and Kit-less pathways in mind.

CLI fixes:

  • More reliable installation detection (using "import isaaclab").
  • Handle case w/no IsaacSim symlinked.
  • "pip" / "uv pip" command selection based on environment.
  • Unit test for cli utils and uv install commands.

Docs:

  • Add "Installation Configurations" section to installation index explaining the Kit vs Kit-less and PhysX vs Newton axes, with a common install paths table
  • Add "Install Options Reference" table listing all accepted -i tokens
  • Add "Selecting the Physics Backend" subsection to the quickstart guide with presets=newton/physx and --visualizer examples
  • Sync --help output in docs with updated CLI (visualizers, ovrtx, visualizer selector syntax)

Type of change

  • Bug fixes
  • Improvements
  • Test
  • Documentation update

Checklist

  • I have read and understood the contribution guidelines
  • I have run the pre-commit checks with ./isaaclab.sh --format
  • 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
  • I have added Ruben DS'a-s to the CONTRIBUTORS.md or my name already exists there

@github-actions github-actions bot added the isaac-lab Related to Isaac Lab team label Mar 8, 2026
@myurasov-nv myurasov-nv force-pushed the user/ruben/installation branch from 23a56e0 to eca2916 Compare March 10, 2026 01:04
@myurasov-nv myurasov-nv marked this pull request as draft March 10, 2026 01:04
@myurasov-nv myurasov-nv force-pushed the user/ruben/installation branch from d1ba3e3 to a938c52 Compare March 10, 2026 05:15
@github-actions github-actions bot added the documentation Improvements or additions to documentation label Mar 10, 2026
@myurasov-nv myurasov-nv force-pushed the user/ruben/installation branch from e54b9b3 to 94fe85a Compare March 10, 2026 06:06
@myurasov-nv myurasov-nv marked this pull request as ready for review March 10, 2026 06:48
@myurasov-nv myurasov-nv changed the title Improve Lab Installation Improves installation and documentation for Kit-less and uv install Mar 10, 2026
@myurasov-nv myurasov-nv changed the title Improves installation and documentation for Kit-less and uv install Improves installation and documentation for Kit-less and uv flows Mar 10, 2026
@myurasov-nv myurasov-nv changed the title Improves installation and documentation for Kit-less and uv flows Improves installation UX and documentation for Kit-less and uv flows Mar 10, 2026
rdsa-nv and others added 9 commits March 9, 2026 23:53
…y) wil be addressed by uv dependencies and respective code owners more systemically. Soon. 🤞
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
Signed-off-by: myurasov-nv <168484206+myurasov-nv@users.noreply.github.com>
@myurasov-nv myurasov-nv force-pushed the user/ruben/installation branch from 394c1cd to 6df095d Compare March 10, 2026 06:53
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
Signed-off-by: myurasov-nv <168484206+myurasov-nv@users.noreply.github.com>
@isaac-sim isaac-sim deleted a comment from greptile-apps bot Mar 10, 2026
@myurasov-nv
Copy link
Collaborator

@greptile-apps

myurasov-nv and others added 2 commits March 10, 2026 00:03
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
Signed-off-by: myurasov-nv <168484206+myurasov-nv@users.noreply.github.com>
@isaac-sim isaac-sim deleted a comment from greptile-apps bot Mar 10, 2026
@myurasov-nv
Copy link
Collaborator

@greptile-apps

myurasov-nv and others added 4 commits March 10, 2026 00:18
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
Signed-off-by: myurasov-nv <168484206+myurasov-nv@users.noreply.github.com>
@isaac-sim isaac-sim deleted a comment from greptile-apps bot Mar 10, 2026
@myurasov-nv
Copy link
Collaborator

@greptile-aps

@isaac-sim isaac-sim deleted a comment from greptile-apps bot Mar 10, 2026
@isaac-sim isaac-sim deleted a comment from greptile-apps bot Mar 10, 2026
@myurasov-nv
Copy link
Collaborator

@greptile-apps

@greptile-apps
Copy link
Contributor

greptile-apps bot commented Mar 10, 2026

Greptile Summary

This PR improves the installation experience for Kit-less and uv workflows by overhauling the CLI install commands, adding robust Python-executable detection, introducing visualizers[extra] selector syntax, and syncing documentation and --help output with the updated CLI.

Key changes:

  • install.py: Adds _install_isaacsim(), _ensure_cuda_torch(), _parse_visualizer_selector(), and _split_install_items() to support granular installs (e.g., -i isaacsim,newton,visualizers[rerun]).
  • utils.py: extract_python_exe() now gracefully handles environments with no _isaac_sim symlink, falling back to conda → system python → sys.executable with import isaacsim detection; get_pip_command() is environment-aware (uv pip vs python -m pip).
  • test/cli/test_install.py: New unit and integration test suite with platform-aware helper functions (_python_in_venv, _python_for_conda) covering all key utility functions.
  • Docs: New "Installation Configurations" section, updated quickstart with physics-backend selector examples, and synced --help text.
  • Issue: The "all" and "none" special values are only recognised at the top-level dispatch in command_install(); passing them as part of a comma-separated list (e.g., -i isaacsim,all) silently warns about an unknown token and only installs core isaaclab instead of all extensions.
  • Issue: EXTRAS_REQUIRE["isaacsim"] in setup.py pins Isaac Sim to 5.1.0 while the CLI installer allows >=4.5.0 and the installation guide advertises 6.0.0, meaning two different installation paths produce different Isaac Sim versions.
  • Issue: When -i ovrtx is requested in isolation, _install_ovrtx_dependency() runs but _install_no_deps_extensions() is skipped, so isaaclab_ov is never installed even though its dependency (ovrtx) is.

Confidence Score: 3/5

  • PR is mostly safe but has a logic gap in the comma-separated token parser and a version inconsistency between installation paths that could confuse users or produce broken installs.
  • The core CLI refactor and documentation updates are high quality. The _python_in_venv/_python_for_conda helpers and the broad unit/integration test suite address previous review feedback. However, three actionable issues were found: (1) "all" used inside a comma-separated list is silently treated as an unknown token, (2) setup.py's isaacsim extra pins to a version that doesn't match the CLI or docs, and (3) -i ovrtx does not install isaaclab_ov itself. These reduce confidence below passing threshold.
  • source/isaaclab/isaaclab/cli/commands/install.py and source/isaaclab/setup.py require attention before merging.

Important Files Changed

Filename Overview
source/isaaclab/isaaclab/cli/commands/install.py Major overhaul of install logic: adds isaacsim pip install, visualizers[extra] selector syntax, ovrtx dependency handling, and _ensure_cuda_torch. Two logic issues found: (1) the "all" special value isn't handled inside the comma-separated parser, so -i isaacsim,all silently warns and only installs core isaaclab; (2) _install_no_deps_extensions is skipped when only -i ovrtx is requested, leaving isaaclab_ov uninstalled while its dependency is.
source/isaaclab/setup.py Adds usd-core / usd-exchange dependencies for Kit-less mode and new visualizer extras. The EXTRAS_REQUIRE["isaacsim"] pins to 5.1.0 while the CLI installer uses >=4.5.0 and docs advertise 6.0.0, creating inconsistency between installation paths.
source/isaaclab/isaaclab/cli/utils.py Reworked extract_python_exe to handle Kit-less environments (no _isaac_sim symlink), added import isaacsim fallback for sys.executable, and replaced hardcoded bin/python paths with platform-aware logic. The get_pip_command selects uv pip vs python -m pip based on environment.
source/isaaclab/test/cli/test_install.py New test file covering get_pip_command, extract_python_exe, extract_isaacsim_path, and determine_python_version with mocks, plus integration tests that create a fresh uv venv and install packages. The _python_in_venv and _python_for_conda helpers are platform-aware, addressing previous Windows path issues. Minor: test_builtin_tasks_registered assertion count > 50 may be fragile if task counts change.
source/isaaclab/isaaclab/cli/init.py Updated CLI help text to document visualizers, ovrtx, and `visualizers[all

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A["isaaclab.sh -i [INSTALL]"] --> B{install_type?}
    B -->|"all"| C["Install ALL extensions\n+ all RL frameworks"]
    B -->|"none"| D["Install core isaaclab only"]
    B -->|RL framework name| E["Install ALL extensions\n+ named framework"]
    B -->|"comma-separated tokens"| F["Parse tokens one by one"]

    F --> G{Token type?}
    G -->|"isaacsim"| H["install_isaacsim = True\n→ _install_isaacsim()"]
    G -->|"visualizers[extra]"| I["_parse_visualizer_selector()\n→ install with extras"]
    G -->|"RL framework"| J["framework_type = name\n+ add isaaclab_rl"]
    G -->|"valid sub-package"| K["Append isaaclab_&lt;name&gt;\nto extensions list"]
    G -->|"ovrtx"| L["install_ovrtx = True\n→ _install_ovrtx_dependency()"]
    G -->|"⚠️ all / none / unknown"| M["Warning: Unknown token\n(silently skipped!)"]

    C & D & E & K --> N["_install_isaaclab_extensions()"]
    N --> O["_ensure_cuda_torch()"]
    O --> P["_install_extra_frameworks()"]

    H --> N
    C & E --> Q["_install_no_deps_extensions()\n(isaaclab_ov --no-deps)"]
Loading

Comments Outside Diff (2)

  1. source/isaaclab/setup.py, line 79 (link)

    isaacsim extra version inconsistent across installation paths

    EXTRAS_REQUIRE["isaacsim"] pins to 5.1.0 with extscache, but the CLI installer (install.py) uses ISAACSIM_VERSION_SPEC = ">=4.5.0" with only the all extra (no extscache). The installation guide badges also advertise Isaac Sim 6.0.0.

    Depending on which installation path a user follows, they receive different Isaac Sim versions:

    • pip install isaaclab[isaacsim]isaacsim==5.1.0 with extscache
    • ./isaaclab.sh -i isaacsim → latest isaacsim>=4.5.0 without extscache

    Consider aligning these two paths (e.g., using >=6.0.0 in both, or at minimum documenting the intentional difference).

  2. source/isaaclab/isaaclab/cli/commands/install.py, line 475-476 (link)

    _install_no_deps_extensions skipped for single RL-framework installs of "none"

    _install_no_deps_extensions() is guarded by install_type == "all" or install_type in VALID_RL_FRAMEWORKS, which is correct. However, when a user explicitly requests -i ovrtx (comma-separated path), install_ovrtx=True and _install_ovrtx_dependency() is called at line 479, but _install_no_deps_extensions() is skipped, meaning isaaclab_ov is never installed even though the ovrtx dependency is. This leaves isaaclab_ov unimportable (it was not installed in the explicit-extension path) while its dependency was installed.

    Consider whether _install_no_deps_extensions() should also run when install_ovrtx is True.

Last reviewed commit: 2bfd7cc

Comment on lines 385 to 416
@@ -407,13 +407,16 @@ def command_install(install_type: str = "all") -> None:
extension_extras["isaaclab_visualizers"] = "[all]"
else:
extensions.append(f"isaaclab_{name}")
# Auto-include the matching visualizer when installing a physics backend.
if name == "newton" and "isaaclab_visualizers" not in extensions:
extensions.append("isaaclab_visualizers")
extension_extras["isaaclab_visualizers"] = "[newton]"
else:
valid = sorted(VALID_ISAACLAB_SUBPACKAGES) + sorted(VALID_RL_FRAMEWORKS)
valid = sorted(VALID_ISAACLAB_SUBPACKAGES) + sorted(VALID_RL_FRAMEWORKS) + ["isaacsim"]
print_warning(f"Unknown sub-package '{name}'. Valid values: {', '.join(valid)}. Skipping.")
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"all" token not recognised inside comma-separated parser

The special values "all" and "none" are only handled at the top-level if/elif block (lines 364–373). Inside the else branch the comma-separated parser iterates over each token, but "all" is not in VALID_ISAACLAB_SUBPACKAGES, VALID_RL_FRAMEWORKS, or the "isaacsim" shortcut, so it falls through to the else warning:

Unknown sub-package 'all'. Valid values: …. Skipping.

A user who tries -i isaacsim,all expecting to install Isaac Sim and all extensions will get:

  1. Isaac Sim installed ✓
  2. A confusing "Unknown sub-package 'all'" warning
  3. Only the bare isaaclab core installed (not all extensions) ✗

Because the help text lists all as a valid value and the warning's "Valid values" list does not include all, the experience is especially confusing.

Consider explicitly handling "all" and "none" inside the loop so they can be mixed with other tokens, or at minimum document that combining them with other tokens is unsupported.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation isaac-lab Related to Isaac Lab team

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants