webr icon indicating copy to clipboard operation
webr copied to clipboard

How to install packages not available on CRAN?

Open JosiahParry opened this issue 1 year ago • 6 comments

I'd like to use litedown with webR but running webr::install("litedown") and webr::install("yihui/litedown") both fail saying the package cannot be found.

Any tips here? I suspect the best thing i can do is to build it as part of the {rwasm} build process and mount it.

https://github.com/yihui/litedown

JosiahParry avatar Jul 03 '24 12:07 JosiahParry

Yes, either build the package using {rwasm}, or create a personal r-universe repository (which builds emscripten packages for you automatically using {rwasm}).

Loading packages directly from GitHub using package references such as org/package is not currently supported, because we don't have the necessary toolchain to build the package from source available to us from inside the browser under Wasm.

georgestagg avatar Jul 03 '24 13:07 georgestagg

Understandable. The challenge with using r-universe is that (as far as i can tell) it doesn't give us the library.data and library.js.metadata for something locally.

JosiahParry avatar Jul 03 '24 13:07 JosiahParry

It should be possible to download the .data and .js.metadata files directly from R Universe. The URLs are not exposed directly in the web UI, but the files are built as part of the Wasm cross-compilation process, and live in the same directory as the .tgz file.

e.g.

https://r-lib.r-universe.dev/bin/emscripten/contrib/4.4/cli_3.6.3.9000.data https://r-lib.r-universe.dev/bin/emscripten/contrib/4.4/cli_3.6.3.9000.js.metadata

georgestagg avatar Jul 08 '24 15:07 georgestagg

@JosiahParry FYI litedown is on both CRAN and r-universe now.

yihui avatar Aug 20 '24 21:08 yihui

I can successfully load custom built packages using install.packages("mypackage", repos = "https://example.com/myrepo/"), but I wonder, is there an option i can set via options() to set that repos= path?

I also notice that in the JupyterLite webr kernel at least, library(newpackage) pre-emptively tries to install a missing package from the webR repo:

  1. can library() take a repos= style path?
  2. it would be good if we could set a repo path via options() that library() called installations could benefit from.

psychemedia avatar Aug 29 '24 11:08 psychemedia

@psychemedia

is there an option i can set via options() to set that repos= path?

Try setting options("webr_pkg_repos").

IIRC the library() shim that preemptively installs packages should also listen to this option.

georgestagg avatar Aug 30 '24 08:08 georgestagg