From 69d5bd5f1a75d2011e13fd0fcb3027e3056046e7 Mon Sep 17 00:00:00 2001 From: Andrew Gene Brown Date: Tue, 21 Nov 2023 13:10:22 -0800 Subject: [PATCH] Add option (and warning statement") about installing to user site packages with `--user` flag for #10 - this is one of those "necessary footguns" --- R/install_rosetta.R | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/R/install_rosetta.R b/R/install_rosetta.R index 66702cd..ce06f7a 100644 --- a/R/install_rosetta.R +++ b/R/install_rosetta.R @@ -7,7 +7,9 @@ #' @param conda Default: `"auto"` #' @param pip _logical_. Use `pip` for package installation? Default: `TRUE`. This is only relevant when Conda environments are used, as otherwise packages will be installed from the Conda repositories. #' @param system _logical_. Default: `FALSE`. If `TRUE`, try installing to system (user) site library with `system()` and set reticulate to use system Python. +#' @param user _logical_. Default: `FALSE`. Pass `--user` flag. This should only be done if other installation methods fail and it is impossible to use a virtual environment. #' @param arcpy_path Argument passed to `find_python()`. Path to ArcGIS Pro Python installation e.g. ``. Set as `NULL` (default) to prevent use of ArcGIS Pro instance. +#' #' @details From `reticulate::py_install()`: On Linux and OS X the "virtualenv" method will be used by default ("conda" will be used if virtualenv isn't available). On Windows, the "conda" method is always used. #' #' @export @@ -18,19 +20,23 @@ install_rosetta <- function(envname = NULL, method = "auto", conda = "auto", pip = TRUE, + user = FALSE, system = FALSE, arcpy_path = getOption("rosettaPTF.arcpy_path")) { # use heuristics to find python executable - if (!is.null(arcpy_path) && dir.exists(arcpy_path)){ - find_python(envname = envname, arcpy_path = arcpy_path) + if (!is.null(arcpy_path) && dir.exists(arcpy_path)) { + p <- find_python(envname = envname, arcpy_path = arcpy_path) + system <- TRUE + } else { + p <- Sys.which("python") } - if (isFALSE(system)){ + if (isFALSE(system)) { # get rosetta-soil (and numpy if needed) - try(reticulate::py_install("rosetta-soil", envname = envname, method = method, conda = conda, pip = pip)) + try(reticulate::py_install("rosetta-soil", envname = envname, method = method, + conda = conda, pip = pip, pip_options = ifelse(user, "--user", ""))) } else { - p <- Sys.which("python") reticulate::use_python(p, required = TRUE) system(paste(shQuote(p), "-m pip install --upgrade --user rosetta-soil")) }