buildPythonPackage: fail if two packages with the same name are in closure
This commit is contained in:
parent
f3092d6446
commit
f900231042
@ -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 ''
|
||||||
|
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 New Issue
Block a user