Skip to content

Commit e3723ef

Browse files
authored
Fixs isaaclab.sh to detect isaacsim_version accurately 4.5 or >= 5.0 (isaac-sim#3139)
# Description Current is_isaacsim_version_4_5() sometimes mis-detects 5.0 when running 4.5 (e.g., Docker/symlinked installs), causing the conda bootstrap to pick Python 3.11 instead of 3.10. This pr ensures determining the isaacsim version following below steps 1. Read ${ISAACLAB_PATH}/_isaac_sim/VERSION (symlink/binary install). 2. If unknown, import isaacsim and read ../../VERSION next to the package. (pip installation) 3. If still unknown, fall back to importlib.metadata.version("isaacsim"). I tested locally to work with 4.5 pip or binary install. <!-- As you go through the list, delete the ones that are not applicable. --> - Bug fix (non-breaking change which fixes an issue) ## Screenshots Please attach before and after screenshots of the change if applicable. <!-- Example: | Before | After | | ------ | ----- | | _gif/png before_ | _gif/png after_ | To upload images to a PR -- simply drag and drop an image while in edit mode and it should upload the image directly. You can then paste that source into the above before/after sections. --> ## Checklist - [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with `./isaaclab.sh --format` - [ ] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [x] I have updated the changelog and the corresponding version in the extension's `config/extension.toml` file - [x] I have added my name to the `CONTRIBUTORS.md` or my name already exists there <!-- As you go through the checklist above, you can mark something as done by putting an x character in it For example, - [x] I have done this task - [ ] I have not done this task -->
1 parent 618de51 commit e3723ef

File tree

1 file changed

+31
-16
lines changed

1 file changed

+31
-16
lines changed

isaaclab.sh

Lines changed: 31 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -43,33 +43,48 @@ install_system_deps() {
4343
fi
4444
}
4545

46+
# Returns success (exit code 0 / "true") if the detected Isaac Sim version starts with 4.5,
47+
# otherwise returns non-zero ("false"). Works with both symlinked binary installs and pip installs.
4648
is_isaacsim_version_4_5() {
49+
local version=""
4750
local python_exe
4851
python_exe=$(extract_python_exe)
4952

50-
# 1) Try the VERSION file
51-
local sim_file
52-
sim_file=$("${python_exe}" -c "import isaacsim; print(isaacsim.__file__)" 2>/dev/null) || return 1
53-
local version_path
54-
version_path=$(dirname "${sim_file}")/../../VERSION
55-
if [[ -f "${version_path}" ]]; then
56-
local ver
57-
ver=$(head -n1 "${version_path}")
58-
[[ "${ver}" == 4.5* ]] && return 0
53+
# 0) Fast path: read VERSION file from the symlinked _isaac_sim directory (binary install)
54+
# If the repository has _isaac_sim → <IsaacSimRoot> symlink, the VERSION file is the simplest source of truth.
55+
if [[ -f "${ISAACLAB_PATH}/_isaac_sim/VERSION" ]]; then
56+
# Read first line of the VERSION file; don't fail the whole script on errors.
57+
version=$(head -n1 "${ISAACLAB_PATH}/_isaac_sim/VERSION" || true)
5958
fi
6059

61-
# 2) Fallback to importlib.metadata via a here-doc
62-
local ver
63-
ver=$("${python_exe}" <<'PYCODE' 2>/dev/null
60+
# 1) Package-path probe: import isaacsim and walk up to ../../VERSION (pip or nonstandard layouts)
61+
# If we still don't know the version, ask Python where the isaacsim package lives
62+
if [[ -z "$version" ]]; then
63+
local sim_file=""
64+
# Print isaacsim.__file__; suppress errors so set -e won't abort.
65+
sim_file=$("${python_exe}" -c 'import isaacsim, os; print(isaacsim.__file__)' 2>/dev/null || true)
66+
if [[ -n "$sim_file" ]]; then
67+
local version_path
68+
version_path="$(dirname "$sim_file")/../../VERSION"
69+
# If that VERSION file exists, read it.
70+
[[ -f "$version_path" ]] && version=$(head -n1 "$version_path" || true)
71+
fi
72+
fi
73+
74+
# 2) Fallback: use package metadata via importlib.metadata.version("isaacsim")
75+
if [[ -z "$version" ]]; then
76+
version=$("${python_exe}" <<'PY' 2>/dev/null || true
6477
from importlib.metadata import version, PackageNotFoundError
6578
try:
6679
print(version("isaacsim"))
6780
except PackageNotFoundError:
68-
import sys; sys.exit(1)
69-
PYCODE
70-
) || return 1
81+
pass
82+
PY
83+
)
84+
fi
7185

72-
[[ "${ver}" == 4.5* ]]
86+
# Final decision: return success if version begins with "4.5", 0 if match, 1 otherwise.
87+
[[ "$version" == 4.5* ]]
7388
}
7489

7590
# check if running in docker

0 commit comments

Comments
 (0)