Posit Connect deployments can fail when the deployment process cannot find a package. Frequent error messages when this situation occurs include
Failed to retrieve package sources for myPackage from CRAN.
Unable to determine package source for [source] package.
A required R package was found in the package repository, but the specified version is not available.
When deploying, Posit Connect finds the required packages in the CRAN and/or Posit Package Manager repositories in your options('repos')
at deployment time (when you press the publish button or run rsconnect::writeManifest)
.
The problem explained in this article is likely in the following situations:
- A package has been installed from local sources and does not exist in a CRAN or Posit Package Manager repository.
- A package has been installed from CRAN or Posit Package Manager using the
install.packages
command with therepos
option specified. - The server URL of your Posit Package Manager has recently changed.
- You installed a new version of a package from CRAN that is not yet available on Posit Package Manager.
- You installed an internal package from Posit Package Manager in addition to CRAN packages from a public CRAN mirror.
- Authors of a public package have recently moved it from BioConductor to CRAN or vice-versa.
In most of these situations, the fix is just to make sure the deployment process can find the repository with the package in it.
If the package was installed from local sources, there is no repository with the package, and the best path is to put the package in a repository where Posit Connect can access it. This article has more on what R package repositories are and how they differ from your local library, and this article has more on managing R packages in air gapped environments.
Fix it With options('repos')
The simplest solution is to make sure Posit Connect can find all required package versions at deployment time by adding the needed repository to options('repos')
before attempting to deploy to Posit Connect.
The options('repos')
should be configured in a permanent way. There are a variety of ways to permanently set repository options depending on whether you want them set at the project, user, or server level. For more information on configuring options('repos')
, please see this support article.
It may be a good idea to re-install the package with install.packages('myPackage')
with no other arguments before attempting your deployment. This both ensures that the repos
option is set correctly and that the Posit Connect deployment process will know how to find the install repository.
An example of this problem
Let's say I am developing content in Posit and I need to install a package from an internal Posit Package Manager repository. However, my machine is currently configured like this:
> options('repos')
$repos
CRAN
"https://cran.rstudio.com/"
attr(,"RStudio")
[1] TRUE
Since the package is not available on the public CRAN mirror, I might choose to install just the one package using the install.packages
command from RStudio Package Manager like:
install.packages("myPackage", repos = "https://my-repo.com/all/latest")
When I go to deploy, I will get an error. R's install.packages
command does not record the repos
option and I will get an error because the deployment cannot find the Posit Package Manager repository.
Once I add the repository to my options('repos') with
options('repos' = c(options('repos)$repos, RSPM = "https://my-repo.com/all/latest")
the deployment will succeed. Depending on how the package was initially installed, it might be necessary to install.packages("myPackage")
beforehand.
Comments