Avoid duplicate dependency installation

The previous commit changed the resolver logic to try all resolvers, so that
when building an environment fails, the next resolver can be tried. Since
dependency resolution and installation are coupled it would be possible to
install dependencies multiple times for different resolvers (e.g for Conda and
Conda versionless).
To avoid this we stop installation once a set of dependencies has been
resolved.
This commit is contained in:
mvdbeek
2018-01-25 12:06:47 +01:00
parent e821d469e6
commit c0cf41a15c
+8
View File
@@ -159,6 +159,9 @@ class DependencyManager(object):
# Shortcut - resolution complete for this resolver.
resolver_requirements.append(requirement_to_dependency)
# We have a complete set of dependencies, don't install
# via lower-ranked resolvers
kwds['install'] = False
continue
# Check individual requirements
@@ -178,6 +181,11 @@ class DependencyManager(object):
requirement_to_dependency[requirement] = dependency
if requirement_to_dependency:
resolver_requirements.append(requirement_to_dependency)
if (len(requirement_to_dependency) == len(resolvable_requirements) and
all(True for d in requirement_to_dependency if not isinstance(d, NullDependency))):
# We resolved all individual requirements, no need to further install dependencies
# resolved by subsequent resolvers.
kwds['install'] = False
if not resolver_requirements:
# Have at least a single empty dict
resolver_requirements.append(OrderedDict())