buildPythonPackage: fail if two packages with the same name are in closure
This commit is contained in:
parent
f3092d6446
commit
f900231042
2 changed files with 33 additions and 0 deletions
|
@ -103,6 +103,10 @@ python.stdenv.mkDerivation (builtins.removeAttrs attrs ["disabled"] // {
|
|||
|
||||
postFixup = attrs.postFixup or ''
|
||||
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 ''
|
||||
|
|
29
pkgs/development/python-modules/generic/do_conflict.py
Normal file
29
pkgs/development/python-modules/generic/do_conflict.py
Normal 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)
|
Loading…
Reference in a new issue