For us, there is no spring. Just the wind that smells fresh before the storm
Package installation in R is a double edged sword. On one hand, installation is pretty easy; especially for packages on CRAN, users interactively run install.packages(...) and they are good to go. Packages typically work well together, which means that it's safe (and typical) to install packages into a single library, one per user.
Things start getting creaky though:
install.packages() works well interactively, it works poorly programmatically, and does not reliably error when it fails! This makes running a script to install a set of packages ahead of a cluster run problematic.devtools and typically installed via remotes; these packages typically have more breaking changes, users are less disciplined about updating version numbers.remotes using the Remotes: metadata in DESCRIPTION, the final versions of packages installed can be unreliable.Our needs in an HPC/HTC context are slightly different again:
The renv package solves many of these problems, but it is not to everyone's taste; we support it here but try and work around it updating the library unexpectedly when jobs launch.
We aim for a system where the users can switch between a few different modes of package installation (see below) and where we can add new modes as these become popular/available. For each mode we need to be able to:
The back-ends we want to support are:
renv, which theoretically meets all our requirements, but which is a little fiddly to use in practice and requires that users adapt their workflows considerably. This is pretty fiddly to work with, so we might do this last?script, some sort of escape hatch where the user provides a script that just runs through with whatever installation approach they fancy.pkgdepends, some sort of metadata format, using pkgdepends to try and install everything. For this, we might try and replicate the versions found locally, and report on differences we findIn the current version, debugging failed installation (especially when pkgdepends solver fails) is really hard, so we still need to improve:
pkgdepends used remotely vs the one we debug with locallyconan and into plain pkgdepends code so that we can get bug reports sortedPlease install from our r-universe:
install.packages(
"conan",
repos = c("https://mrc-ide.r-universe.dev", "https://cloud.r-project.org"))
If you prefer, you can install from GitHub with remotes:
remotes::install_github("mrc-ide/conan", upgrade = FALSE)
MIT © Imperial College of Science, Technology and Medicine