private static bool InstallDependencies(PythonInstall install, Dictionary <string, PythonPackage> deps, Request request) { while (deps.Count != 0) { var enumerator = deps.GetEnumerator(); enumerator.MoveNext(); PythonPackage package = enumerator.Current.Value; bool unsatisfied_deps = true; while (unsatisfied_deps) { unsatisfied_deps = false; foreach (var dep in package.requires_dist) { if (dep.marker != null && !dep.marker.Eval(install)) { continue; } if (deps.ContainsKey(NormalizeName(dep.name))) { // FIXME: Infinite loop if dep graph has cycles package = deps[NormalizeName(dep.name)]; unsatisfied_deps = true; break; } } } if (!package.Install(install, request)) { return(false); } deps.Remove(NormalizeName(package.name)); } return(true); }