| 366 | |
| 367 | |
| 368 | def collect_version_summary( |
| 369 | *, |
| 370 | libraries: Iterable[LibrarySpec | str] | None = None, |
| 371 | include_module_paths: bool = False, |
| 372 | ) -> dict[str, str]: |
| 373 | specs = _normalize_library_specs(libraries) |
| 374 | summary: dict[str, str] = {} |
| 375 | |
| 376 | for spec in specs: |
| 377 | key = spec.key |
| 378 | module_name = spec.resolved_module_name() |
| 379 | |
| 380 | if spec.prefer_module_version: |
| 381 | version = _module_version(module_name) |
| 382 | if version in {"not-installed", "unknown"}: |
| 383 | version = _version(spec.resolved_dist_name()) |
| 384 | else: |
| 385 | version = _version(spec.resolved_dist_name()) |
| 386 | |
| 387 | summary[key] = version |
| 388 | |
| 389 | if include_module_paths: |
| 390 | summary[f"{key}_module_path"] = _safe_tail(_module_path(module_name)) |
| 391 | |
| 392 | return summary |
| 393 | |
| 394 | |
| 395 | @dataclass(frozen=True) |