summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason R. Coombs <jaraco@jaraco.com>2022-01-06 21:20:16 -0500
committerGitHub <noreply@github.com>2022-01-06 21:20:16 -0500
commit40725756391163a7557113b9922d2086506b9db0 (patch)
tree1df40aa512d49d0e442e8fc7e9cff067026defbc
parent6839fee6041cc77527db9eae155ea66c4b3c191f (diff)
parent6c18ba25ccdc3f3efc38e7b2c8293b89e4498ecf (diff)
downloadpython-setuptools-git-40725756391163a7557113b9922d2086506b9db0.tar.gz
Merge pull request #2839 from msuozzo/patch-1
Maintain `requires` order in METADATA.
-rw-r--r--2839.change.rst1
-rw-r--r--pkg_resources/__init__.py4
-rw-r--r--setuptools/tests/test_wheel.py33
-rw-r--r--setuptools/wheel.py6
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)