-
PYTHON > les environnements virtuels (virtualenv)
Installation
pip install virtualenv
Créer un dossier où tous les environnements iront :
mkdir .venvs
Puis, créer un dossier à l’intérieur pour recevoir le premier environnement appelé mon_env
mkdir .venvs/mon_env
Créer un environnement virtuel en lançant la commande suivante :
cd .venvs virtualenv -p python3 mon_env
Activer un environnement
source mon_env/bin/activate
L’environnement virtuel est indiqué entre parenthèses sur la gauche du prompt :
(mon_env) moi@ma_machine $
Dès lors, l’interpréteur Python utilisé n’est plus celui du système mais celui de l’environnement virtuel. Les packages installés sont également différents. Si on ouvre un autre terminal, on constate que l’environnement virtuel n’est pas activé. Il faut le réactiver à chaque fois .
Désactiver un environnement
deactivate
Supprimer un environnement
deactivate rm -rf mon_env
Désactiver le suivi Git
Créer un fichier .gitignore qui indique à Git d’ignorer le dossier mon_env :
mon_env/
Dépendances
Créer un fichier requirements.txt qui liste les différentes librairies utilisées ainsi que leur version. Pip le fait automatiquement :
pip freeze > requirements.txt appdirs==1.4.3 packaging==16.8 pyparsing==2.2.0 six==1.10.0
Et pour installer toutes dépendances (librairies), avec le fichier requirements.txt :
pip install -r requirements.txt
—
Configurer un alias pour virtualenv avec Python 3 :
Ajouter dans .bshrc :
alias mkvenv='virtualenv -p python3'
Puis recharger le fichier :
source ~/.bashrc
Créer un nouvel environnement virtuel :
mkvenv ~/venvs/mon_env
Activer l’environnement virtuel :
source ~/venvs/mon_env/bin/activate
Automatiser l’activation
Pour ne pas avoir à taper source mon_env/bin/activate à chaque fois : créer un script autoactivate.sh et y ajouter :
#!/bin/bash source ~/venvs/mon_env/bin/activate
chmod +x autoactivate.sh
Ainsi, chaque fois que l’on veut activer l’environnement virtuel :
./autoactivate.sh
environnement virtuel par défaut
1 : Créer un environnement virtuel global
Supposons que le dossier de l’environnement par défaut se trouve à ~/envs/global_env
virtualenv ~/envs/global_env
2 : Ajouter un script d’activation automatique
Pour automatiser l’activation de cet environnement à chaque ouverture du terminal ou que l’on entre dans un répertoire de projet, ajouter à la fin du fichier ~/.bashrc ou ~/.bash_profile cette commande :
source ~/envs/global_env/bin/activate
Recharger le fichier de configuration de shell :
source ~/.bashrc
3 : Vérifier l’activation de l’environnement virtuel
Ouvrir un nouveau terminal et vérifier que l’environnement virtuel est activé automatiquement :
which python /home/moi/envs/global_env/bin/python
4 : Installer des paquets
pip install <nom_du_paquet>
5 : Utiliser l’environnement virtuel dans tous les projets
Dès lors, chaque fois que l’on travaille sur un projet, nous serons dans l’environnement virtuel global par défaut. Cela signifie que tous les paquets installés seront disponibles pour tous les projets.
environnement virtuel dans le shebang
Trouver le chemin de l’interpréteur Python :
source ~/envs/mon_env/bin/activate which python /home/moi/.envs/mon_env/bin/python
Ajouter le shebang dans le script Python
#!/home/moi/.envs/mon_env/bin/python print("Bonjour, monde!")
Mettre à jour tous les modules d’un environnement virtuel
1. Créer un script update_packages.sh :
#!/bin/bash # Chemin vers l'environnement virtuel VENV_PATH="~/envs/mon_env" # Activer l'environnement virtuel source $VENV_PATH/bin/activate # Mettre à jour pip pip install --upgrade pip # Mettre à jour tous les paquets installés pip list --format=freeze | grep -v '^\-e' | cut -d = -f 1 | xargs pip install -U # Désactiver l'environnement virtuel deactivate
chmod +x ~/update_packages.sh
2 : Ajouter une tâche cron
crontab -e
Tous les jours à 2h du matin :
0 2 * * * /bin/bash ~/update_packages.sh >> ~/update_packages.log 2>&1
>> ~/update_packages.log 2>&1Redirige la sortie et les erreurs vers un fichier de log ~/update_packages.log.Vérifier que la tâche cron a bien été ajoutée :
crontab -l
Voili, voilou !