Jan Górecki
2016-Jun-14 14:54 UTC
[Rd] new function to tools/utils package: dependencies based on DESCRIPTION file
Hi all,
Packages tools and utils have a lot of useful stuff for R developers.
I find one task still not as straightforward as it could. Simply to
extract dependencies of a package from DESCRIPTION file (before it is
even installed to library). This would be valuable in automation of CI
setup in a more meta-data driven way.
The simple function below, I know it is short and simple, but having
it to be defined in each CI workflow is a pain, it could be already
available in tools or utils namespace.
package.dependencies.dcf <- function(file = "DESCRIPTION", which
c("Depends","Imports","LinkingTo")) {
stopifnot(file.exists(file), is.character(which))
which_all <- c("Depends", "Imports",
"LinkingTo", "Suggests", "Enhances")
if (identical(which, "all"))
which <- which_all
else if (identical(which, "most"))
which <- c("Depends", "Imports",
"LinkingTo", "Suggests")
stopifnot(which %in% which_all)
dcf <- read.dcf(file, which)
# parse fields
raw.deps <- unlist(strsplit(dcf[!is.na(dcf)], ",", fixed =
TRUE))
# strip stated dependency version
deps <- trimws(sapply(strsplit(trimws(raw.deps), "(", fixed
TRUE), `[[`, 1L))
# exclude base R pkgs
base.pkgs <- c("R", rownames(installed.packages(priority =
"base")))
setdiff(deps, base.pkgs)
}
This allows to easily install all package dependencies just based on
DESCRIPTION file, so simplify that in custom CI workflows to:
if (length(pkgs<-package.dependencies.dcf(which="all")))
install.packages(pkgs)
And would not require to install custom packages or shell scripts.
Regards,
Jan Gorecki
Thierry Onkelinx
2016-Jun-14 15:17 UTC
[Rd] new function to tools/utils package: dependencies based on DESCRIPTION file
Dear Jan, Similar functionality is available in devtools::dev_package_deps() Best regards, ir. Thierry Onkelinx Instituut voor natuur- en bosonderzoek / Research Institute for Nature and Forest team Biometrie & Kwaliteitszorg / team Biometrics & Quality Assurance Kliniekstraat 25 1070 Anderlecht Belgium To call in the statistician after the experiment is done may be no more than asking him to perform a post-mortem examination: he may be able to say what the experiment died of. ~ Sir Ronald Aylmer Fisher The plural of anecdote is not data. ~ Roger Brinner The combination of some data and an aching desire for an answer does not ensure that a reasonable answer can be extracted from a given body of data. ~ John Tukey 2016-06-14 16:54 GMT+02:00 Jan G?recki <J.Gorecki at wit.edu.pl>:> Hi all, > > Packages tools and utils have a lot of useful stuff for R developers. > I find one task still not as straightforward as it could. Simply to > extract dependencies of a package from DESCRIPTION file (before it is > even installed to library). This would be valuable in automation of CI > setup in a more meta-data driven way. > The simple function below, I know it is short and simple, but having > it to be defined in each CI workflow is a pain, it could be already > available in tools or utils namespace. > > package.dependencies.dcf <- function(file = "DESCRIPTION", which > c("Depends","Imports","LinkingTo")) { > stopifnot(file.exists(file), is.character(which)) > which_all <- c("Depends", "Imports", "LinkingTo", "Suggests", > "Enhances") > if (identical(which, "all")) > which <- which_all > else if (identical(which, "most")) > which <- c("Depends", "Imports", "LinkingTo", "Suggests") > stopifnot(which %in% which_all) > dcf <- read.dcf(file, which) > # parse fields > raw.deps <- unlist(strsplit(dcf[!is.na(dcf)], ",", fixed = TRUE)) > # strip stated dependency version > deps <- trimws(sapply(strsplit(trimws(raw.deps), "(", fixed > TRUE), `[[`, 1L)) > # exclude base R pkgs > base.pkgs <- c("R", rownames(installed.packages(priority = "base"))) > setdiff(deps, base.pkgs) > } > > This allows to easily install all package dependencies just based on > DESCRIPTION file, so simplify that in custom CI workflows to: > > if (length(pkgs<-package.dependencies.dcf(which="all"))) > install.packages(pkgs) > > And would not require to install custom packages or shell scripts. > > Regards, > Jan Gorecki > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel >[[alternative HTML version deleted]]
Jan Górecki
2016-Jun-14 16:29 UTC
[Rd] new function to tools/utils package: dependencies based on DESCRIPTION file
Hi Thierry, I'm perfectly aware of it. Any idea when devtools would be shipped as a base R package, or at least recommended package? To actually answer the problem described in my email. I have range of useful functions available tools/utils packages which are shipped together with R. They doesn't require any OS dependencies or R dependencies, unlike devtools which requires both. Installing unnecessary OS dependencies and R dependencies just for such a simple wrapper doesn't seem to be an elegant way to address it, therefore my proposal to include that simple function in tools, or utils package. Regards, Jan Gorecki On 14 June 2016 at 16:17, Thierry Onkelinx <thierry.onkelinx at inbo.be> wrote:> Dear Jan, > > Similar functionality is available in devtools::dev_package_deps() > > Best regards, > > ir. Thierry Onkelinx > Instituut voor natuur- en bosonderzoek / Research Institute for Nature and > Forest > team Biometrie & Kwaliteitszorg / team Biometrics & Quality Assurance > Kliniekstraat 25 > 1070 Anderlecht > Belgium > > To call in the statistician after the experiment is done may be no more than > asking him to perform a post-mortem examination: he may be able to say what > the experiment died of. ~ Sir Ronald Aylmer Fisher > The plural of anecdote is not data. ~ Roger Brinner > The combination of some data and an aching desire for an answer does not > ensure that a reasonable answer can be extracted from a given body of data. > ~ John Tukey > > 2016-06-14 16:54 GMT+02:00 Jan G?recki <J.Gorecki at wit.edu.pl>: >> >> Hi all, >> >> Packages tools and utils have a lot of useful stuff for R developers. >> I find one task still not as straightforward as it could. Simply to >> extract dependencies of a package from DESCRIPTION file (before it is >> even installed to library). This would be valuable in automation of CI >> setup in a more meta-data driven way. >> The simple function below, I know it is short and simple, but having >> it to be defined in each CI workflow is a pain, it could be already >> available in tools or utils namespace. >> >> package.dependencies.dcf <- function(file = "DESCRIPTION", which >> c("Depends","Imports","LinkingTo")) { >> stopifnot(file.exists(file), is.character(which)) >> which_all <- c("Depends", "Imports", "LinkingTo", "Suggests", >> "Enhances") >> if (identical(which, "all")) >> which <- which_all >> else if (identical(which, "most")) >> which <- c("Depends", "Imports", "LinkingTo", "Suggests") >> stopifnot(which %in% which_all) >> dcf <- read.dcf(file, which) >> # parse fields >> raw.deps <- unlist(strsplit(dcf[!is.na(dcf)], ",", fixed = TRUE)) >> # strip stated dependency version >> deps <- trimws(sapply(strsplit(trimws(raw.deps), "(", fixed >> TRUE), `[[`, 1L)) >> # exclude base R pkgs >> base.pkgs <- c("R", rownames(installed.packages(priority = "base"))) >> setdiff(deps, base.pkgs) >> } >> >> This allows to easily install all package dependencies just based on >> DESCRIPTION file, so simplify that in custom CI workflows to: >> >> if (length(pkgs<-package.dependencies.dcf(which="all"))) >> install.packages(pkgs) >> >> And would not require to install custom packages or shell scripts. >> >> Regards, >> Jan Gorecki >> >> ______________________________________________ >> R-devel at r-project.org mailing list >> https://stat.ethz.ch/mailman/listinfo/r-devel > >
Joris Meys
2016-Jun-16 07:37 UTC
[Rd] new function to tools/utils package: dependencies based on DESCRIPTION file
Dear Jan, It is unavoidable to have OS and R dependencies for devtools. The building process for packages is both OS and R dependent, so devtools has to be too according to my understanding. Cheers Joris On 14 Jun 2016 18:56, "Jan G?recki" <J.Gorecki at wit.edu.pl> wrote: Hi Thierry, I'm perfectly aware of it. Any idea when devtools would be shipped as a base R package, or at least recommended package? To actually answer the problem described in my email. I have range of useful functions available tools/utils packages which are shipped together with R. They doesn't require any OS dependencies or R dependencies, unlike devtools which requires both. Installing unnecessary OS dependencies and R dependencies just for such a simple wrapper doesn't seem to be an elegant way to address it, therefore my proposal to include that simple function in tools, or utils package. Regards, Jan Gorecki On 14 June 2016 at 16:17, Thierry Onkelinx <thierry.onkelinx at inbo.be> wrote:> Dear Jan, > > Similar functionality is available in devtools::dev_package_deps() > > Best regards, > > ir. Thierry Onkelinx > Instituut voor natuur- en bosonderzoek / Research Institute for Nature and > Forest > team Biometrie & Kwaliteitszorg / team Biometrics & Quality Assurance > Kliniekstraat 25 > 1070 Anderlecht > Belgium > > To call in the statistician after the experiment is done may be no morethan> asking him to perform a post-mortem examination: he may be able to saywhat> the experiment died of. ~ Sir Ronald Aylmer Fisher > The plural of anecdote is not data. ~ Roger Brinner > The combination of some data and an aching desire for an answer does not > ensure that a reasonable answer can be extracted from a given body ofdata.> ~ John Tukey > > 2016-06-14 16:54 GMT+02:00 Jan G?recki <J.Gorecki at wit.edu.pl>: >> >> Hi all, >> >> Packages tools and utils have a lot of useful stuff for R developers. >> I find one task still not as straightforward as it could. Simply to >> extract dependencies of a package from DESCRIPTION file (before it is >> even installed to library). This would be valuable in automation of CI >> setup in a more meta-data driven way. >> The simple function below, I know it is short and simple, but having >> it to be defined in each CI workflow is a pain, it could be already >> available in tools or utils namespace. >> >> package.dependencies.dcf <- function(file = "DESCRIPTION", which >> c("Depends","Imports","LinkingTo")) { >> stopifnot(file.exists(file), is.character(which)) >> which_all <- c("Depends", "Imports", "LinkingTo", "Suggests", >> "Enhances") >> if (identical(which, "all")) >> which <- which_all >> else if (identical(which, "most")) >> which <- c("Depends", "Imports", "LinkingTo", "Suggests") >> stopifnot(which %in% which_all) >> dcf <- read.dcf(file, which) >> # parse fields >> raw.deps <- unlist(strsplit(dcf[!is.na(dcf)], ",", fixed = TRUE)) >> # strip stated dependency version >> deps <- trimws(sapply(strsplit(trimws(raw.deps), "(", fixed >> TRUE), `[[`, 1L)) >> # exclude base R pkgs >> base.pkgs <- c("R", rownames(installed.packages(priority = "base"))) >> setdiff(deps, base.pkgs) >> } >> >> This allows to easily install all package dependencies just based on >> DESCRIPTION file, so simplify that in custom CI workflows to: >> >> if (length(pkgs<-package.dependencies.dcf(which="all"))) >> install.packages(pkgs) >> >> And would not require to install custom packages or shell scripts. >> >> Regards, >> Jan Gorecki >> >> ______________________________________________ >> R-devel at r-project.org mailing list >> https://stat.ethz.ch/mailman/listinfo/r-devel > >______________________________________________ R-devel at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel [[alternative HTML version deleted]]
Gábor Csárdi
2016-Jun-16 08:15 UTC
[Rd] new function to tools/utils package: dependencies based on DESCRIPTION file
FWIW, the `desc` package can extract dependencies from a local
DESCRIPTION, and it is lightweight. It only depends on small, R-only
packages (R6 and crayon).
? desc::desc_get_deps(".")
type package version
1 Imports DBI *
2 Imports markdown *
3 Imports rhandsontable *
4 Imports RSQLite *
5 Imports shiny *
6 Imports shinyAce *
7 Imports shinyjs *
8 Imports shinytoastr *
9 Imports whisker *
Another alternative is the 'remotes' package, this has no dependencies
at all:
? remotes::local_package_deps(".")
[1] "DBI" "markdown"
"rhandsontable" "RSQLite"
[5] "shiny" "shinyAce" "shinyjs"
"shinytoastr"
[9] "whisker"
It is at https://github.com/MangoTheCat/remotes, but note that it does
have some other bugs: https://github.com/MangoTheCat/remotes/issues
Disclaimer: I wrote most of 'desc' and parts of 'remotes', and
maintain both.
G?bor
On Thu, Jun 16, 2016 at 8:37 AM, Joris Meys <jorismeys at gmail.com>
wrote:> Dear Jan,
>
> It is unavoidable to have OS and R dependencies for devtools. The building
> process for packages is both OS and R dependent, so devtools has to be too
> according to my understanding.
>
> Cheers
> Joris
> On 14 Jun 2016 18:56, "Jan G?recki" <J.Gorecki at
wit.edu.pl> wrote:
>
> Hi Thierry,
>
> I'm perfectly aware of it. Any idea when devtools would be shipped as
> a base R package, or at least recommended package? To actually answer
> the problem described in my email.
> I have range of useful functions available tools/utils packages which
> are shipped together with R. They doesn't require any OS dependencies
> or R dependencies, unlike devtools which requires both. Installing
> unnecessary OS dependencies and R dependencies just for such a simple
> wrapper doesn't seem to be an elegant way to address it, therefore my
> proposal to include that simple function in tools, or utils package.
>
> Regards,
> Jan Gorecki
>
> On 14 June 2016 at 16:17, Thierry Onkelinx <thierry.onkelinx at
inbo.be> wrote:
>> Dear Jan,
>>
>> Similar functionality is available in devtools::dev_package_deps()
>>
>> Best regards,
>>
>> ir. Thierry Onkelinx
>> Instituut voor natuur- en bosonderzoek / Research Institute for Nature
and
>> Forest
>> team Biometrie & Kwaliteitszorg / team Biometrics & Quality
Assurance
>> Kliniekstraat 25
>> 1070 Anderlecht
>> Belgium
>>
>> To call in the statistician after the experiment is done may be no more
> than
>> asking him to perform a post-mortem examination: he may be able to say
> what
>> the experiment died of. ~ Sir Ronald Aylmer Fisher
>> The plural of anecdote is not data. ~ Roger Brinner
>> The combination of some data and an aching desire for an answer does
not
>> ensure that a reasonable answer can be extracted from a given body of
> data.
>> ~ John Tukey
>>
>> 2016-06-14 16:54 GMT+02:00 Jan G?recki <J.Gorecki at wit.edu.pl>:
>>>
>>> Hi all,
>>>
>>> Packages tools and utils have a lot of useful stuff for R
developers.
>>> I find one task still not as straightforward as it could. Simply to
>>> extract dependencies of a package from DESCRIPTION file (before it
is
>>> even installed to library). This would be valuable in automation of
CI
>>> setup in a more meta-data driven way.
>>> The simple function below, I know it is short and simple, but
having
>>> it to be defined in each CI workflow is a pain, it could be already
>>> available in tools or utils namespace.
>>>
>>> package.dependencies.dcf <- function(file =
"DESCRIPTION", which >>>
c("Depends","Imports","LinkingTo")) {
>>> stopifnot(file.exists(file), is.character(which))
>>> which_all <- c("Depends", "Imports",
"LinkingTo", "Suggests",
>>> "Enhances")
>>> if (identical(which, "all"))
>>> which <- which_all
>>> else if (identical(which, "most"))
>>> which <- c("Depends", "Imports",
"LinkingTo", "Suggests")
>>> stopifnot(which %in% which_all)
>>> dcf <- read.dcf(file, which)
>>> # parse fields
>>> raw.deps <- unlist(strsplit(dcf[!is.na(dcf)], ",",
fixed = TRUE))
>>> # strip stated dependency version
>>> deps <- trimws(sapply(strsplit(trimws(raw.deps),
"(", fixed >>> TRUE), `[[`, 1L))
>>> # exclude base R pkgs
>>> base.pkgs <- c("R",
rownames(installed.packages(priority = "base")))
>>> setdiff(deps, base.pkgs)
>>> }
>>>
>>> This allows to easily install all package dependencies just based
on
>>> DESCRIPTION file, so simplify that in custom CI workflows to:
>>>
>>> if
(length(pkgs<-package.dependencies.dcf(which="all")))
>>> install.packages(pkgs)
>>>
>>> And would not require to install custom packages or shell scripts.
>>>
>>> Regards,
>>> Jan Gorecki
>>>
>>> ______________________________________________
>>> R-devel at r-project.org mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>
>>
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
Jan Górecki
2016-Jun-16 08:42 UTC
[Rd] new function to tools/utils package: dependencies based on DESCRIPTION file
Dear Joris, So it does looks like the proposed function makes a lot sense then, isn't it? Cheers, Jan On 16 June 2016 at 08:37, Joris Meys <jorismeys at gmail.com> wrote:> Dear Jan, > > It is unavoidable to have OS and R dependencies for devtools. The building > process for packages is both OS and R dependent, so devtools has to be too > according to my understanding. > > Cheers > Joris > > On 14 Jun 2016 18:56, "Jan G?recki" <J.Gorecki at wit.edu.pl> wrote: > > Hi Thierry, > > I'm perfectly aware of it. Any idea when devtools would be shipped as > a base R package, or at least recommended package? To actually answer > the problem described in my email. > I have range of useful functions available tools/utils packages which > are shipped together with R. They doesn't require any OS dependencies > or R dependencies, unlike devtools which requires both. Installing > unnecessary OS dependencies and R dependencies just for such a simple > wrapper doesn't seem to be an elegant way to address it, therefore my > proposal to include that simple function in tools, or utils package. > > Regards, > Jan Gorecki > > On 14 June 2016 at 16:17, Thierry Onkelinx <thierry.onkelinx at inbo.be> wrote: >> Dear Jan, >> >> Similar functionality is available in devtools::dev_package_deps() >> >> Best regards, >> >> ir. Thierry Onkelinx >> Instituut voor natuur- en bosonderzoek / Research Institute for Nature and >> Forest >> team Biometrie & Kwaliteitszorg / team Biometrics & Quality Assurance >> Kliniekstraat 25 >> 1070 Anderlecht >> Belgium >> >> To call in the statistician after the experiment is done may be no more >> than >> asking him to perform a post-mortem examination: he may be able to say >> what >> the experiment died of. ~ Sir Ronald Aylmer Fisher >> The plural of anecdote is not data. ~ Roger Brinner >> The combination of some data and an aching desire for an answer does not >> ensure that a reasonable answer can be extracted from a given body of >> data. >> ~ John Tukey >> >> 2016-06-14 16:54 GMT+02:00 Jan G?recki <J.Gorecki at wit.edu.pl>: >>> >>> Hi all, >>> >>> Packages tools and utils have a lot of useful stuff for R developers. >>> I find one task still not as straightforward as it could. Simply to >>> extract dependencies of a package from DESCRIPTION file (before it is >>> even installed to library). This would be valuable in automation of CI >>> setup in a more meta-data driven way. >>> The simple function below, I know it is short and simple, but having >>> it to be defined in each CI workflow is a pain, it could be already >>> available in tools or utils namespace. >>> >>> package.dependencies.dcf <- function(file = "DESCRIPTION", which >>> c("Depends","Imports","LinkingTo")) { >>> stopifnot(file.exists(file), is.character(which)) >>> which_all <- c("Depends", "Imports", "LinkingTo", "Suggests", >>> "Enhances") >>> if (identical(which, "all")) >>> which <- which_all >>> else if (identical(which, "most")) >>> which <- c("Depends", "Imports", "LinkingTo", "Suggests") >>> stopifnot(which %in% which_all) >>> dcf <- read.dcf(file, which) >>> # parse fields >>> raw.deps <- unlist(strsplit(dcf[!is.na(dcf)], ",", fixed = TRUE)) >>> # strip stated dependency version >>> deps <- trimws(sapply(strsplit(trimws(raw.deps), "(", fixed >>> TRUE), `[[`, 1L)) >>> # exclude base R pkgs >>> base.pkgs <- c("R", rownames(installed.packages(priority = "base"))) >>> setdiff(deps, base.pkgs) >>> } >>> >>> This allows to easily install all package dependencies just based on >>> DESCRIPTION file, so simplify that in custom CI workflows to: >>> >>> if (length(pkgs<-package.dependencies.dcf(which="all"))) >>> install.packages(pkgs) >>> >>> And would not require to install custom packages or shell scripts. >>> >>> Regards, >>> Jan Gorecki >>> >>> ______________________________________________ >>> R-devel at r-project.org mailing list >>> https://stat.ethz.ch/mailman/listinfo/r-devel >> >> > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel
Reasonably Related Threads
- new function to tools/utils package: dependencies based on DESCRIPTION file
- new function to tools/utils package: dependencies based on DESCRIPTION file
- new function to tools/utils package: dependencies based on DESCRIPTION file
- new function to tools/utils package: dependencies based on DESCRIPTION file
- new function to tools/utils package: dependencies based on DESCRIPTION file