Skip to content

feat: make IsaacLab pip/uv installable via workspace meta-package#5200

Draft
lgulich wants to merge 3 commits intoisaac-sim:mainfrom
lgulich:feat/pip-installable
Draft

feat: make IsaacLab pip/uv installable via workspace meta-package#5200
lgulich wants to merge 3 commits intoisaac-sim:mainfrom
lgulich:feat/pip-installable

Conversation

@lgulich
Copy link
Copy Markdown
Contributor

@lgulich lgulich commented Apr 7, 2026

Summary

  • Move package metadata from setup.py to pyproject.toml [project] sections for isaaclab, isaaclab-assets, isaaclab-tasks, isaaclab-rl
  • Add inter-package dependencies (e.g. isaaclab-tasks depends on isaaclab and isaaclab-assets)
  • Add isaacsim[all,extscache]==5.1.0 as a dependency of isaaclab
  • Add root isaac-lab meta-package with [tool.uv.workspace] configuration
  • Add extra-index-url for pypi.nvidia.com and PyTorch CUDA wheels
  • Set index-strategy = "unsafe-best-match" for cross-index resolution
  • Keep setup.py as backward-compatible shims so isaaclab.sh --install still works

Downstream usage

After this change, a downstream project can install all of IsaacLab + Isaac Sim by adding this to their pyproject.toml:

dependencies = ["isaac-lab"]

[tool.uv.sources]
isaac-lab = { git = "https://github.com/isaac-sim/IsaacLab.git", branch = "main" }

[tool.uv]
extra-index-url = ["https://pypi.nvidia.com", "https://download.pytorch.org/whl/cu128"]
index-strategy = "unsafe-best-match"

Then uv sync installs everything.

Test plan

  • uv lock resolves 245 packages successfully
  • uv sync installs all packages into a venv
  • All 6 packages report correct versions via importlib.metadata.version()
  • import isaaclab works (deeper imports require Isaac Sim runtime, which is expected)
  • Verify isaaclab.sh --install still works with the shim setup.py files
  • Test from a downstream project with [tool.uv.sources] git reference

🤖 Generated with Claude Code

lgulich and others added 3 commits April 7, 2026 23:18
- Move package metadata from setup.py to pyproject.toml [project] sections
  for isaaclab, isaaclab-assets, isaaclab-tasks, isaaclab-rl
- Add inter-package dependencies (isaaclab_tasks depends on isaaclab, etc.)
- Add isaacsim[all,extscache]>=5.1.0 as dependency of isaaclab
- Add root isaac-lab meta-package with uv workspace configuration
- Add extra-index-url for pypi.nvidia.com and PyTorch CUDA wheels
- Keep setup.py as backward-compatible shims for isaaclab.sh --install

Downstream projects can now add isaac-lab to their pyproject.toml and
install everything via uv sync.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Pin isaacsim[all,extscache]==5.1.0 (exact match for this release)
- Set requires-python = ">=3.11" (isaacsim 5.1 requires 3.11)
- Add index-strategy = "unsafe-best-match" so uv checks all indexes
- Remove starlette==0.49.1 pin (conflicts with isaacsim's fastapi)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add [tool.setuptools] packages = [] to root (meta-package has no code)
- Add extra-build-dependencies for flatdict (needs setuptools/pkg_resources)
- Unpin flatdict version (4.0.1 has broken build with modern setuptools)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@github-actions github-actions bot added asset New asset feature or request infrastructure labels Apr 7, 2026
@lgulich lgulich marked this pull request as draft April 7, 2026 21:40
@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps bot commented Apr 7, 2026

Greptile Summary

This PR migrates all package metadata from legacy setup.py scripts to pyproject.toml [project] sections and adds a root isaac-lab meta-package that makes the entire workspace installable via uv sync.

  • Test dependencies as production deps: pytest, pytest-mock, junitparser, and flaky are in isaaclab's main dependencies array — these should move to [project.optional-dependencies.test] to avoid bloating every downstream install.
  • requires-python mismatch: isaaclab-assets, isaaclab-tasks, and isaaclab-rl advertise >=3.10 while the root meta-package and isaaclab itself require >=3.11; these should be aligned to avoid misleading standalone installs.

Confidence Score: 4/5

Safe to merge after moving test tools to optional dependencies to avoid polluting downstream installs.

One P1 finding: test/dev tools (pytest, pytest-mock, junitparser, flaky) are listed as production runtime deps of isaaclab, which forces them into every downstream install via the new meta-package. The remaining findings are P2 (requires-python inconsistency, undocumented workspace exclusions). The P1 should be addressed before merge.

source/isaaclab/pyproject.toml requires attention to move test dependencies to [project.optional-dependencies].

Important Files Changed

Filename Overview
pyproject.toml New root isaac-lab meta-package with uv workspace config; isaaclab_mimic/isaaclab_contrib excluded from workspace members without explanation.
source/isaaclab/pyproject.toml Core package metadata migrated to pyproject.toml; test tools (pytest, pytest-mock, junitparser, flaky) incorrectly listed as production runtime dependencies.
source/isaaclab/setup.py Backward-compatible shim delegating to pyproject.toml; no issues.
source/isaaclab_assets/pyproject.toml Package metadata migrated correctly; requires-python = ">=3.10" is inconsistent with workspace-wide 3.11 minimum.
source/isaaclab_assets/setup.py Backward-compatible shim; no issues.
source/isaaclab_rl/pyproject.toml Package metadata migrated with RL optional extras; requires-python = ">=3.10" inconsistency with workspace; packaging<24 constraint may conflict with other packages.
source/isaaclab_rl/setup.py Backward-compatible shim; no issues.
source/isaaclab_tasks/pyproject.toml Package metadata migrated correctly; requires-python = ">=3.10" inconsistency with workspace.
source/isaaclab_tasks/setup.py Backward-compatible shim; no issues.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    meta["isaac-lab (meta-package)\nroot pyproject.toml"]
    core["isaaclab\nsource/isaaclab/"]
    assets["isaaclab-assets\nsource/isaaclab_assets/"]
    tasks["isaaclab-tasks\nsource/isaaclab_tasks/"]
    rl["isaaclab-rl\nsource/isaaclab_rl/"]
    isaacsim["isaacsim[all,extscache]==5.1.0\n(pypi.nvidia.com)"]
    torch["torch>=2.7\n(PyTorch CUDA wheels)"]
    meta --> core
    meta --> assets
    meta --> tasks
    meta --> rl
    core --> isaacsim
    core --> torch
    assets --> core
    tasks --> core
    tasks --> assets
    rl --> core
    rl --> assets
    rl --> tasks
    style meta fill:#4CAF50,color:#fff
    style isaacsim fill:#76b900,color:#fff
Loading

Reviews (1): Last reviewed commit: "fix: resolve install issues found during..." | Re-trigger Greptile

Comment on lines +22 to +30
"transformers==4.57.6",
"einops",
"warp-lang",
"pillow==11.3.0",
"pytest",
"pytest-mock",
"junitparser",
"flatdict",
"flaky",
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

P1 Test tools as production runtime dependencies

pytest, pytest-mock, junitparser, and flaky are in the main dependencies array, so every downstream user who installs isaaclab (including via the new isaac-lab meta-package) is forced to also install these dev/test tools. They should be moved to [project.optional-dependencies] under a test extra.

Suggested change
"transformers==4.57.6",
"einops",
"warp-lang",
"pillow==11.3.0",
"pytest",
"pytest-mock",
"junitparser",
"flatdict",
"flaky",
"flatdict",
"packaging",
'pin-pink==3.1.0 ; platform_system == "Linux" and platform_machine in "x86_64,AMD64,aarch64,arm64"',
'daqp==0.7.2 ; platform_system == "Linux" and platform_machine in "x86_64,AMD64,aarch64,arm64"',
'dex-retargeting==0.4.6 ; platform_system == "Linux" and platform_machine in "x86_64,AMD64"',
]
[project.optional-dependencies]
test = [
"pytest",
"pytest-mock",
"junitparser",
"flaky",
]

name = "isaaclab-assets"
version = "0.2.4"
description = "Asset configurations for Isaac Lab"
license = "BSD-3-Clause"
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

P2 Inconsistent requires-python across workspace members

isaaclab-assets, isaaclab-rl, and isaaclab-tasks all declare requires-python = ">=3.10", while the root meta-package (pyproject.toml line 15) and isaaclab itself both require >=3.11. Since all packages are installed together via the workspace, the effective minimum is 3.11 — advertising >=3.10 in the sub-packages is misleading and could cause unexpected resolver behavior if they are ever installed standalone.

Suggested change
license = "BSD-3-Clause"
requires-python = ">=3.11"

Comment on lines +33 to +39
[tool.uv.workspace]
members = [
"source/isaaclab",
"source/isaaclab_assets",
"source/isaaclab_tasks",
"source/isaaclab_rl",
]
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

P2 isaaclab_mimic and isaaclab_contrib excluded from workspace

source/isaaclab_mimic and source/isaaclab_contrib exist as sibling extensions with their own setup.py files but are not listed as workspace members. A uv sync on the root will not install them. If this is intentional, a brief comment here would help future contributors understand the omission was deliberate.

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

Labels

asset New asset feature or request infrastructure

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant