diff options
Diffstat (limited to 'setuptools/dist.py')
| -rw-r--r-- | setuptools/dist.py | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/setuptools/dist.py b/setuptools/dist.py index 2af25895..812b7e7a 100644 --- a/setuptools/dist.py +++ b/setuptools/dist.py @@ -277,8 +277,11 @@ class Distribution(_Distribution): 'provides_extras': ordered_set.OrderedSet, 'license_file': lambda: None, 'license_files': lambda: None, - 'install_requires': list, - 'extras_require': dict, + # Both install_requires and extras_require are needed to write PKG-INFO, + # So we take this opportunity to cache parsed requirement objects. + # These attributes are not part of the public API and intended for internal use. + '_normalized_install_requires': dict, # Dict[str, Requirement] + '_normalized_extras_require': dict, # Dict[str, Dict[str, Requirement]] } _patched_dist = None @@ -401,8 +404,6 @@ class Distribution(_Distribution): self.metadata.python_requires = self.python_requires self._normalize_requires() - self.metadata.install_requires = self.install_requires - self.metadata.extras_require = self.extras_require if self.extras_require: for extra in self.extras_require.keys(): @@ -415,9 +416,17 @@ class Distribution(_Distribution): """Make sure requirement-related attributes exist and are normalized""" install_requires = getattr(self, "install_requires", None) or [] extras_require = getattr(self, "extras_require", None) or {} - self.install_requires = list(map(str, _reqs.parse(install_requires))) + meta = self.metadata + meta._normalized_install_requires = { + str(r): r for r in _reqs.parse(install_requires) + } + meta._normalized_extras_require = { + k: {str(r): r for r in _reqs.parse(v or [])} + for k, v in extras_require.items() + } + self.install_requires = list(meta._normalized_install_requires) self.extras_require = { - k: list(map(str, _reqs.parse(v or []))) for k, v in extras_require.items() + k: list(v) for k, v in meta._normalized_extras_require.items() } def _finalize_license_files(self): |
