示例#1
0
def test_Solver_return_value_contract():
    solver = Solver('/', (Channel('pkgs/main'),), specs_to_add=('openssl',))
    solve_final_state_rv = solver.solve_final_state()
    assert isiterable(solve_final_state_rv)
    assert all(isinstance(pref, PackageRecord) for pref in solve_final_state_rv)

    solve_for_diff_rv = solver.solve_for_diff()
    assert len(solve_for_diff_rv) == 2
    unlink_precs, link_precs = solve_for_diff_rv
    assert isiterable(unlink_precs)
    assert all(isinstance(pref, PackageRecord) for pref in unlink_precs)
    assert isiterable(link_precs)
    assert all(isinstance(pref, PackageRecord) for pref in link_precs)

    solve_for_transaction_rv = solver.solve_for_transaction()
    assert isinstance(solve_for_transaction_rv, UnlinkLinkTransaction)
示例#2
0
文件: test_api.py 项目: groutr/conda
def test_Solver_return_value_contract():
    solver = Solver('/', (Channel('pkgs/main'),), specs_to_add=('openssl',))
    solve_final_state_rv = solver.solve_final_state()
    assert isiterable(solve_final_state_rv)
    assert all(isinstance(pref, PackageRef) for pref in solve_final_state_rv)

    solve_for_diff_rv = solver.solve_for_diff()
    assert len(solve_for_diff_rv) == 2
    unlink_precs, link_precs = solve_for_diff_rv
    assert isiterable(unlink_precs)
    assert all(isinstance(pref, PackageRef) for pref in unlink_precs)
    assert isiterable(link_precs)
    assert all(isinstance(pref, PackageRef) for pref in link_precs)

    solve_for_transaction_rv = solver.solve_for_transaction()
    assert isinstance(solve_for_transaction_rv, UnlinkLinkTransaction)
示例#3
0
def install_package(
    versioned_package: str,
    env_dir: pathlib.Path,
    out_dir: pathlib.Path,
    verbose: bool = True,
    exit: bool = False,
):
    """
    Installs a package into an isolated environment
    :param versioned_package:
    :param env_dir:
    :param out_dir:
    :param verbose:
    :param exit:
    :return:
    """
    # Create an empty environment
    run_command(
        "create", "--yes", "--quiet", "--prefix", env_dir,
    )

    with activate_env(pathlib.Path(env_dir)):
        # Generate the query plan concurrently
        solver = Solver(
            str(env_dir),
            ["bioconda", "conda-forge", "r", "main", "free"],
            specs_to_add=[versioned_package],
        )
        try:
            transaction = solver.solve_for_transaction()
        except Exception as e:
            handle_exception(
                e,
                msg="Installing the package {}".format(versioned_package),
                log_path=(out_dir / versioned_package).with_suffix(".error.txt"),
                print=verbose,
                exit=exit,
            )
            return

        # We can't run the installs concurrently, because they used the shared conda packages cache
        with lock:
            transaction.download_and_extract()
            transaction.execute()
示例#4
0
    def install(self, prefix):
        specs = [
            pkg.to_matchspec() for pkg in self.envionrment_model.conda_packages
        ]
        if len(specs) > 0:
            solver = Solver(prefix,
                            self.envionrment_model.config.channels,
                            subdirs=self.envionrment_model.config.subdirs,
                            specs_to_add=specs)
            unlink_link_transaction = solver.solve_for_transaction()
            TransactionHandler(unlink_link_transaction).execute(
                prefix, self.envionrment_model.conda_packages, True)

        pip_pkgs = [
            "%s==%s" % (pkg.name, pkg.version)
            for pkg in self.envionrment_model.pip_packages
        ]
        if len(pip_pkgs) > 0:
            pip_args = ["install"] + pip_pkgs
            pip_util.pip_subprocess(pip_args, prefix, None)