1import pkg_resources
2import collections
3import sys
4
5do_abort = False
6packages = collections.defaultdict(list)
7
8for f in sys.path:
9 for req in pkg_resources.find_distributions(f):
10 if req not in packages[req.project_name]:
11 # some exceptions inside buildPythonPackage
12 if req.project_name in ['setuptools', 'pip', 'wheel']:
13 continue
14 packages[req.project_name].append(req)
15
16
17for name, duplicates in packages.items():
18 if len(duplicates) > 1:
19 do_abort = True
20 print("Found duplicated packages in closure for dependency '{}': ".format(name))
21 for dup in duplicates:
22 print(" " + repr(dup))
23
24if do_abort:
25 print("")
26 print(
27 'Package duplicates found in closure, see above. Usually this '
28 'happens if two packages depend on different version '
29 'of the same dependency.')
30 sys.exit(1)