Offline install of R package and dependencies
Asked Answered
C

3

62

Suppose I need to install a number of packages on a (Linux) machine that does not have an internet connection. Let's say that I downloaded a copy of cran and burned it on a DVD that I bring to the offline location:

wget ftp://cran.r-project.org/pub/R/src/contrib/*.tar.gz

I can even add a PACKAGES file that contains an overview of all the source packages and their dependencies:

library(tools)
write_PACKAGES()

How could I use this offline to install a source package in such a way that dependencies are resolved and installed from the local files as well? For example, someone wants to install package ggplot2, which has a fairly deep dependency structure. Assume the source package of ggplot2 and all of its dependencies are available as source packages in the current working directory. If I do:

install.packages("ggplot2_0.9.1.tar.gz", repos=NULL)

This results in an error, because the dependencies are not resolved at all. Alternatively:

install.packages(list.files(pattern="*.tar.gz"), repos=NULL)

However this also ignores the dependency structure, and tries to install packages in alphabetical order, which will also fail.

I looked into available.packages and contrib.url but I just can't find an example of installing a source package from a local file including it's dependencies.

Constable answered 29/5, 2012 at 22:47 Comment(2)
Seems like repos="file://path/to/DVD" would work.Neuman
You should add an answer with this information.Koslo
C
48

The correct answer was given by Joshua Ulrich in the comment on the question:

The key is prefixing the argument to either repos or contriburl with file://. So in Unixy systems one could do:

install.packages("ggplot2", contriburl="file:///path/to/packages/")

This assumes that all required source packages, as well as a PACKAGES index file is available in /path/to/packages. If no PACKAGES file is present, this should be generated first using:

library(tools)
write_PACKAGES("/path/to/packages/")

which will generate an index of all source packages found in this directory. Note that in the example, there are 3 slashes behind the file: prefix. The third slash indicates a path relative to the root of the file system.

The difference between the repos and contriburl argument is that repos will append another /src/contrib to the path specified, as this is usually where source packages are located on an official CRAN repository mirror.

Constable answered 31/5, 2012 at 21:35 Comment(3)
I had to use contriburl instead of contrib.url.Agony
the command can installed package correctly in most cases, but it failed in the package which requiring downlaod extra data when installing, for example, 'stringi'.I download the data manually, but how to let the R known the data path?Ulita
When I try this, I get an error which says "install.packages : error reading from connection"... can help.me please. I am able to write packages to generate index file but the install.packages using contriburl failsClaypan
J
4

With reference to Answer above, if installation is in Windows, then write_PACKAGES() generates two files: PACKAGES and PACKAGES.gz under '/path/to/packages/' directory where all zip files are placed. The file PACKAGES.gz should be deleted before install.packages() function is correctly able to read the lone PACKAGES file else 'cannot open compressed file' error appears.

Janicejanicki answered 6/7, 2014 at 9:38 Comment(0)
A
0

I had the same issues during offline installation. Somehow it didn't work by command line.

I downloaded, extracted all the dependencies (Keeping check of the min version required) and pasted the folders in the library folder. This way only my problem got solved.

Alight answered 22/6, 2017 at 12:30 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.