utilisation de Guix avec le script de la leçon

Comment va t-on développer notre code source sur les cimetières de guerre avec Guix ?

Installer Guix

TipLe gestionnaire de paquets Guix ne peut être installé que sur une distribution GNU/Linux

La première chose à faire est d’installer Guix sur son ordinateur. Pour plus de simplicité, on va charger Guix comme gestionnaire de paquets et non comme système d’exploitation. Les étapes à suivre pour installer Guix sont présentées en français sur le site du GRICAD. Si on souhaite plutôt suivre une démonstration en ligne, celle de System Crafters en anglais est très synthétique. Lorsqu’on installe quelque chose, il faut toujours être prêt à le désinstaller. Pour désinstaller Guix plus tard, si vous ne l’adoptez pas tout de suite et pour toujours, toute l’information nécessaire à ce jour est présente dans ce gist

## Charger les dépendances nécessaires pour exécuter le code source

Dans un terminal bash, les commandes suivantes peuvent être passées pour installer et désinstaller des paquets (une fois guix correctement installé et les lignes nécessaires ajoutées au fichier .bashrc)

guix search <librairie> va chercher les librairies packagées pour Guix dans les sources qui sont mentionnées dans le fichier channels.scm ou à défaut dans le channel principal de guix. Les paquets de R seront trouvables depuis le CRAN (entièrement versé dans Guix) sous la forme r-paquet, par exemple r-leaflet. Assez souvent les librairies Python peuvent être trouvées avec python-librairie, en l’occurrence pour folium : python-folium.

Pour installer une dépendance dans son profil par défaut, entrer la commande suivante : guix package -i <librairie> En cas de besoin, pour la désinstaller : guix package -i <librairie> Guix utilise un langage transactionnel, on peut passer plusieurs commandes d’installation et de désinstallation dans une même ligne : guix package -i <librairie1> -r <librairie2>: installe la librairie1 et désinstalle la librairie2

A partir des différents packages qu’on a téléchargés, on peut commencer à rédiger un fichier de configuration manifest.scm qui servira à reproduire le code source sur un autre ordinateur :

guix package --export-manifest > manifest.scm

Cette commande fait le récapitulatif dans le langage propre à Guix (une version spécifique de Scheme) des packages qui ont été installés.

Pour avoir connaissance de l’état du channel qu’on utilise (et notamment récupérer le hash afin de donner cet état historique comme référence), on va utiliser la commande guix describe

Rédiger les fichiers de configuration

Il faut un peu se familiariser avec la syntaxe de ces fichiers particuliers que sont les fichiers manifest.scm et channels.scm pour les rédiger correctement. C’est un pli à prendre, mais cela vient vite. Le langage utilisé est Scheme, basé sur Lisp, un langage qui use (et peut-être abuse un peu) de parenthèses : faites bien le compte des parenthèses que vous avez ouvertes et fermées pour obtenir un fichier valide.

Voici ce que ça donne pour notre code source (on y a fait figurer les dépendances nécessaires non seulement pour R mais aussi pour Python) :

manifest.scm

;; Ce fichier « manifeste » peut être passé à « guix package -m » pour
;; reproduire le contenu de votre profil. Son contenu est « symbolique » : il
;; ne spécifie que les noms des paquets. Pour reproduire exactement le même
;; profil, vous devez aussi retenir les canaux utilisés, ceux renvoyés par
;; « guix describe ». Voir la section « Répliquer Guix » dans le manuel.


(specifications->manifest

        ;; Python et ses dépendances

  (list "python-folium"
        "python-sparqlwrapper"
        "python"
        
        
        ;; R et ses dépendances

        "coreutils"
        "curl" 
        "nss-certs"
        "r" 
        "r-wikidatar" 
        "r-leaflet" 

        
        ))
Notene pas oublier les dépendances de base

Pour ne pas être limité avec R, on charge généralement en plus d’autres paquets qui permettent de faire de la gestion minimal de fichiers, d’aller chercher des dépendances en ligne, etc. C’est le cas avec coreutils, curl et nss-certs

channels.sm

(cons*
 (channel
  (name 'guix-cran)
  (url "https://github.com/guix-science/guix-cran.git")
  (branch "master")
  (commit "64f693caddbc98022074b28f4ce69121fadb6068"))

    (channel
    (name 'guix)
    (url "https://git.guix.gnu.org/guix.git")
    (branch "master")
    (commit
        "6da26b6b9072b4f9db47374c7b7b5b2a3e933259")
    )

 %default-channels)
Noteil est possible d’utiliser plusieurs channels pour un même projet

Si le channel par défaut de Guix contient une bonne partie des librairies Python dont on pourrait avoir besoin, lorsqu’on travaille avec R, il peut être utile d’ajouter le channel qui comporte les packages du CRAN mais packagés pour Guix. Ce deuxième channel s’appelle guix-cran

Ici on a fixé les sources guix-cran dans leur état du 6 février pour Guix-cran comme pour le channel guix par défaut, publié sur la forge codeberg Cela signifie que les versions des packages qui sont mentionnées dans le manifest.scm seront celles du 6 février quand on reproduira le code source avec Guix.

reproduire le code source dans un environnement guix

Guix permet de remonter le temps avec le fichier de configuration channels.scm et en utilisant une fonction qui s’appelle time-machine. Afin de reproduire le code source tel qu’à sa publication avec exactement les mêmes versions des mêmes packages. Comme l’opération se fera dans le terminal guix, elle se déroulera de manière isolée sans interactions avec des librairies pré-installées ni avec des paramètres propres à la machine qu’on utilise.

La commande à passer pour reproduire ce code source sera la suivante (entrer la commande dans le terminal à l’endroit où se trouve le code source à exécuter : map.py ou map.R)

guix time-machine --channels=channels.scm -- shell --manifest=manifest.scm -- python3 map.py

Cette commande ouvre un terminal guix (guix shell) dans lequel le code source map.py sera exécuté avec Python. Les packages nécessaires à cette opération sont listées dans le fichier manifest.scm et leur version sera celle qui était là leur le 6 février 2026 dans les channels guix et guix-cran.

Pour la version pour R :

guix time-machine --channels=channels.scm -- shell --manifest=manifest.scm -- Rscript map.R

Le script doit s’exécuter et son résultat devrait apparaître dans le dossier output de ce répertoire.

C’est ainsi que grâce à Guix, on peut reproduire un résultat identique avec un code source à plusieurs mois/années d’intervalle, ce qui apparaît très compliqué à réaliser avec les autres méthodes que nous avons passées en revue (fourniture d’un renv.lock ou d’un fichier requirements.txt, dockerisation…)