From aafef805a8da6913c155a3df69b271d412307f5b Mon Sep 17 00:00:00 2001 From: Peter Corke Date: Mon, 17 Aug 2026 12:48:01 +1000 Subject: [PATCH] fix: alias importlib.metadata.version to avoid wildcard-import shadowing rvctool.py imports version from importlib.metadata, then later does `from spatialmath.base import *`. If spatialmath.base ever exports its own `version` symbol, the wildcard import silently shadows the metadata one, and every f"...=={version(pkg)}" call in make_banner() breaks with TypeError: version() takes 0 positional arguments but 1 was given. This isn't hypothetical -- it's issue #26, hit by several users on an earlier spatialmath-python release that did export such a symbol. It doesn't reproduce with the currently pinned dependency versions, which is exactly what made it easy to miss: the bug is dormant, not fixed. Aliasing the import (`version as pkg_version`) removes the name clash entirely, regardless of what any wildcard-imported module exports now or in the future. Fixes #26 --- RVC3/bin/rvctool.py | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/RVC3/bin/rvctool.py b/RVC3/bin/rvctool.py index 57b0197..3f4fd17 100755 --- a/RVC3/bin/rvctool.py +++ b/RVC3/bin/rvctool.py @@ -15,7 +15,8 @@ import shlex import sys import textwrap -from importlib.metadata import PackageNotFoundError, version +from importlib.metadata import PackageNotFoundError +from importlib.metadata import version as pkg_version from math import pi # lgtm [py/unused-import] import pathlib @@ -258,17 +259,17 @@ def get_versions(args, torch_modules=None): versions = [f"Python=={sys.version.split()[0]}"] if args.robot: - versions.append(f"RTB=={version('roboticstoolbox-python')}") + versions.append(f"RTB=={pkg_version('roboticstoolbox-python')}") if args.vision: - versions.append(f"MVTB=={version('machinevision-toolbox-python')}") - versions.append(f"SG=={version('spatialgeometry')}") - versions.append(f"SMTB=={version('spatialmath-python')}") - versions.append(f"bdsim=={version('bdsim')}") - versions.append(f"NumPy=={version('numpy')}") - versions.append(f"SciPy=={version('scipy')}") - versions.append(f"Matplotlib=={version('matplotlib')}") + versions.append(f"MVTB=={pkg_version('machinevision-toolbox-python')}") + versions.append(f"SG=={pkg_version('spatialgeometry')}") + versions.append(f"SMTB=={pkg_version('spatialmath-python')}") + versions.append(f"bdsim=={pkg_version('bdsim')}") + versions.append(f"NumPy=={pkg_version('numpy')}") + versions.append(f"SciPy=={pkg_version('scipy')}") + versions.append(f"Matplotlib=={pkg_version('matplotlib')}") try: - versions.append(f"Open3D=={version('open3d')}") + versions.append(f"Open3D=={pkg_version('open3d')}") except PackageNotFoundError: versions.append("Open3D==not installed") if "torch" in torch_modules: