diff options
Diffstat (limited to 'setuptools/__init__.py')
-rw-r--r-- | setuptools/__init__.py | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/setuptools/__init__.py b/setuptools/__init__.py index 6f588962..8d46b6dd 100644 --- a/setuptools/__init__.py +++ b/setuptools/__init__.py @@ -50,6 +50,7 @@ class PackageFinder(object): explicitly excluded packages are removed from it. """ out = cls._find_packages_iter(convert_path(where)) + out = cls.require_parents(out) includes = cls._build_filter(*include) excludes = cls._build_filter('ez_setup', '*__pycache__', *exclude) out = filter(includes, out) @@ -57,6 +58,22 @@ class PackageFinder(object): return list(out) @staticmethod + def require_parents(packages): + """ + Exclude any apparent package that apparently doesn't include its + parent. + + For example, exclude 'foo.bar' if 'foo' is not present. + """ + found = [] + for pkg in packages: + base, sep, child = pkg.rpartition('.') + if base and base not in found: + continue + found.append(pkg) + yield pkg + + @staticmethod def _all_dirs(base_path): """ Return all dirs in base_path, relative to base_path |