Skip to content

Outdated dependencies and install.packages()

7 messages · Peter Dalgaard, Martin Morgan, Brian Ripley +1 more

#
This looks like a buglet:
--- Please select a CRAN mirror for use in this session ---
[...snip...]
** preparing package for lazy loading
Error: package 'Matrix' 0.999375-4 was found, but >= 0.999375.11 is
required by 'lme4'
Execution halted
ERROR: lazy loading failed for package 'lme4'
** Removing '/home/bs/pd/Rlibrary/lme4'
** Restoring previous '/home/bs/pd/Rlibrary/lme4'

and the DESCRIPTION file for lme 4 does have

Depends: methods, R(? 2.7.0), Matrix(? 0.999375-11), lattice
<http://cran.r-project.org/web/packages/lattice/index.html>


Looks like we're either not checking the version requirement of
dependencies, or something is making 4 > 11... (from my reading of the
code, it is the former, but I could have missed something).

We should at least document the behaviour.
#
A small addendum is that if the outdated dependency is in the
LinkingTo: field, the error can be more cryptic. Installation then
fails with compilation errors rather than the hint that the dependency
is out of date.

Martin Morgan

Peter Dalgaard <P.Dalgaard at biostat.ku.dk> writes:

  
    
#
On Wed, 20 Aug 2008, Peter Dalgaard wrote:

            
We don't check version requirements of dependencies in install.packages(). 
That's a minefield related to having multiple versions of a package on a 
system and which gets loaded/namespace loaded, so you can easily have the 
needed version but pick up a different one.

Depending on whether lazy-loading is in place (and various other issues) 
you may or may not need the dependencies to install the package.  It's 
also a problem that you can update dependencies to incompatible ones, so 
the versions available at installation are only part of the story.

I don't see why the message reports .11 not -11, but that may be 
related to "package_version" classes.
I am not sure where you think it should be documented and is not.
But for install.packages():

dependencies: logical indicating to also install uninstalled packages
           on which these packages depend/suggest/import (and so on
           recursively).  Not used if 'repos = NULL'. Can also be a
           character vector, a subset of 'c("Depends", "Imports",
           "Suggests")'.

'uninstalled' seems pretty clear to me.
#
Prof Brian Ripley wrote:
It isn't. Matrix 0.999375-11 was 'uninstalled'. The above could just
mean that if you installed it, it wouldn't be installed again.

Something like "Notice that version dependencies are not checked." would
help. (Assuming that people read the help page.)
#

        
PD> Prof Brian Ripley wrote:
>> On Wed, 20 Aug 2008, Peter Dalgaard wrote:
>> 
    >>> This looks like a buglet:
    >>> 
    >>>> install.packages("lme4", depend=TRUE, lib="~/Rlibrary/")
    >>> --- Please select a CRAN mirror for use in this session ---
    >>> [...snip...]
    >>> ** preparing package for lazy loading
    >>> Error: package 'Matrix' 0.999375-4 was found, but >= 0.999375.11 is
    >>> required by 'lme4'
    >>> Execution halted
    >>> ERROR: lazy loading failed for package 'lme4'
    >>> ** Removing '/home/bs/pd/Rlibrary/lme4'
    >>> ** Restoring previous '/home/bs/pd/Rlibrary/lme4'
    >>> 
    >>> and the DESCRIPTION file for lme 4 does have
    >>> 
    >>> Depends: methods, R(? 2.7.0), Matrix(? 0.999375-11), lattice
    >>> <http://cran.r-project.org/web/packages/lattice/index.html>
    >>> 
    >>> 
    >>> Looks like we're either not checking the version requirement of
    >>> dependencies, or something is making 4 > 11... (from my reading of the
    >>> code, it is the former, but I could have missed something).
    >> 
    >> We don't check version requirements of dependencies in
    >> install.packages(). That's a minefield related to having multiple
    >> versions of a package on a system and which gets loaded/namespace
    >> loaded, so you can easily have the needed version but pick up a
    >> different one.
    >> 
    >> Depending on whether lazy-loading is in place (and various other
    >> issues) you may or may not need the dependencies to install the
    >> package.  It's also a problem that you can update dependencies to
    >> incompatible ones, so the versions available at installation are only
    >> part of the story.
    >> 
    >> I don't see why the message reports .11 not -11, but that may be
    >> related to "package_version" classes.
    >> 
    >>> We should at least document the behaviour.
    >> 
    >> I am not sure where you think it should be documented and is not.
    >> But for install.packages():
    >> 
    >> dependencies: logical indicating to also install uninstalled packages
    >> on which these packages depend/suggest/import (and so on
    >> recursively).  Not used if 'repos = NULL'. Can also be a
    >> character vector, a subset of 'c("Depends", "Imports",
    >> "Suggests")'.
    >> 
    >> 'uninstalled' seems pretty clear to me.
    >> 
    PD> It isn't. Matrix 0.999375-11 was 'uninstalled'. The above could just
    PD> mean that if you installed it, it wouldn't be installed again.

    PD> Something like "Notice that version dependencies are not checked." would
    PD> help. (Assuming that people read the help page.)

Or even more:

"
Notice that version dependencies are not checked such that
 outdated versions of installed packages are \emph{not} updated.
 Consider using  \code{\link{update.packages}()} before 
 \code{install.packages()}.
"

Note that --- thanks to Kate Mullen's nice help.request() proposal ---
one of my top "TODOs" for R-devel is
to finish a generalization of the current
  update.packages()
function (that I have not quite finished)
which will allow to only look for updates of specified set of
packages rather than all packages in a given lib.loc
{something that should *not* be triggered by a help.request()
 for a user (as ours) who has ~ 2000 R packages installed}.

Martin
#
Martin Maechler wrote:
That's essentially what happened to me (not with 2000 packages, though).
I was looking into the lme4/aod issue - reinstall lme4 - Matrix out of
date - update.packages() - wait for an hour or so for gtk2 and friends
to be updated on my laptop...
#
[...............]

    MM> Note that --- thanks to Kate Mullen's nice help.request() proposal ---

oops!!   s/Kate Mullen/Heather Turner/

both very fine ladies, both in the program committee of
useR!2008, .... but I do need to apologize here :  
S.O.R.R.Y...

Martin

    MM> one of my top "TODOs" for R-devel is
    MM> to finish a generalization of the current
    MM> update.packages()
    MM> function (that I have not quite finished)
    MM> which will allow to only look for updates of specified set of
    MM> packages rather than all packages in a given lib.loc
    MM> {something that should *not* be triggered by a help.request()
    MM> for a user (as ours) who has ~ 2000 R packages installed}.