コード例 #1
0
        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);
        }