buildPythonPackage: fail if two packages with the same name are in closure

This commit is contained in:
Domen Kožar 2015-11-18 11:46:21 +01:00
parent f3092d6446
commit f900231042
2 changed files with 33 additions and 0 deletions

View File

@ -103,6 +103,10 @@ python.stdenv.mkDerivation (builtins.removeAttrs attrs ["disabled"] // {
postFixup = attrs.postFixup or '' postFixup = attrs.postFixup or ''
wrapPythonPrograms wrapPythonPrograms
# check if we have two packagegs with the same name in closure and fail
# this shouldn't happen, something went wrong with dependencies specs
python ${./do_conflict.py}
''; '';
shellHook = attrs.shellHook or '' shellHook = attrs.shellHook or ''

View File

@ -0,0 +1,29 @@
import pkg_resources
import collections
import sys
do_abort = False
packages = collections.defaultdict(list)
for f in sys.path:
for req in pkg_resources.find_distributions(f):
if req not in packages[req.project_name]:
if req.project_name == 'setuptools':
continue
packages[req.project_name].append(req)
for name, duplicates in packages.iteritems():
if len(duplicates) > 1:
do_abort = True
print("Found duplicated packages in closure for dependency '{}': ".format(name))
for dup in duplicates:
print(" " + repr(dup))
if do_abort:
print("")
print(
'Package duplicates found in closure, see above. Usually this '
'happens if two packages depend on different version '
'of the same dependency.')
sys.exit(1)