From 42d4d0486393f2a4a63b2c7e29560bfce5ac31ce Mon Sep 17 00:00:00 2001 From: Alex Hedges Date: Thu, 2 Sep 2021 14:57:25 -0400 Subject: [PATCH 1/4] Sort Requires and Required-By fields for pip show --- news/1BFF89B5-83F9-405D-AFEB-72B082EB4155.trivial.rst | 0 src/pip/_internal/commands/show.py | 9 +++++++-- 2 files changed, 7 insertions(+), 2 deletions(-) create mode 100644 news/1BFF89B5-83F9-405D-AFEB-72B082EB4155.trivial.rst diff --git a/news/1BFF89B5-83F9-405D-AFEB-72B082EB4155.trivial.rst b/news/1BFF89B5-83F9-405D-AFEB-72B082EB4155.trivial.rst new file mode 100644 index 00000000000..e69de29bb2d diff --git a/src/pip/_internal/commands/show.py b/src/pip/_internal/commands/show.py index 0bbe1209afe..a02fe4e1505 100644 --- a/src/pip/_internal/commands/show.py +++ b/src/pip/_internal/commands/show.py @@ -155,6 +155,11 @@ def _files_from_legacy(dist: BaseDistribution) -> Optional[Iterator[str]]: except KeyError: continue + requires = sorted( + (req.name for req in dist.iter_dependencies()), key=lambda pkg: pkg.lower() + ) + required_by = sorted(_get_requiring_packages(dist), key=lambda pkg: pkg.lower()) + try: entry_points_text = dist.read_text("entry_points.txt") entry_points = entry_points_text.splitlines(keepends=False) @@ -173,8 +178,8 @@ def _files_from_legacy(dist: BaseDistribution) -> Optional[Iterator[str]]: name=dist.raw_name, version=str(dist.version), location=dist.location or "", - requires=[req.name for req in dist.iter_dependencies()], - required_by=_get_requiring_packages(dist), + requires=requires, + required_by=required_by, installer=dist.installer, metadata_version=dist.metadata_version or "", classifiers=metadata.get_all("Classifier", []), From 75f6383d4fceea262e472c818e6f7d7b08b54849 Mon Sep 17 00:00:00 2001 From: Alex Hedges Date: Fri, 3 Sep 2021 16:13:21 -0400 Subject: [PATCH 2/4] Replace lambda with str.lower --- src/pip/_internal/commands/show.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/pip/_internal/commands/show.py b/src/pip/_internal/commands/show.py index a02fe4e1505..bcd8eaa7e61 100644 --- a/src/pip/_internal/commands/show.py +++ b/src/pip/_internal/commands/show.py @@ -155,10 +155,8 @@ def _files_from_legacy(dist: BaseDistribution) -> Optional[Iterator[str]]: except KeyError: continue - requires = sorted( - (req.name for req in dist.iter_dependencies()), key=lambda pkg: pkg.lower() - ) - required_by = sorted(_get_requiring_packages(dist), key=lambda pkg: pkg.lower()) + requires = sorted((req.name for req in dist.iter_dependencies()), key=str.lower) + required_by = sorted(_get_requiring_packages(dist), key=str.lower) try: entry_points_text = dist.read_text("entry_points.txt") From 0e9aad5cdc0246eb6eebee6c30befaf8d71eb039 Mon Sep 17 00:00:00 2001 From: Alex Hedges Date: Fri, 3 Sep 2021 16:17:38 -0400 Subject: [PATCH 3/4] Make _get_requiring_packages() return an Iterator --- src/pip/_internal/commands/show.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pip/_internal/commands/show.py b/src/pip/_internal/commands/show.py index bcd8eaa7e61..872292a2b6a 100644 --- a/src/pip/_internal/commands/show.py +++ b/src/pip/_internal/commands/show.py @@ -113,13 +113,13 @@ def search_packages_info(query: List[str]) -> Iterator[_PackageInfo]: if missing: logger.warning("Package(s) not found: %s", ", ".join(missing)) - def _get_requiring_packages(current_dist: BaseDistribution) -> List[str]: - return [ + def _get_requiring_packages(current_dist: BaseDistribution) -> Iterator[str]: + return ( dist.metadata["Name"] or "UNKNOWN" for dist in installed.values() if current_dist.canonical_name in {canonicalize_name(d.name) for d in dist.iter_dependencies()} - ] + ) def _files_from_record(dist: BaseDistribution) -> Optional[Iterator[str]]: try: From 3d7267886f7d589a9392d48f6eb3a7d0194a8f46 Mon Sep 17 00:00:00 2001 From: Alex Hedges Date: Sat, 4 Sep 2021 13:44:46 -0400 Subject: [PATCH 4/4] Switch news file to feature --- news/10422.feature.rst | 1 + news/1BFF89B5-83F9-405D-AFEB-72B082EB4155.trivial.rst | 0 2 files changed, 1 insertion(+) create mode 100644 news/10422.feature.rst delete mode 100644 news/1BFF89B5-83F9-405D-AFEB-72B082EB4155.trivial.rst diff --git a/news/10422.feature.rst b/news/10422.feature.rst new file mode 100644 index 00000000000..d4d6d824c96 --- /dev/null +++ b/news/10422.feature.rst @@ -0,0 +1 @@ +``pip show`` now sorts ``Requires`` and ``Required-By`` alphabetically. diff --git a/news/1BFF89B5-83F9-405D-AFEB-72B082EB4155.trivial.rst b/news/1BFF89B5-83F9-405D-AFEB-72B082EB4155.trivial.rst deleted file mode 100644 index e69de29bb2d..00000000000