feat: make IsaacLab pip/uv installable via workspace meta-package#5200
feat: make IsaacLab pip/uv installable via workspace meta-package#5200lgulich wants to merge 3 commits intoisaac-sim:mainfrom
Conversation
- 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>
Greptile SummaryThis PR migrates all package metadata from legacy
Confidence Score: 4/5Safe 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 source/isaaclab/pyproject.toml requires attention to move test dependencies to [project.optional-dependencies]. Important Files Changed
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
Reviews (1): Last reviewed commit: "fix: resolve install issues found during..." | Re-trigger Greptile |
| "transformers==4.57.6", | ||
| "einops", | ||
| "warp-lang", | ||
| "pillow==11.3.0", | ||
| "pytest", | ||
| "pytest-mock", | ||
| "junitparser", | ||
| "flatdict", | ||
| "flaky", |
There was a problem hiding this comment.
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.
| "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" |
There was a problem hiding this comment.
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.
| license = "BSD-3-Clause" | |
| requires-python = ">=3.11" |
| [tool.uv.workspace] | ||
| members = [ | ||
| "source/isaaclab", | ||
| "source/isaaclab_assets", | ||
| "source/isaaclab_tasks", | ||
| "source/isaaclab_rl", | ||
| ] |
There was a problem hiding this comment.
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.
Summary
setup.pytopyproject.toml[project]sections forisaaclab,isaaclab-assets,isaaclab-tasks,isaaclab-rlisaaclab-tasksdepends onisaaclabandisaaclab-assets)isaacsim[all,extscache]==5.1.0as a dependency ofisaaclabisaac-labmeta-package with[tool.uv.workspace]configurationextra-index-urlforpypi.nvidia.comand PyTorch CUDA wheelsindex-strategy = "unsafe-best-match"for cross-index resolutionsetup.pyas backward-compatible shims soisaaclab.sh --installstill worksDownstream usage
After this change, a downstream project can install all of IsaacLab + Isaac Sim by adding this to their
pyproject.toml:Then
uv syncinstalls everything.Test plan
uv lockresolves 245 packages successfullyuv syncinstalls all packages into a venvimportlib.metadata.version()import isaaclabworks (deeper imports require Isaac Sim runtime, which is expected)isaaclab.sh --installstill works with the shim setup.py files[tool.uv.sources]git reference🤖 Generated with Claude Code