Downloads
-
download.file(method = "wininet")appears to be unreliable for file URIs?
Dependencies
-
User should be able to control whether errors encountered during depenency enumeration are fatal, reported, or ignored.
-
renv::init()should report dependency errors, but otherwise initialize the project. -
renvAPIs that might calldependencies()should avoid re-reporting dependency errors multiple times. Potential fix:renv_dependencies_scope()could call dependencies once at the top level, and thenrenv::dependencies()could re-use the result of that object when requested. -
Audit other internal usages of
renv::snapshot()for the appropriate value of theerrorsargument.
Miscellaneous
-
Packrat-style
init()function, where we discover the R packages used within the project, and then initialize a new environment / library with those packages. Speed up the process by re-using installed packages in the user library if possible. -
Warn (error?) when attempting to snapshot a library with missing dependencies -- e.g. the library contains 'markdown' but not its dependency 'mime'.
-
Properly handle broken links in the project library (e.g. if the cache moved or was mutated for some reason)
-
rehash()-- tools for validating package hashes + their install location?rehash()would look at packages in the cache and update their cache location if the caching scheme changed. -
clean()function to remove ununsed packages from the library. (If the cache is enabled, they will remain in the cache). -
Allow users to override the repository used during restore of a particular package? (Setting
options(repos)would suffice here I believe) -
Use custom
Makevarsfile and set some variables that certain packages need but don't properly declare? (E.g. older versions of themapspackage needawkinstalled) -
restore()will attempt to repair the dependency tree during restore; e.g. dependent packages in the lockfile will be downloaded and installed as required. Should we prompt the user tosnapshot()afterwards so that the newly-reinstalled dependencies can be captured in the lockfile? -
Take over the
R_PROFILE,R_PROFILE_USER,R_ENVIRONandR_ENVIRON_USERenvironment variables? Needed for cases like rstudio/packrat#526. -
Make it possible to snapshot arbitrary libraries. [DONE: call
snapshot()on any project to generate a manifest for that project's state] -
hydrate()as a general function to discover dependencies and then install any missing packages into the active library. (Companion function toinit()) -
Should we provide for project-specific options? What about download method management? [Motivation: users might require
curl+http_proxysettings to download packages from CRAN; authentication for GitHub] -
Allow users to ignore certain packages in a project (e.g. those that are not on CRAN)
-
Consider
.renvignoreor similar for controlling what files / directoriesrenvwill crawl when discovering dependencies. -
Properly handle
RENV_DEFAULTScase (they get lost if the user attempts to build and reload a package managed byrenv, which screws up RStudio's notion of the library paths if the project is later deactivated) -
Audit usages of
renv_file_exists(). When do we care about broken symlinks?file.exists()returns FALSE for broken symlinks;renv_file_exists()returns TRUE. -
De-couple the 'retrieve' + 'install' steps during restore.
-
Include recommended packages in the lockfile? (Since R installations on Linux may not have these packages available). Or at least confirm that packages which depend on recommended packages enter the lockfile.
-
Use a single lockfile file, but provide a
history()function to dig out old versions of the lockfile. (Make it clearer to users what needs to be committed) -
Handle
NAmtime in filecached APIs. -
Implement
bundle()for packaging up a project, potentially with package sources, binaries, or even the library itself for restoration on a new machine (potentially lacking internet access). -
Provide tools for upgrading version of
renvused to manage a project. [renv::upgrade()] -
Think about how we might discover 'stale' entries in the cache.
-
Handle
renv::init()case when another project already active (want to make sure we use the user library rather than active library) -
renv::status()function reporting differences between lockfile + library. -
Tools for analyzing the cache?
-
Python: allow e.g. 'python = TRUE' for initializating a Python project.
-
Python: properly handle conda environments vs. pip.
-
Python: teach reticulate how to load virtual environments within renv dir.
-
Warn when lockfile contains packages from unknown source?
-
Automatically bootstrap an
renvinstallation when loading a project if none is available locally? -
Should
renv::install()auto-update packages? -
Only report R package entries that have changed if they exist both before and after (ie: only report upgrades / downgrades / crossgrades)
-
Include current session's R version when computing hash for DESCRIPTION
-
Install of
kerasfailed to installreticulate? -
API for activating project and upgrading
renv, rather than using previously-recorded version ofrenv? -
Treat user library as a source when restoring projects?
-
renvshould build packages before install, especially for packages from GitHub. -
Use
pkgcachefor package installation? -
Use
pkgdependsto validate dependency list before snapshot. -
API to allow
pakto use the cache? -
Record usage time for packages (as alternate scheme for finding unused packages)
-
renv::revert()should tell the user what it did. -
renv::revert()should have project argument last. -
Warn when installing a package currently loaded? (so that user knows they must restart R to get newly-installed package)
-
Implement a smarter static analysis scheme that can handle simple variable assignments. Do this by implementing our own shims for some common functions (assignment, control flow, etc) with only a very small subset of base symbols defined (e.g. "c" and "list").