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)
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)
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()
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)