Construire un environnement Python avec GUIX

Introduction

Sur nos serveurs informatiques, nous proposons NIX et GUIX comme gestionnaires de paquets. Grâce à ces outils, les utilisateurs peuvent configurer leurs environnements logiciels de manière autonome (contrairement à la commande module) tout en partageant les paquets déjà installés (contrairement à la commande conda), ce qui évite de surcharger le répertoire $HOME de chaque utilisateur avec des paquets logiciels communs.

Ces outils fournissent également des commandes très utiles pour travailler dans des environnements isolés. Dans ce tutoriel, nous montrerons comment GUIX peut remplacer la commande et/ou les mécanismes virtualenv de Python, de manière très puissante et applicable également en dehors de Python.

Petit rappel des commandes principales GUIX

Guix commandMain role
guix search stringbrowse the guix repositories to find packages matching string
guix install packages_nameinstall in the current profile the packages
guix install -p $GUIX_USER_PROFILE_DIR/profile_name package_nameinstall the package_name in the profile_name
guix remove package_nameremove in the current profile the package_name
guix pullupdate the package repository to have the last version of the packages (it may take a while :)
guix package –list-installed (or guix package -I)check what is actually installed
guix package -p $GUIX_USER_PROFILE_DIR/tuto1 -Isame as previous command in a specific profile (here tuto1)

Petit rappel des commandes GUIX spécifiques aux clusters GRICAD

CommandMain role
source /applis/site/guix-start.shload guix default profile
refresh_guix $GUIX_USER_PROFILE_DIR/profile_nameload the profile_name

Introduction aux commandes GUIX shell

Rôle de la commande

Pour créer un environnement de développement Python indépendant des paquets déjà installés sur le cluster, nous présentons ici la commande : guix shell.

Cette fonction était auparavant assurée par la commande guix environment, aujourd’hui obsolète.

Cette commande prend un ou plusieurs paquets en argument, compile les entrées et génère un environnement shell dédié pour les utiliser, en créant un nouveau profil.

$ guix shell *options* *list of packages*
$ guix shell emacs

Dépendances

Un paquet GUIX vient avec ses dépendances nécessaires à la compilation et à l’exécution. Le shell GUIX les compile alors automatiquement. Par conséquent, le nouvel environnement du shell est une version améliorée du shell d’origine. Il contient les PATHS nécessaires à la compilation et à l’exécution du paquet. Les nouveaux PATHS nécessaires sont ajoutés au $PATH par défaut.

Installation des paquets Python GUIX

Remarque : GUIX utilise python- pour les paquets python3 et python2-pour les paquets python2.

$ guix shell python2-numpy python2@2.7.17

Exécutez la commande Python juste après la commande d’installation avec :

$ guix shell python2-numpy python2@2.7.17 -- python

Python 2.7.17 (default, Jan  1 1970, 00:00:01)
[GCC 7.5.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>

Notez l’espace entre – et la commande.

Votre environnement Python est immédiatement opérationnel. Remarque : les dépendances sont également installées automatiquement (même s’il ne s’agit pas de dépendances Python).

Dans cet environnement, les variables PATH et PYTHONPATH sont les suivantes :

$ echo $PATH

/gnu/store/2gh3rsdqq9k0plpcnv45bah5lvvqn58f-profile/bin:/gnu/store/3w0fcgs37pq49a8qa87kr9rgv9p4bynl-profile/bin:/nix/var/nix/profiles/default/bin:/applis/site/other/visu_dahu:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/usr/sbin

Ici, vous pouvez constater que l’environnement “python2” a été ajouté à l’environnement d’origine (notez par exemple le chemin /usr/bin).

echo $PYTHONPATH
/gnu/store/2gh3rsdqq9k0plpcnv45bah5lvvqn58f-profile/lib/python2.7/site-packages

Pour isoler complètement votre environnement Python 2, utilisez l’option –pure. Cela empêche l’utilisation d’une autre installation Python antérieure et du PATH associé :

$ guix shell --pure  python2-numpy python2@2.7.17

$ (guix shell) echo $PATH
/gnu/store/2gh3rsdqq9k0plpcnv45bah5lvvqn58f-profile/bin

et

$ (guix shell)  echo $PYTHONPATH

/gnu/store/2gh3rsdqq9k0plpcnv45bah5lvvqn58f-profile/lib/python2.7/site-packages

Dans ce cas, veillez à installer le paquet coreutils afin de conserver les commandes Unix de base.

Conclusion

Vous pouvez désormais développer vos propres programmes Python dans un environnement isolé, ce qui vous permettra de garantir la reproductibilité de vos expériences.