|
1 | 1 | from __future__ import annotations
|
2 | 2 |
|
3 | 3 | import glob
|
| 4 | +import itertools |
4 | 5 | import os
|
5 | 6 | import subprocess
|
6 | 7 | import sys
|
@@ -35,12 +36,20 @@ def fetch_build_egg(dist, req):
|
35 | 36 | return _fetch_build_egg_no_warn(dist, req)
|
36 | 37 |
|
37 | 38 |
|
| 39 | +def _present(req): |
| 40 | + return any(_dist_matches_req(dist, req) for dist in metadata.distributions()) |
| 41 | + |
| 42 | + |
38 | 43 | def _fetch_build_eggs(dist, requires: _reqs._StrOrIter) -> list[metadata.Distribution]:
|
39 | 44 | _DeprecatedInstaller.emit(stacklevel=3)
|
40 | 45 | _warn_wheel_not_available(dist)
|
41 | 46 |
|
| 47 | + parsed_reqs = _reqs.parse(requires) |
| 48 | + |
| 49 | + missing_reqs = itertools.filterfalse(_present, parsed_reqs) |
| 50 | + |
42 | 51 | needed_reqs = (
|
43 |
| - req for req in _reqs.parse(requires) if not req.marker or req.marker.evaluate() |
| 52 | + req for req in missing_reqs if not req.marker or req.marker.evaluate() |
44 | 53 | )
|
45 | 54 | resolved_dists = [_fetch_build_egg_no_warn(dist, req) for req in needed_reqs]
|
46 | 55 | for dist in resolved_dists:
|
@@ -83,9 +92,7 @@ def _fetch_build_egg_no_warn(dist, req): # noqa: C901 # is too complex (16) #
|
83 | 92 | if dist.dependency_links:
|
84 | 93 | find_links.extend(dist.dependency_links)
|
85 | 94 | eggs_dir = os.path.realpath(dist.get_egg_cache_dir())
|
86 |
| - cached_dists = metadata.Distribution.discover( |
87 |
| - path=glob.glob(f'{eggs_dir}/*.egg/EGG-INFO') |
88 |
| - ) |
| 95 | + cached_dists = metadata.Distribution.discover(path=glob.glob(f'{eggs_dir}/*.egg')) |
89 | 96 | for egg_dist in cached_dists:
|
90 | 97 | if _dist_matches_req(egg_dist, req):
|
91 | 98 | return egg_dist
|
|
0 commit comments