Skip to content

Commit a0fd163

Browse files
committed
Use metadata name
Use original metadata name when converting installed distributions to pip requirements, to be closer to what pip freeze does.
1 parent ba828da commit a0fd163

File tree

1 file changed

+15
-3
lines changed

1 file changed

+15
-3
lines changed

src/pip_deepfreeze/installed_dist.py

+15-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from abc import ABC, abstractproperty
2-
from typing import Any, Dict, List, Optional
2+
from typing import Any, Dict, Iterator, List, Optional, cast
33

44
from packaging.requirements import Requirement
55
from packaging.utils import NormalizedName, canonicalize_name
@@ -51,6 +51,10 @@ def __init__(self, data: Dict[str, Any]):
5151
def name(self) -> NormalizedName:
5252
return canonicalize_name(self.data["metadata"]["name"])
5353

54+
@property
55+
def metadata_name(self) -> str:
56+
return cast(str, self.data["metadata"]["name"])
57+
5458
@property
5559
def version(self) -> str:
5660
version = self.data["metadata"]["version"]
@@ -83,8 +87,8 @@ def as_pip_requirement(self) -> str:
8387
"""Convert to a pip requirement string."""
8488
direct_url = self.direct_url
8589
if direct_url is None:
86-
return f"{self.name}=={self.version}"
87-
return direct_url.as_pip_requirement(self.name)
90+
return f"{self.metadata_name}=={self.version}"
91+
return direct_url.as_pip_requirement(self.metadata_name)
8892

8993

9094
class EnvInfoInstalledDistribution(InstalledDistribution):
@@ -142,3 +146,11 @@ def __init__(self, data: Dict[str, Any], environment: Dict[str, str]):
142146

143147

144148
InstalledDistributions = Dict[NormalizedName, InstalledDistribution]
149+
150+
151+
def installed_distributions_as_pip_requirements(
152+
installed_distributions: InstalledDistributions,
153+
) -> Iterator[str]:
154+
"""Iterate installed distributions as pip frozen requirements."""
155+
for _, dist in sorted(installed_distributions.items()):
156+
yield dist.as_pip_requirement()

0 commit comments

Comments
 (0)