diff --git a/dvc/info.py b/dvc/info.py index 396713c58..b165e0093 100644 --- a/dvc/info.py +++ b/dvc/info.py @@ -100,9 +100,11 @@ def _get_linktype_support_info(repo): def _get_subprojects(): subprojects = [] for subproject in SUBPROJECTS: - subprojects.append( - f"{subproject} = " f"{importlib_metadata.version(subproject)}" - ) + try: + version = importlib_metadata.version(subproject) + subprojects.append(f"{subproject} = {version}") + except ImportError: + pass return "\n\t" + "\n\t".join(subprojects) diff --git a/tests/func/test_version.py b/tests/func/test_version.py index 22d9a5708..22cbe4101 100644 --- a/tests/func/test_version.py +++ b/tests/func/test_version.py @@ -23,3 +23,26 @@ def test_(tmp_dir, dvc, scm, capsys): assert re.search(r"Caches: local", out) assert re.search(r"Remotes: None", out) assert "Repo: dvc, git" in out + + +def test_import_error(tmp_dir, dvc, scm, capsys, monkeypatch): + import importlib.metadata as importlib_metadata + + original = importlib_metadata.version + + def _import_error(name): + if name == "dvclive": + raise ImportError + return original(name) + + monkeypatch.setattr(importlib_metadata, "version", _import_error) + assert main(["version"]) == 0 + + out, _ = capsys.readouterr() + + for subproject in SUBPROJECTS: + match = re.search(rf"{subproject} = {DVC_VERSION_REGEX}", out) + if subproject != "dvclive": + assert match + else: + assert match is None