## Table of Contents

- Getting information about Python(3) libraries
  - Getting the list of installed packages and their version
  - How to list imported modules?
  - Setting up an environment with pip
- Getting information about R libraries

## Getting information about Python(3) libraries

### Getting the list of installed packages and their version

https://stackoverflow.com/questions/20180543/how-to-check-version-of-python-modules

    pip3 freeze

    asn1crypto==0.24.0
    attrs==17.4.0
    bcrypt==3.1.4
    beautifulsoup4==4.6.0
    bleach==2.1.3
    ...
    pandas==0.22.0
    pandocfilters==1.4.2
    paramiko==2.4.0
    patsy==0.5.0
    pexpect==4.2.1
    ...
    traitlets==4.3.2
    tzlocal==1.5.1
    urllib3==1.22
    wcwidth==0.1.7
    webencodings==0.5

    pip3 show pandas
    echo "            "
    pip3 show statsmodels

    Name: pandas
    Version: 0.22.0
    Summary: Powerful data structures for data analysis, time series,and statistics
    Home-page: http://pandas.pydata.org
    Author: None
    Author-email: None
    License: BSD
    Location: /usr/lib/python3/dist-packages
    Requires:

    Name: statsmodels
    Version: 0.9.0
    Summary: Statistical computations and models for Python
    Home-page: http://www.statsmodels.org/
    Author: None
    Author-email: None
    License: BSD License
    Location: /home/alegrand/.local/lib/python3.6/site-packages
    Requires: patsy, pandas

### How to list imported modules?

Inspiring from StackOverflow, here is a simple function that lists loaded package (that have a `__version__` attribute, which is unfortunately not completely standard).

    def print_imported_modules():
        import sys
        for name,val in sorted(sys.modules.items()):
            if(hasattr(val, '__version__')):
                print(val.__name__, val.__version__)

    print("**** Package list in the beginning ****");
    print_imported_modules()
    print("**** Package list after loading pandas ****");
    import pandas
    print_imported_modules()

    **** Package list in the beginning ****
    **** Package list after loading pandas ****
    _csv 1.0
    _ctypes 1.1.0
    decimal 1.70
    argparse 1.1
    csv 1.0
    ctypes 1.1.0
    cycler 0.10.0
    dateutil 2.7.3
    decimal 1.70
    distutils 3.6.5rc1
    ipaddress 1.0
    json 2.0.9
    logging 0.5.1.2
    matplotlib 2.1.1
    numpy 1.14.5
    numpy.core 1.14.5
    numpy.core.multiarray 3.1
    numpy.core.umath b'0.4.0'
    numpy.lib 1.14.5
    numpy.linalg._umath_linalg b'0.1.5'
    pandas 0.22.0
    _libjson 1.33
    platform 1.0.8
    pyparsing 2.2.0
    pytz 2018.5
    re 2.2.1
    six 1.11.0
    urllib.request 3.6
    zlib 1.0

### Setting up an environment with pip

The easiest way to go is as follows:

    pip3 freeze > requirements.txt # to obtain the list of packages with their version
    pip3 install -r requirements.txt # to install the previous list of packages, possibly on an other machine

If you want to have several installed python environments, you may want to use Pipenv. I doubt it allows to track correctly FORTRAN or C dynamic libraries that are wrapped by Python.

## Getting information about R libraries

The best way seems to be to rely on the `devtools` package.

    sessionInfo()
    devtools::session_info()

    R version 3.5.1 (2018-07-02)
    Platform: x86_64-pc-linux-gnu (64-bit)
    Running under: Debian GNU/Linux buster/sid

    Matrix products: default
    BLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.8.0
    LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.8.0

    locale:
     [1] LC_CTYPE=fr_FR.UTF-8       LC_NUMERIC=C
     [3] LC_TIME=fr_FR.UTF-8        LC_COLLATE=fr_FR.UTF-8
     [5] LC_MONETARY=fr_FR.UTF-8    LC_MESSAGES=fr_FR.UTF-8
     [7] LC_PAPER=fr_FR.UTF-8       LC_NAME=C
     [9] LC_ADDRESS=C               LC_TELEPHONE=C
    [11] LC_MEASUREMENT=fr_FR.UTF-8 LC_IDENTIFICATION=C

    attached base packages:
    [1] stats     graphics  grDevices utils     datasets  methods   base

    loaded via a namespace (and not attached):
    [1] compiler_3.5.1
    Session info ------------------------------------------------------------------
     setting  value
     version  R version 3.5.1 (2018-07-02)
     system   x86_64, linux-gnu
     ui       X11
     language (EN)
     collate  fr_FR.UTF-8
     tz       Europe/Paris
     date     2018-08-01

    Packages ----------------------------------------------------------------------
     package   * version date       source
     base      * 3.5.1   2018-07-02 local
     compiler    3.5.1   2018-07-02 local
     datasets  * 3.5.1   2018-07-02 local
     devtools    1.13.6  2018-06-27 CRAN (R 3.5.1)
     digest      0.6.15  2018-01-28 CRAN (R 3.5.0)
     graphics  * 3.5.1   2018-07-02 local
     grDevices * 3.5.1   2018-07-02 local
     memoise     1.1.0   2017-04-21 CRAN (R 3.5.1)
     methods   * 3.5.1   2018-07-02 local
     stats     * 3.5.1   2018-07-02 local
     utils     * 3.5.1   2018-07-02 local
     withr       2.1.2   2018-03-15 CRAN (R 3.5.0)

Some actually advocate that writing a reproducible research compendium can be done by writing an R package. Those of you willing to have a clean R dependency management should thus have a look at Packrat.