diff options
| author | Jason R. Coombs <jaraco@jaraco.com> | 2022-01-06 21:20:16 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-01-06 21:20:16 -0500 |
| commit | 40725756391163a7557113b9922d2086506b9db0 (patch) | |
| tree | 1df40aa512d49d0e442e8fc7e9cff067026defbc | |
| parent | 6839fee6041cc77527db9eae155ea66c4b3c191f (diff) | |
| parent | 6c18ba25ccdc3f3efc38e7b2c8293b89e4498ecf (diff) | |
| download | python-setuptools-git-40725756391163a7557113b9922d2086506b9db0.tar.gz | |
Merge pull request #2839 from msuozzo/patch-1
Maintain `requires` order in METADATA.
| -rw-r--r-- | 2839.change.rst | 1 | ||||
| -rw-r--r-- | pkg_resources/__init__.py | 4 | ||||
| -rw-r--r-- | setuptools/tests/test_wheel.py | 33 | ||||
| -rw-r--r-- | setuptools/wheel.py | 6 |
4 files changed, 39 insertions, 5 deletions
diff --git a/2839.change.rst b/2839.change.rst new file mode 100644 index 00000000..621fa667 --- /dev/null +++ b/2839.change.rst @@ -0,0 +1 @@ +Removed `requires` sorting when installing wheels as an egg dir. diff --git a/pkg_resources/__init__.py b/pkg_resources/__init__.py index 955fdc48..f98516d1 100644 --- a/pkg_resources/__init__.py +++ b/pkg_resources/__init__.py @@ -3047,12 +3047,12 @@ class DistInfoDistribution(Distribution): if not req.marker or req.marker.evaluate({'extra': extra}): yield req - common = frozenset(reqs_for_extra(None)) + common = types.MappingProxyType(dict.fromkeys(reqs_for_extra(None))) dm[None].extend(common) for extra in self._parsed_pkg_info.get_all('Provides-Extra') or []: s_extra = safe_extra(extra.strip()) - dm[s_extra] = list(frozenset(reqs_for_extra(extra)) - common) + dm[s_extra] = [r for r in reqs_for_extra(extra) if r not in common] return dm diff --git a/setuptools/tests/test_wheel.py b/setuptools/tests/test_wheel.py index 7345b135..a15c3a46 100644 --- a/setuptools/tests/test_wheel.py +++ b/setuptools/tests/test_wheel.py @@ -148,6 +148,7 @@ def _check_wheel_install(filename, install_dir, install_tree_includes, if requires_txt is None: assert not dist.has_metadata('requires.txt') else: + # Order must match to ensure reproducibility. assert requires_txt == dist.get_metadata('requires.txt').lstrip() @@ -420,6 +421,38 @@ WHEEL_INSTALL_TESTS = ( ), dict( + id='requires_ensure_order', + install_requires=''' + foo + bar + baz + qux + ''', + extras_require={ + 'extra': ''' + foobar>3 + barbaz>4 + bazqux>5 + quxzap>6 + ''', + }, + requires_txt=DALS( + ''' + foo + bar + baz + qux + + [extra] + foobar>3 + barbaz>4 + bazqux>5 + quxzap>6 + ''' + ), + ), + + dict( id='namespace_package', file_defs={ 'foo': { diff --git a/setuptools/wheel.py b/setuptools/wheel.py index 0be811af..9819e8b9 100644 --- a/setuptools/wheel.py +++ b/setuptools/wheel.py @@ -136,13 +136,13 @@ class Wheel: def raw_req(req): req.marker = None return str(req) - install_requires = list(sorted(map(raw_req, dist.requires()))) + install_requires = list(map(raw_req, dist.requires())) extras_require = { - extra: sorted( + extra: [ req for req in map(raw_req, dist.requires((extra,))) if req not in install_requires - ) + ] for extra in dist.extras } os.rename(dist_info, egg_info) |
