Skip to content
Open
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions news/13443.bugfix.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Handle malformed version metadata entries and ignore packages
with invalid ``Version`` instead of crashing.
10 changes: 8 additions & 2 deletions src/pip/_internal/metadata/importlib/_dists.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
BasePath,
get_dist_canonical_name,
parse_name_and_version_from_info_directory,
BadMetadata,
)


Expand Down Expand Up @@ -165,9 +166,14 @@ def canonical_name(self) -> NormalizedName:

@property
def version(self) -> Version:
if version := parse_name_and_version_from_info_directory(self._dist)[1]:
try:
version = (
parse_name_and_version_from_info_directory(self._dist)[1]
or self._dist.version
)
return parse_version(version)
return parse_version(self._dist.version)
except TypeError:
raise BadMetadata(self._dist, reason="invalid metadata entry `version`")

@property
def raw_version(self) -> str:
Expand Down
2 changes: 2 additions & 0 deletions src/pip/_internal/metadata/importlib/_envs.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,8 @@ def _find_impl(self, location: str) -> Iterator[FoundResult]:
info_location = get_info_location(dist)
try:
name = get_dist_canonical_name(dist)
distribution = Distribution(dist, info_location, None)
getattr(distribution, "version")
except BadMetadata as e:
logger.warning("Skipping %s due to %s", info_location, e.reason)
continue
Expand Down
Loading