Hi. Keeping in mind I am very new to easybuild, I would like to clarify a couple of points.
The script I linked to, works off an installation of R that already has the required package installed, so it would not be able to help you in creating a easyconfig "from scratch". The aim of easybuild (for what I can say) is to specify a detailed, tested and immutable set of packages so that reproducibility can be archived. I use the script I provided as a tool to help me come up with that list. Here how I would work: - install a vanilla R (with easybuild or otherwise) - install required packages with install.packages (or otherwise) - test - use the script provided to take a snapshot of the installation and create a easyconfig with list of packages in the right order and version. - deploy somewhere else or create a reproducible build I think that when you want to install ggplot2, there are several combinations of packages that would do, even if you set a particular version of ggplot2. CRAN will give you the latest version for each package, so it is not very stable or predictable. you can also look into packrat (http://cran.r-project.org/web/packages/packrat/index.html) for archiving reproducibility. Maybe you can borrow some ideas there too. I hope this help. Stefano > -----Original Message----- > From: [email protected] [mailto:easybuild- > [email protected]] On Behalf Of Pieter Neerincx > Sent: 24 June 2015 11:54 > To: [email protected] > Subject: Re: [easybuild] Easier way of installing R packages > > Hi Kenneth, > > On Jun 24, 2015, at 11:10 AM, Kenneth Hoste <[email protected]> > wrote: > > > Hi Pieter, > > > > On 24/06/15 10:58, Pieter Neerincx wrote: > >> Hi, > >> > >> On Jun 24, 2015, at 7:34 AM, Kenneth Hoste <[email protected]> > wrote: > >> > >>> Hi Riccardo, > >>> > >>> On 19/06/15 10:32, Riccardo Murri wrote: > >>>> Hi Ken, all, > >>>> > >>>> (Kenneth Hoste, Thu, Jun 18, 2015 at 04:32:27PM +0200:) > >>>>> We deliberately do not enable 'dependency=True', to ensure we can > reproduce > >>>>> the exact same installation later; if you let R automagically resolve > >>>>> dependencies and let it pick the most recent version at that time for > the > >>>>> dependencies, you can't do an exact reproduced install. > >>>> Could this be worked around by having EB save the list of installed R > >>>> packages + versions (like `pip freeze`) upon first install, then re-use > >>>> the saved list if available. > >>>> > >>>> Something along these lines (pseudo-code): > >>>> > >>>> package_list_file = easyconfig_file_name.replace('.eb', > '.pkglist.csv') > >>>> if not exists(package_list_file): > >>>> # 1. install packages by name, let R choose version > >>>> # 2. dump list of installed packages to file: (pkgname, > >>>> version) > >>>> else: > >>>> # 1. read in the pkglist.csv file > >>>> # 2. use R's install_version() to install the exact same pkg > >>>> and > version > >>> I like this idea... > >> +1 > >> > >>> We could have an easyconfig parameter like 'auto_deps = True', and > when that is set, EasyBuild lets R resolve dependencies by itself. > >>> > >>> Once the full list of easyconfigs has been installed, EasyBuild could then > see what got installed, and which versions, and adjust the list of extensions > included in the easyconfig file. The tricky bit may be the order, but there's > probably a solution for that (see Stefano's R script). > >>> > >>> Now, who's up for implementing this? :-) > >> Yesterday I started working on an R-script that generates an *.eb from an > existing R installation. This is based on Stefano's code (Many thanks for > sharing that!) and adds some commandline switches, help and code to figure > out whether a package came from a CRAN repo or from BioConductor. Hence > this is slightly different compared to the above as it generates a complete > *.eb from pure R, but I can easily add an option to only generate a pkglist > file, > which may then be used by an existing *.eb. > >> > >> Is it Ok if I add this with a README to the ..../r/R/ dir in the > >> EasyConfigs > repo and create a pull request or would you prefer this kind of > supplementary code to go elsewhere? > > > > It would be better if you could integrate this in the R easyblock somehow (I > realize that may be a lot to ask for). > > The small amount of code that generates the *.eb could be in Python and > hence that could go in the easyblock, but the majority of the code is R based > on Stefano's script to generate the list of R packages their versions & the > repos they came from and then re-order the list based on the dependencies. > I would not know how to accomplish this without using R's own dependency > handling mechanism and AFAIK their is no way to do this in Python. > > So the best I can imagine for now is a modified R easyblock that can execute > an external R script to create a pkglist... and then generate an updated > easyconfig. > > > We currently don't have a good location for this; I don't think we should > start adding 'random' scripts to the easyconfigs repo... > > The .../r/R/ dir in the EasyConfigs repo would be the first place where I > would > look for examples and a way to create new updated R easyconfigs, so in that > sense it isn't a random location, but I agree that it is random in the sense > that > it isn't EasyBuild style Python code and R specific. Preferably we would not > need a kludge like this :o > > > Maybe go with https://github.com/fgeorgatos/easybuild.experimental for > now to share it with others? > > That looks like a good place to start, so we can have a first version of an > pure > R easyconfig generator by the end of this week... > > > We should look into a contrib directory in the main EasyBuild repo > (https://github.com/hpcugent/easybuild), where people can get stuff > included without too much reviewing or very strict requirements, we already > have a couple of PRs for stuff like that (see > https://github.com/hpcugent/easybuild-framework/pull/1190, > https://github.com/hpcugent/easybuild-framework/pull/1180). > > Check, let me know when there is a contrib dir in place. > > Cheers, > > Pi > > > regards, > > > > Kenneth > > ------------------------------------------------------------- > phone: +31 6 143 66 783 > e-mail: [email protected] > skype: pieter.online > -------------------------------------------------------------

