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.
| Guix command | Main role |
|---|---|
| guix search string | browse the guix repositories to find packages matching string |
| guix install packages_name | install in the current profile the packages |
| guix install -p $GUIX_USER_PROFILE_DIR/profile_name package_name | install the package_name in the profile_name |
| guix remove package_name | remove in the current profile the package_name |
| guix pull | update 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 -I | same as previous command in a specific profile (here tuto1) |
| Command | Main role |
|---|---|
| source /applis/site/guix-start.sh | load guix default profile |
| refresh_guix $GUIX_USER_PROFILE_DIR/profile_name | load the profile_name |
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
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.
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.
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.