Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 4 additions & 5 deletions NAMESPACE
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,11 @@ export(which_env)
export(yaml_to_env)
import(R.utils)
importFrom(basilisk,BasiliskEnvironment)
importFrom(basilisk,isWindows)
importFrom(basilisk,listPackages)
importFrom(basilisk.utils,activateEnvironment)
importFrom(basilisk.utils,deactivateEnvironment)
importFrom(basilisk.utils,getCondaBinary)
importFrom(basilisk.utils,getCondaDir)
importFrom(basilisk.utils,installConda)
importFrom(basilisk.utils,defaultCacheDirectory)
importFrom(basilisk.utils,download)
importFrom(basilisk.utils,find)
importFrom(data.table,":=")
importFrom(data.table,fread)
importFrom(data.table,rbindlist)
Expand Down
1 change: 0 additions & 1 deletion R/activate_env.R
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
#' @family conda
#'
#' @export
#' @importFrom basilisk.utils activateEnvironment
#' @importFrom reticulate conda_list use_condaenv use_python conda_list
#' @examples
#' conda_env <- echoconda::activate_env(conda_env = "echoR_mini")
Expand Down
17 changes: 7 additions & 10 deletions R/activate_env_basilisk.R
Original file line number Diff line number Diff line change
@@ -1,13 +1,10 @@
activate_env_basilisk <- function(conda_env,
loc=basilisk.utils::getCondaDir(),
loc=NULL,
verbose=TRUE){

messager("Activating conda env via basilisk:",
paste0("'",conda_env,"'"),v = verbose)
## Supplying the full path to the env dir
## is much more robust than simply supplying the env name.
envs <- list_envs(conda_env = conda_env,
method = "basilisk")
out <- basilisk.utils::activateEnvironment(envpath = envs$dir,
loc = loc)
## Note: basilisk.utils::activateEnvironment was removed in newer versions.
## Now using reticulate-based activation instead.
messager("Activating conda env:",
paste0("'",conda_env,"'"),v = verbose)
activate_env_reticulate(conda_env = conda_env,
verbose = verbose)
}
2 changes: 1 addition & 1 deletion R/basilisk.R
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ create_env_basilisk <- function(yaml_path,
simplify = TRUE)[,1]
#### Remove deps that aren't available on Windows ####
## (at least, for specific versions)
if(basilisk.utils::isWindows()){
if(basilisk::isWindows()){
deps <- deps[!deps %in% c("wget","gzip","htslib","axel")]
}
#### Subset to only core packages ####
Expand Down
24 changes: 10 additions & 14 deletions R/find_conda.R
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
#' Find conda
#'
#' Find conda executable from multiple installations:
#' Find conda
#'
#' Find conda executable from multiple installations:
#' \pkg{reticulate}, \pkg{basilisk}
#'
#'
#' @param method Method to use:
#' \itemize{
#' \item{"basilisk"}
Expand All @@ -11,27 +11,23 @@
#' @inheritParams reticulate::conda_binary
#'
#' @export
#' @importFrom basilisk.utils getCondaBinary getCondaDir
#' @importFrom basilisk.utils find
find_conda <- function(conda="auto",
method=c("basilisk","reticulate")){
method <- tolower(method)[1]
method <- tolower(method)[1]
if(method=="basilisk"){
conda_x <- basilisk.utils::getCondaBinary(
loc = basilisk.utils::getCondaDir()
)
conda_x <- basilisk.utils::find()
#### If it fails, use the other method ####
if(!file.exists(conda_x)){
if(is.null(conda_x) || !file.exists(conda_x)){
conda_x <- reticulate::conda_binary(conda = conda)
}
} else if(method=="reticulate"){
} else if(method=="reticulate"){
## Not clear on how these are different. Return same file on Mac.
# conda_x <- reticulate::conda_exe(conda = conda)
conda_x <- reticulate::conda_binary(conda = conda)
#### If it fails, use the other method ####
if(!file.exists(conda_x)){
conda_x <- basilisk.utils::getCondaBinary(
loc = basilisk.utils::getCondaDir()
)
conda_x <- basilisk.utils::find()
}
} else {
stop("method not recognized.")
Expand Down
14 changes: 7 additions & 7 deletions R/install_conda_basilisk.R
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@
#'
#' Install conda if it has not already been installed.
#' @param verbose Print messages.
#'
#'
#' @keywords internal
#' @importFrom basilisk.utils installConda
#' @importFrom basilisk.utils download defaultCacheDirectory
install_conda_basilisk <- function(verbose=TRUE){
# Sys.setenv("BASILISK_USE_SYSTEM_DIR"=1)
new_install <- basilisk.utils::installConda(installed = FALSE)
if(isTRUE(new_install)){
messager("echoconda:: Installing conda via basilisk.",v=verbose)
} else {
messager("echoconda:: conda already installed.",v=verbose)
cache_dir <- basilisk.utils::defaultCacheDirectory()
messager("echoconda:: Installing/checking conda via basilisk.", v=verbose)
conda_path <- basilisk.utils::download()
if(!is.null(conda_path) && dir.exists(conda_path)){
messager("echoconda:: conda available at:", conda_path, v=verbose)
}
}
24 changes: 11 additions & 13 deletions R/remove_env.R
Original file line number Diff line number Diff line change
@@ -1,37 +1,35 @@
#' Remove conda environment
#'
#'
#' Actually remove conda environments,
#' unlike \code{reticulate}::\link[reticulate]{conda_remove}.
#'
#' @param conda_env Name of the conda environment.
#' @param verbose Print messages.
#'
#'
#' @param conda_env Name of the conda environment.
#' @param verbose Print messages.
#'
#' @inheritParams find_conda
#' @inheritParams reticulate::conda_list
#' @export
#' @importFrom basilisk.utils deactivateEnvironment
#' @importFrom reticulate conda_remove
remove_env <- function(conda_env,
remove_env <- function(conda_env,
conda="auto",
method=c("basilisk","reticulate"),
verbose=TRUE){
name <- NULL;
name <- NULL;
envs <- list_envs(conda_env = conda_env,
conda = conda,
method = method)
conda = conda,
method = method)
if(nrow(envs)>0){
conda_x <- find_conda(conda = conda,
conda_x <- find_conda(conda = conda,
method = method)
#### Remove multiple ways ####
for(env in envs){
messager("Removing env:",env,v=verbose)
basilisk.utils::deactivateEnvironment(listing = env)
tryCatch({
reticulate::conda_remove(envname = env,
conda = conda_x)
}, error = function(e){message(e)})
unlink(x = dirname(dirname(subset(envs, name==env)$python)),
recursive = TRUE,
recursive = TRUE,
force = TRUE)
}
} else {
Expand Down