Skip to content

Commit 31f8cac

Browse files
authored
Merge pull request #4999 from pypa/bugfix/4998-directory-not-empty
Hotfix for Directory not empty errors
2 parents 486081e + e6f9ee9 commit 31f8cac

File tree

3 files changed

+13
-4
lines changed

3 files changed

+13
-4
lines changed

newsfragments/4998.bugfix.1.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
In installer, when discovering egg dists, let metadata discovery search each egg.

newsfragments/4998.bugfix.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Only attempt to fetch eggs for unsatisfied requirements.

setuptools/installer.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from __future__ import annotations
22

33
import glob
4+
import itertools
45
import os
56
import subprocess
67
import sys
@@ -35,12 +36,20 @@ def fetch_build_egg(dist, req):
3536
return _fetch_build_egg_no_warn(dist, req)
3637

3738

39+
def _present(req):
40+
return any(_dist_matches_req(dist, req) for dist in metadata.distributions())
41+
42+
3843
def _fetch_build_eggs(dist, requires: _reqs._StrOrIter) -> list[metadata.Distribution]:
3944
_DeprecatedInstaller.emit(stacklevel=3)
4045
_warn_wheel_not_available(dist)
4146

47+
parsed_reqs = _reqs.parse(requires)
48+
49+
missing_reqs = itertools.filterfalse(_present, parsed_reqs)
50+
4251
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()
4453
)
4554
resolved_dists = [_fetch_build_egg_no_warn(dist, req) for req in needed_reqs]
4655
for dist in resolved_dists:
@@ -83,9 +92,7 @@ def _fetch_build_egg_no_warn(dist, req): # noqa: C901 # is too complex (16) #
8392
if dist.dependency_links:
8493
find_links.extend(dist.dependency_links)
8594
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'))
8996
for egg_dist in cached_dists:
9097
if _dist_matches_req(egg_dist, req):
9198
return egg_dist

0 commit comments

Comments
 (0)