diff --git a/module4/ressources/resources_environment_fr.org b/module4/ressources/resources_environment_fr.org new file mode 100644 index 0000000000000000000000000000000000000000..9414cf923e6286f81adc1e9dd593ffe39986a28e --- /dev/null +++ b/module4/ressources/resources_environment_fr.org @@ -0,0 +1,471 @@ +# -*- mode: org -*- +#+TITLE: Informations sur l'environnement +#+AUTHOR: Arnaud Legrand +#+DATE: June, 2018 +#+STARTUP: overview indent +#+OPTIONS: num:nil toc:t +#+PROPERTY: header-args :eval never-export + +* Obtenir des informations sur votre dépôt Git +Lorsqu'on prend des notes, il peut être difficile de se rappeler +quelle version de code ou de fichier a été utilisée. C'est l'intérêt +du contrôle de versions. Voici quelques commandes utiles que nous +insérons généralement au début de nos notebooks dans des cellules +shell : + +#+begin_src shell :results output :exports both +git log -1 +#+end_src + +#+RESULTS: +: commit 741b0088af5b40588493c23c46d6bab5d0adeb33 +: Author: Arnaud Legrand +: Date: Tue Sep 4 12:45:43 2018 +0200 +: +: Fix a few typos and provide information on jupyter-git plugins. + +#+begin_src shell :results output :exports both +git status -u +#+end_src + +#+RESULTS: +#+begin_example +On branch master +Your branch is ahead of 'origin/master' by 4 commits. + (use "git push" to publish your local commits) + +Changes not staged for commit: + (use "git add ..." to update what will be committed) + (use "git checkout -- ..." to discard changes in working directory) + + modified: resources.org + +Untracked files: + (use "git add ..." to include in what will be committed) + + ../../module2/ressources/replicable_article/IEEEtran.bst + ../../module2/ressources/replicable_article/IEEEtran.cls + ../../module2/ressources/replicable_article/article.bbl + ../../module2/ressources/replicable_article/article.tex + ../../module2/ressources/replicable_article/data.csv + ../../module2/ressources/replicable_article/figure.pdf + ../../module2/ressources/replicable_article/logo.png + .#resources.org + +no changes added to commit (use "git add" and/or "git commit -a") +#+end_example + +/Note : L'option -u indique que Git doit aussi afficher le contenu des +répertoires nouvellement créés./ + +Nous ajoutons aussi souvent des commandes à la fin des notebooks +pour indiquer comment commiter les résultats (ajout des nouveaux +fichiers, commit avec un message clair et commande push). Par +exemple : +#+begin_src shell :results output :exports both +git add resources.org; +git commit -m "Completing the section on getting Git information" +git push +#+end_src + +#+RESULTS: +#+BEGIN_EXAMPLE +[master 514fe2c1 ] Completing the section on getting Git information + 1 file changed, 61 insertions(+) +Counting objects: 25, done. +Delta compression using up to 4 threads. +Compressing objects: 100% (20/20), done. +Writing objects: 100% (25/25), 7.31 KiB | 499.00 KiB/s, done. +Total 25 (delta 11), reused 0 (delta 0) +To ssh://app-learninglab.inria.fr:9418/learning-lab/mooc-rr-ressources.git + 6359f8c..1f8a567 master -> master +#+END_EXAMPLE + +Évidemment, dans ce cas il faut enregistrer le notebook avant d'exécuter +cette cellule, donc le résultat de cette dernière commande (avec le nouveau +Git hash) ne sera pas stocké dans la cellule. Ce n'est pas vraiment un +problème et c'est le prix à payer pour exécuter Git à partir du +notebook lui-même. + +* Obtenir des informations sur les librairies Python 3 +** Obtenir des informations sur votre système +Cette question est discutée sur [[https://stackoverflow.com/questions/3103178/how-to-get-the-system-info-with-python][StackOverflow]]. +#+begin_src python :results output :exports both +import platform +print(platform.uname()) +#+end_src + +#+RESULTS: +: uname_result(system='Linux', node='icarus', release='4.15.0-2-amd64', version='#1 SMP Debian 4.15.11-1 (2018-03-20)', machine='x86_64', processor='') + +** Lister les packages installés et leur version +Cette question est discutée sur [[https://stackoverflow.com/questions/20180543/how-to-check-version-of-python-modules][StackOverflow]]. Il est facile d'obtenir +la version de tous les packages installés en exécutant =pip= (l'installateur +de packages Python) dans une commande shell (la commande peut être =pip= +or =pip3= selon la configuration de votre ordinateur). + +Voici par exemple comment j'obtiens ces informations sur ma machine : +#+begin_src shell :results output :exports both +pip3 freeze +#+end_src + +#+RESULTS: +#+begin_example +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 +#+end_example + +Dans un notebook Jupyter, cela peut facilement être fait en utilisant +la commande magique =%%sh=. Voici par exemple ce que vous pouvez faire +et obtenir avec les notebooks Jupyter que nous avons déployés pour le +MOOC (notez qu’ici vous devez simplement utiliser la commande =pip=) : +#+begin_src python :results output :exports both +%%sh +pip freeze +#+end_src + +#+results: +#+begin_example +alembic==0.9.9 +asn1crypto==0.24.0 +attrs==18.1.0 +Automat==0.0.0 +... +numpy==1.13.3 +olefile==0.45.1 +packaging==17.1 +pamela==0.3.0 +pandas==0.22.0 +... +webencodings==0.5 +widgetsnbextension==3.2.1 +xlrd==1.1.0 +zope.interface==4.5.0 +#+end_example + +Dans la suite de ce document, je supposerai que la commande correcte +est =pip= et je ne vais pas systématiquement insérer la commande magique +=%%sh=. + +Une fois que vous savez quels packages sont installés, vous pouvez +facilement obtenir des informations supplémentaires sur un package +donné et notamment vérifier s'il a été installé "localement" via pip +ou s'il est installé à l'échelle du système. À nouveau dans une +commande shell : +#+begin_src shell :results output :exports both +pip show pandas +echo " " +pip show statsmodels +#+end_src + +#+RESULTS: +#+begin_example +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 +#+end_example +** Lister les packages importés (chargés dans une session Python) et leur version +Vous pouvez vouloir savoir quels packages sont chargés dans une session +Python ainsi que leur version sans recourir à pip (qui listera tous +les packages disponibles). Inspiré par [[https://stackoverflow.com/questions/4858100/how-to-list-imported-modules][StackOverflow]], voici une fonction +simple qui liste les packages chargés (ayant un attribut = __ version __ =, +qui n’est malheureusement pas tout à fait standard). +#+begin_src python :results output :exports both +def print_imported_modules(): + import sys + for name, val in sorted(sys.modules.items()): + if(hasattr(val, '__version__')): + print(val.__name__, val.__version__) + else: + print(val.__name__, "(unknown version)") + +print("**** Package list in the beginning ****"); +print_imported_modules() +print("**** Package list after loading pandas ****"); +import pandas +print_imported_modules() +#+end_src + +#+RESULTS: +#+begin_example +,**** 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 +#+end_example + +** Sauvegarder et restaurer un environnement avec pip +La façon la plus simple de faire est la suivante : +#+begin_src shell :results output :exports both +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 +#+end_src + +Si vous voulez avoir plusieurs environnements Python sur votre ordinateur, +vous pouvez vouloir utiliser [[https://docs.pipenv.org/][Pipenv]] (mais je doute que cela permette +de tracer correctement les bibliothèques dynamiques FORTRAN ou C +encapsulées dans Python). + +** Installer un nouveau package ou une version spécifique +L’environnement Jupyter que nous avons déployé sur nos serveurs pour +le MOOC est basé sur Miniconda 4.5.4 et Python 3.6. Dans cet +environnement, vous devez simplement utiliser la commande =pip= +(vous devrez peut-être utiliser =pip3= sur votre ordinateur). + +Voici ce que j'obtiens si j'interroge la version actuelle de +=statsmodels= dans une commande shell. +#+begin_src shell :results output :exports both +pip show statsmodels +#+end_src + +#+RESULTS: +#+BEGIN_EXAMPLE +Name: statsmodels +Version: 0.8.0 +Summary: Statistical computations and models for Python +Home-page: http://www.statsmodels.org/ +Author: Skipper Seabold, Josef Perktold +Author-email: pystatsmodels@googlegroups.com +License: BSD License +Location: /opt/conda/lib/python3.6/site-packages +Requires: scipy, patsy, pandas +#+END_EXAMPLE + +Je peux alors facilement mettre =statsmodels= à jour : +#+begin_src shell :results output :exports both +pip install --upgrade statsmodels +#+end_src + +La nouvelle version devrait alors être : +#+begin_src shell :results output :exports both +pip show statsmodels +#+end_src + +#+RESULTS: +#+BEGIN_EXAMPLE +Name: statsmodels +Version: 0.9.0 +Summary: Statistical computations and models for Python +Home-page: http://www.statsmodels.org/ +Author: Skipper Seabold, Josef Perktold +Author-email: pystatsmodels@googlegroups.com +License: BSD License +Location: /opt/conda/lib/python3.6/site-packages +Requires: scipy, patsy, pandas +#+END_EXAMPLE + +Il est même possible d’installer une version spécifique (peut-être +beaucoup plus ancienne), par exemple : +#+begin_src shell :results output :exports both +pip install statsmodels==0.6.1 +#+end_src +* Obtenir des informations sur les packages R +** Lister les packages installés et leur version +Il existe une commande R intégrée (=installed.packages=) permettant de +récupérer et de lister les détails de tous packages installés. +#+begin_src R :results table :session *R* :exports both :colnames yes +head(installed.packages()) +#+end_src + +#+RESULTS: +| Package | LibPath | Version | Priority | Depends | Imports | LinkingTo | Suggests | Enhances | License | License_is_FOSS | License_restricts_use | OS_type | MD5sum | NeedsCompilation | Built | | +|-------------------------------------------------------------+-------------------------------------------------+---------------------------------------------------------+-------------+----------------------------------------------------------+----------------------------------------------------------------+-----------+---------------+---------------------------------------+---------------------------+---------------+---------------------+--------+--------+------------------+-------+-------| +| BH | /home/alegrand/R/x86_64-pc-linux-gnu-library/3.5 | 1.66.0-1 | nil | nil | nil | nil | nil | nil | BSL-1.0 | nil | nil | nil | nil | no | 3.5.1 | | +| Formula | /home/alegrand/R/x86_64-pc-linux-gnu-library/3.5 | 1.2-3 | nil | R (>= 2.0.0), stats | nil | nil | nil | nil | GPL-2 | GPL-3 | nil | nil | nil | nil | no | 3.5.1 | +| Hmisc | /home/alegrand/R/x86_64-pc-linux-gnu-library/3.5 | 4.1-1 | nil | lattice, survival (>= 2.40-1), Formula, ggplot2 (>= 2.2) | methods, latticeExtra, cluster, rpart, nnet, acepack, foreign, | | | | | | | | | | | | +| gtable, grid, gridExtra, data.table, htmlTable (>= 1.11.0), | | | | | | | | | | | | | | | | | +| viridis, htmltools, base64enc | nil | chron, rms, mice, tables, knitr, ff, ffbase, plotly (>= | | | | | | | | | | | | | | | +| 4.5.6) | nil | GPL (>= 2) | nil | nil | nil | nil | yes | 3.5.1 | | | | | | | | | +| Matrix | /home/alegrand/R/x86_64-pc-linux-gnu-library/3.5 | 1.2-14 | recommended | R (>= 3.2.0) | methods, graphics, grid, stats, utils, lattice | nil | expm, MASS | MatrixModels, graph, SparseM, sfsmisc | GPL (>= 2) | file LICENCE | nil | nil | nil | nil | yes | 3.5.1 | +| StanHeaders | /home/alegrand/R/x86_64-pc-linux-gnu-library/3.5 | 2.17.2 | nil | nil | nil | nil | RcppEigen, BH | nil | BSD_3_clause + file LICENSE | nil | nil | nil | nil | yes | 3.5.1 | | +| acepack | /home/alegrand/R/x86_64-pc-linux-gnu-library/3.5 | 1.4.1 | nil | nil | nil | nil | testthat | nil | MIT + file LICENSE | nil | nil | nil | nil | yes | 3.5.1 | | + +** Lister les packages importés (chargés dans une session R) et leur version +Le meilleur moyen semble être d'utiliser le package =devtools=. Si le +package n'est pas installé, vous devez d'abord l'installer en +exécutant la commande =install.packages("devtools",dep=TRUE)= dans =R=). + +#+begin_src R :results output :session *R* :exports both +sessionInfo() +devtools::session_info() +#+end_src + +#+RESULTS: +#+begin_example +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) +#+end_example + +Certains suggèrent même [[https://github.com/ropensci/rrrpkg][l'écriture d'un package R pour faciliter la +recherche reproductible]]. + +Ceux d'entre vous qui souhaitent disposer d'une gestion des dépendances +"propre" en R peuvent aussi jeter un coup d'œil à [[https://rstudio.github.io/packrat/][Packrat]]. +** Installer un nouveau package ou une version spécifique +Cette section est principalement un copier-coller du [[https://support.rstudio.com/hc/en-us/articles/219949047-Installing-older-versions-of-packages][récent post de Ian +Pylvainen]] sur ce sujet. Il comprend une explication très claire de la +façon de procéder. + +*** Installer une version pré-compilée +Si vous êtes sur un système Debian ou Ubuntu, il peut être difficile +d’accéder à une version spécifique sans casser votre système. Donc, +sauf si vous passez à la dernière version disponible pour votre +distribution Linux, *nous vous recommandons fortement d'installer les +packages à l'aide des fichiers source*. Dans ce cas, vous devez vous +assurer que vous disposez de l'ensemble des outils nécessaires pour +créer des packages à partir des sources (par exemple : gcc, FORTRAN, +etc.). Sous Windows, il se peut que vous deviez installer [[https://cran.r-project.org/bin/windows/Rtools/][Rtools]]. + +Si vous utilisez Windows ou OS X et recherchez un package pour une +*ancienne version de R* (version 2.1 ou inférieure), vous pouvez le +rechercher sur l'[[https://cran-archive.r-project.org/bin/][archive binaire du site CRAN]]. Une fois que vous avez l'URL, +vous pouvez l'installer à l'aide d'une commande similaire à l'exemple +ci-dessous : +#+begin_src R :results output :session *R* :exports both +packageurl <- "https://cran-archive.r-project.org/bin/windows/contrib/2.13/BBmisc_1.0-58.zip" +install.packages(packageurl, repos=NULL, type="binary") +#+end_src +*** Utiliser devtools +La méthode la plus simple pour installer la version dont vous avez +besoin consiste à utiliser la fonction =install_version()= du +package =devtools= (vous devez évidemment avoir préalablement installé +=devtools=, ce qui peut être fait en exécutant =R= la commande +=install.packages("devtools",dep=TRUE)=). Par exemple: + +#+begin_src R :results output :session *R* :exports both +require(devtools) +install_version("ggplot2", version = "0.9.1", repos = "http://cran.us.r-project.org") +#+end_src +*** Installer à partir du code source +Vous pouvez également installer un ancien package à partir de son code +source. Si vous ne réussissez pas avec devtools ou si vous ne voulez +pas dépendre de ce package, vous pouvez l’installer à partir du source +à l'aide de la commande =install.packages()= en utilisant la bonne +URL. Cette URL peut être obtenue en naviguant dans [[https://cran.r-project.org/src/contrib/Archive][l'archive de +packages du site CRAN]]. + +Une fois que vous avez l'URL, vous pouvez l'installer à l'aide d'une +commande similaire à l'exemple ci-dessous : +#+begin_src R :results output :session *R* :exports both +packageurl <- "http://cran.r-project.org/src/contrib/Archive/ggplot2/ggplot2_0.9.1.tar.gz" +install.packages(packageurl, repos=NULL, type="source") +#+end_src + +Si vous connaissez l'URL, vous pouvez également installer à partir du +source par ligne de commande en dehors de R. Par exemple (en bash) : +#+begin_src shell :results output :exports both +wget http://cran.r-project.org/src/contrib/Archive/ggplot2/ggplot2_0.9.1.tar.gz +R CMD INSTALL ggplot2_0.9.1.tar.gz +#+end_src +*** Problèmes potentiels +Quelques problèmes sont susceptibles de survenir lors de l'installation +d'anciennes versions de packages : +- Vous pouvez perdre des fonctionnalités ou des corrections de + bugs qui ne sont présentes que dans les versions les plus récentes + des packages. +- L'ancienne version de package requise peut ne pas être compatible + avec la version de R que vous avez installée. Dans ce cas, vous + devrez soit rétrograder R vers une version compatible, soit mettre à + jour votre code R pour qu'il fonctionne avec une version plus + récente du package. \ No newline at end of file