-
Notifications
You must be signed in to change notification settings - Fork 3.3k
Description
[bug] usd-core and usd-exchange in INSTALL_REQUIRES break Omniverse/Kit-based workflows
Describe the bug
source/isaaclab/setup.py (lines 72-76) unconditionally adds usd-core and usd-exchange to INSTALL_REQUIRES:
# Adds OpenUSD dependencies based on architecture for Kit less mode.
INSTALL_REQUIRES += [
f"usd-core==25.8.0 ; ({SUPPORTED_ARCHS})",
f"usd-exchange>=2.2 ; ({SUPPORTED_ARCHS_ARM})",
]The comment indicates these are intended for "Kit less mode," but because they are in INSTALL_REQUIRES, they are also installed when running with Omniverse Kit / IsaacSim.
These packages install their own pxr Python bindings (with compiled C++ .so files) into site-packages/pxr/, which conflict with the pxr modules provided by Omniverse in the extension cache (omni.usd.libs, omni.usd.schema.physx, etc.). The two pxr installations have incompatible Boost.Python type converter registrations, causing all Omniverse extension loading to fail during SimulationApp._start_app().
Note: uninstalling only usd-core is insufficient — usd-exchange ships its own complete pxr package with .so binaries independently.
Steps to reproduce
- Local build of IsaacSim 6.0 + IsaacLab develop branch
- Run any script that launches SimulationApp (e.g., a training script via
python train.py --task ...) - Observe crash during
SimulationApp._start_app()
2026-03-14T18:36:50Z [Error] [omni.ext._impl._internal] Failed to import python module pxr.PhysxSchema from .../omni.usd.schema.physx-110.0.7...
RuntimeError: extension class wrapper for base class pxrInternal_v0_25_11__pxrReserved__::UsdAPISchemaBase has not been created yet
2026-03-14T18:36:50Z [Error] [omni.ext._impl._internal] Failed to import python module omni.usd from .../omni.usd-1.13.61...
TypeError: No to_python (by-value) converter found for C++ type: std::vector<pxrInternal_v0_25_11__pxrReserved__::SdfPath, ...>
2026-03-14T18:36:51Z [Error] [omni.ext._impl._internal] Failed to import python module omni.physx from .../omni.physx-110.0.7...
TypeError: No to_python (by-value) converter found for C++ type: pxrInternal_v0_25_11__pxrReserved__::SdfVariability
Coding Error: in DefinePythonClass at line 929 of .../pxr/base/tf/type.cpp -- TfType 'UsdNotice::StageNotice' already has a defined Python type; cannot redefine
RuntimeError: Caught an unknown exception!
> .../isaacsim/simulation_app/simulation_app.py(579)_start_app()
-> self.app.startup("kit", os.environ["CARB_APP_PATH"], args)
Workaround: After installing Isaac Lab, uninstall the conflicting packages:
pip uninstall usd-core usd-exchangeSystem Info
- Commit: 2685e7d (develop)
- Isaac Sim Version: 6.0.0-alpha.132+develop.0.302270d0.local
- OS: Ubuntu 24.04
- GPU: NVIDIA RTX PRO 6000 Blackwell Workstation Edition
- CUDA: 12.8
- GPU Driver: 590.48.01
Additional context
The root cause is that usd-core and usd-exchange both install pxr/ packages into site-packages with their own compiled C++ bindings. When Omniverse Kit starts, it loads its own pxr modules from the extension cache, but Python's import system finds the site-packages/pxr first (or mixes modules from both locations), resulting in incompatible Boost.Python type converters.
A possible fix would be to move these dependencies into an extras_require group so they are only installed when explicitly requested for Kit-less mode:
EXTRAS_REQUIRE = {
...
"kitless": [
f"usd-core==25.8.0 ; ({SUPPORTED_ARCHS})",
f"usd-exchange>=2.2 ; ({SUPPORTED_ARCHS_ARM})",
],
}Users running without Kit would install via pip install -e ".[kitless]".
Note: Made with Claude + Cursor
Checklist
- I have checked that there is no similar issue in the repo (required)