[Wheel] Support self-contained package and Git-source installs - #7438
Conversation
Greptile SummaryThe PR flattens the wheel’s core
Confidence Score: 4/5The console-entry regression should be fixed before merging because an installed-wheel command that previously generated VS Code settings now fails argument parsing. The flattened package and resource-root changes align with the staged source and wheel layouts, but directly targeting Files Needing Attention: tools/wheel_builder/gen_pyproject.py and tools/wheel_builder/res/main.py Important Files Changed
Flowchart%%{init: {'theme': 'neutral'}}%%
flowchart LR
Source[Canonical core package] --> Stage[Wheel staging]
Resources[apps / source / tools] --> Stage
Stage --> Flat[Top-level isaaclab package]
Flat --> Root[ISAACLAB_ROOT resolution]
Root --> Runtime[CLI, AppLauncher, assets, benchmarks]
Entry[Console entry point] --> CLI[isaaclab.cli:cli]
Reviews (1): Last reviewed commit: "Flatten the installed Isaac Lab package" | Re-trigger Greptile |
There was a problem hiding this comment.
Isaac Lab Review Bot
The wheel flattening and centralized resource-root resolution are coherent, but replacing the wheel initializer removes two existing top-level callables and therefore changes the installed API despite the PR’s non-breaking claim.
- Design and architecture: Staging the canonical package directly under
isaaclabremoves the runtime__path__mutation cleanly, and centralizing resource lookup throughISAACLAB_ROOTavoids layout-specific path arithmetic. The flattened package should retain compatibility shims for behavior previously supplied by the wheel wrapper. - API: The installed package loses
isaaclab.mainandisaaclab.bootstrap_kernelwhenres/__init__.pyis no longer copied. In particular,bootstrap_kernelwas explicitly documented as retained for backwards compatibility. These symbols need a deprecation-compatible migration rather than immediate removal. - Implementation: The build ordering, direct
isaaclab.cli:cliconsole entry point, and flat-layout smoke coverage are consistent with the packaging goal. However, the smoke test does not cover the removed top-level callables; thin delegating compatibility exports in the canonical initializer would preserve the existing installed-package surface.
Minor fixes needed. Posted 1 actionable finding inline.
Automated review; human maintainers own approval decisions.
|
run-ci |
…l-package # Conflicts: # tools/wheel_builder/res/__init__.py
diegoferigo-rai
left a comment
There was a problem hiding this comment.
Thanks @StafaH for this, a long due fix! Flattening the package and resolving resources from isaaclab/_paths.py::ISAACLAB_ROOT drops the __path__ mutation, so downstream I no longer need any custom patch and can package plain upstream. The isaaclab console entry point now resolves from the flat package, and isaaclab --help/train/play run on CPU without IsaacSim 🚀
|
run-ci |
Description
Make the aggregate Isaac Lab package self-contained and directly installable from a Git revision.
The wheel previously exposed the canonical core package through a nested
isaaclab/source/isaaclab/isaaclabtree and a runtimeisaaclab.__path__mutation. In addition, downstream projects could not use the repository as a normal Git dependency: pointing a package manager atsource/isaaclabbuilt only the dependency-free leaf package and omitted repository-level runtime resources such asapps/isaaclab.python.kit.This PR:
isaaclabpackage;tools/wheel_builderas a PEP 517 package source;main()andbootstrap_kernel()compatibility APIs;--generate-vscode-settings;pyproject.tomlas the single source of truth for third-party dependencies and extras;isaaclab_*packages, Kit experience files, package data, and template resources; andtools/wheel_builder/build.shworkflow by sharing its staging implementation.No dependencies are added to the individual Isaac Lab subpackage manifests, and no public Python API is changed.
Downstream use cases
External task repositories and applications can now depend on one aggregate
isaaclabpackage at an unreleased commit or tag. They no longer need:isaaclab_*package;apps/isaaclab.python.kitresource.A downstream uv project can declare:
Pinning
revto a commit or tag makes the complete Isaac Lab code and dependency metadata reproducible in the downstream lockfile. A branch such asdevelopalso works, with the usual behavior that a future lockfile update may select a newer revision.This is particularly useful for downstream task packages that need changes from
developbefore the next Isaac Lab wheel release, and for CI systems that should resolve the complete environment without provisioning a separate source checkout.Implementation
isaaclabpackage instead of extendingisaaclab.__path__at runtime. The resource resolver lives in the conventionally namedisaaclab.pathsmodule.isaaclab.__main__; the generated console entry point targets that dispatcher rather than bypassing legacy options.isaaclab_*workspace self-references because those packages are bundled in the artifact.apps/*.kit, so asset-root discovery andAppLauncheruse the same experience files as a source checkout.Type of change
Release backport
developValidation
isaaclabfrom a pinned Git revision and thetools/wheel_buildersubdirectory.isaaclab,isaaclab_assets,isaaclab_newton,isaaclab_rl, andisaaclab_tasksfrom that fresh environment.apps/isaaclab.python.kit, resolves the default asset root, and runsisaaclab --help.tools/wheel_builder/build.shentry point.isaaclab/paths.pyreplaces_paths.py, the console entry point targetsisaaclab.__main__:main, and the Kit experience files are included.isaaclabchangelog fragments.Screenshots
Not applicable.
Checklist
source/isaaclab/changelog.d/CONTRIBUTORS.md