(
prefix: Prefix,
version: str,
additional_dependencies: Sequence[str],
)
| 188 | |
| 189 | |
| 190 | def install_environment( |
| 191 | prefix: Prefix, |
| 192 | version: str, |
| 193 | additional_dependencies: Sequence[str], |
| 194 | ) -> None: |
| 195 | lang_base.assert_version_default('r', version) |
| 196 | |
| 197 | env_dir = lang_base.environment_dir(prefix, ENVIRONMENT_DIR, version) |
| 198 | os.makedirs(env_dir, exist_ok=True) |
| 199 | shutil.copy(prefix.path('renv.lock'), env_dir) |
| 200 | shutil.copytree(prefix.path('renv'), os.path.join(env_dir, 'renv')) |
| 201 | |
| 202 | r_code_inst_environment = f"""\ |
| 203 | prefix_dir <- {prefix.prefix_dir!r} |
| 204 | options( |
| 205 | repos = c(CRAN = "https://cran.rstudio.com"), |
| 206 | renv.consent = TRUE |
| 207 | ) |
| 208 | source("renv/activate.R") |
| 209 | renv::restore() |
| 210 | activate_statement <- paste0( |
| 211 | 'suppressWarnings({{', |
| 212 | 'old <- setwd("', getwd(), '"); ', |
| 213 | 'source("renv/activate.R"); ', |
| 214 | 'setwd(old); ', |
| 215 | 'renv::load("', getwd(), '");}})' |
| 216 | ) |
| 217 | writeLines(activate_statement, 'activate.R') |
| 218 | is_package <- tryCatch( |
| 219 | {{ |
| 220 | path_desc <- file.path(prefix_dir, 'DESCRIPTION') |
| 221 | suppressWarnings(desc <- read.dcf(path_desc)) |
| 222 | "Package" %in% colnames(desc) |
| 223 | }}, |
| 224 | error = function(...) FALSE |
| 225 | ) |
| 226 | if (is_package) {{ |
| 227 | renv::install(prefix_dir) |
| 228 | }} |
| 229 | """ |
| 230 | _execute_vanilla_r( |
| 231 | r_code_inst_environment, |
| 232 | prefix=prefix, version=version, cwd=env_dir, |
| 233 | ) |
| 234 | |
| 235 | _write_current_r_version(envdir=env_dir, prefix=prefix, version=version) |
| 236 | if additional_dependencies: |
| 237 | r_code_inst_add = 'renv::install(commandArgs(trailingOnly = TRUE))' |
| 238 | _execute_r_in_renv( |
| 239 | code=r_code_inst_add, prefix=prefix, version=version, |
| 240 | args=additional_dependencies, |
| 241 | cwd=env_dir, |
| 242 | ) |
| 243 | |
| 244 | |
| 245 | def _inline_r_setup(code: str) -> str: |
nothing calls this directly
no test coverage detected