def resolve(
    requirements: typing.List[str],
    index_urls: list = None,
    python_version: int = 3,
    exclude_packages: set = None,
    transitive: bool = True,
    subgraph_check_api: str = None,
) -> dict:
    """Resolve given requirements for the given Python version."""
    assert python_version in (2, 3), "Unknown Python version"

    if subgraph_check_api and not transitive:
        _LOGGER.error("The check against subgraph API cannot be done if no transitive dependencies are resolved")
        sys.exit(2)

    python_bin = "python3" if python_version == 3 else "python2"
    run_command("virtualenv -p python3 venv")
    python_bin = "venv/bin/" + python_bin

    run_command("{} -m pip install pipdeptree".format(python_bin))
    environment_details = _get_environment_details(python_bin)

    result = {"tree": [], "errors": [], "unparsed": [], "unresolved": [], "environment": environment_details}

    all_solvers = []
    for index_url in index_urls:
        source = Source(index_url)
        all_solvers.append(PythonSolver(fetcher_kwargs={"source": source}))

    for solver in all_solvers:
        solver_result = _do_resolve_index(
            python_bin=python_bin,
            solver=solver,
            all_solvers=all_solvers,
            requirements=requirements,
            exclude_packages=exclude_packages,
            transitive=transitive,
            subgraph_check_api=subgraph_check_api,
        )

        result["tree"].extend(solver_result["tree"])
        result["errors"].extend(solver_result["errors"])
        result["unparsed"].extend(solver_result["unparsed"])
        result["unresolved"].extend(solver_result["unresolved"])

    return result
def resolve ( requirements : typing . List [ str ] , index_urls : list = None , python_version : int = 3 , exclude_packages : set = None , transitive : bool = True , subgraph_check_api : str = None , ) -> dict : assert python_version in ( 2 , 3 ) , "Unknown Python version" if subgraph_check_api and not transitive : _LOGGER . error ( "The check against subgraph API cannot be done if no transitive dependencies are resolved" ) sys . exit ( 2 ) python_bin = "python3" if python_version == 3 else "python2" run_command ( "virtualenv -p python3 venv" ) python_bin = "venv/bin/" + python_bin run_command ( "{} -m pip install pipdeptree" . format ( python_bin ) ) environment_details = _get_environment_details ( python_bin ) result = { "tree" : [ ] , "errors" : [ ] , "unparsed" : [ ] , "unresolved" : [ ] , "environment" : environment_details } all_solvers = [ ] for index_url in index_urls : source = Source ( index_url ) all_solvers . append ( PythonSolver ( fetcher_kwargs = { "source" : source } ) ) for solver in all_solvers : solver_result = _do_resolve_index ( python_bin = python_bin , solver = solver , all_solvers = all_solvers , requirements = requirements , exclude_packages = exclude_packages , transitive = transitive , subgraph_check_api = subgraph_check_api , ) result [ "tree" ] . extend ( solver_result [ "tree" ] ) result [ "errors" ] . extend ( solver_result [ "errors" ] ) result [ "unparsed" ] . extend ( solver_result [ "unparsed" ] ) result [ "unresolved" ] . extend ( solver_result [ "unresolved" ] ) return result
Resolve given requirements for the given Python version.