Variables d'environnement pour les projets Python
Lors du développement d'une application Web ou d'un bot, nous traitons souvent des informations secrètes, divers jetons et mots de passe (clés API, secrets des formulaires Web). Coder en dur ces informations, et encore moins les stocker dans un système de contrôle de version accessible au public, est une très mauvaise idée.
Fichiers de configuration
Le moyen le plus simple de résoudre ce problème est de créer un fichier de configuration séparé avec toutes les informations sensibles et de l'ajouter à .gitignore
. L'inconvénient de cette approche est que dans git, vous devez également conserver le modèle de fichier de configuration et n'oubliez pas de le mettre à jour périodiquement.
Variables d'environnement
Une approche plus avancée consiste à utiliser des variables d'environnement. Les variables d'environnement sont des variables nommées qui contiennent des informations textuelles que les programmes exécutables peuvent utiliser. Par exemple, pour démarrer une application flask, vous devez d'abord spécifier le nom de notre application dans la variable d'environnement FLASK_APP
:
$ export FLASK_APP=hello.py $ flask run * Running on http://127.0.0.1:5000/
À l'aide de variables d'environnement, vous pouvez obtenir divers paramètres d'application et clés secrètes:
import os app.config['API_KEY'] = os.environ.get('API_KEY')
Bibliothèque Python-dotenv
Afin de ne pas définir manuellement les variables d'environnement à chaque redémarrage du terminal, vous pouvez utiliser le package python-dotenv . Il vous permet de charger des variables d'environnement à partir du fichier .env
dans le répertoire racine de l'application.
Installez le package:
pip install python-dotenv
Vous pouvez maintenant créer un fichier .env avec toutes les variables d'environnement dont votre application a besoin. Important, ajoutez le fichier .env
à .gitignore
, ne le stockez pas dans le système de contrôle de version.
import os from dotenv import load_dotenv dotenv_path = os.path.join(os.path.dirname(__file__), '.env') if os.path.exists(dotenv_path): load_dotenv(dotenv_path)
Ce fichier .env peut être utilisé pour toutes les variables de configuration, mais il ne peut pas être utilisé pour les variables d'environnement FLASK_APP
et FLASK_DEBUG
, car elles sont déjà nécessaires lors du chargement initial de l'application.
Utilitaire Direnv
Les variables d'environnement peuvent être chargées automatiquement lors de l'entrée dans le dossier du projet, ce qui est particulièrement pratique lorsque vous travaillez avec plusieurs projets en même temps. L'utilitaire direnv vous permet de le faire. Direnv est un gestionnaire de variables d'environnement terminal qui prend en charge bash, zsh, tcsh et d'autres shells. Vous permet de charger et de décharger automatiquement les variables d'environnement en fonction de votre répertoire actuel. Cela vous permet d'avoir des variables d'environnement spécifiques à chaque projet. Avant chaque invitation, la présence du fichier .envrc
dans les répertoires courant et parent est vérifiée. Si le fichier existe, il est chargé dans le sous-modèle bash et toutes les variables exportées sont ensuite capturées par direnv puis mises à la disposition du shell.
Installer direnv
sudo apt-get install direnv
Ensuite, vous devez apporter des modifications pour configurer notre shell; pour bash, ajoutez ce qui suit à la fin du ~/.bashrc
et redémarrez la console:
eval "$(direnv hook bash)"
Exemple DirenvCréez un nouveau dossier pour le projet:
$ mkdir ~/my-project $ cd ~/my-project
Nous montrons que la variable d'environnement FLASK_APP n'est pas chargée:
$ echo $FLASK_APP nope
Écrivez les variables d'environnement dans le fichier .envrc
:
$ echo export FLASK_APP=hello.py > .envrc .envrc is not allowed
Pour garantir la sécurité, après avoir créé ou modifié le fichier .envrc
, vous devez confirmer avec la commande direnv allow:
$ direnv allow . direnv: reloading direnv: loading .envrc direnv export: +FLASK_APP
Nous montrons que la variable d'environnement est chargée:
$ echo $FLASK_APP hello.py
Lorsque vous quittez le dossier du projet, les variables d'environnement sont déchargées
$ cd .. direnv: unloading
et redeviens bouleversé
$ echo $FLASK_APP nope
Travailler avec des environnements virtuels dans direnv
En plus de charger des variables d'environnement, direnv vous permet également de travailler avec un environnement virtuel pour Python.
L'environnement virtuel vous permet d'utiliser différentes versions de l'interpréteur python et des packages de bibliothèque pour des projets individuels. Il existe plusieurs façons de créer un environnement virtuel pour python, ici nous regardons le module venv, pour d'autres options sont décrites dans la documentation direnv .
Pour utiliser venv pour créer et activer automatiquement un environnement virtuel, vous devez ajouter le code suivant au ~/.config/direnv/direnvrc
(voir la documentation) .
Création d'un environnement virtuel
Si vous ajoutez une ligne au fichier .envrc
layout python-venv
puis en allant dans le dossier direnv créera un environnement virtuel dans le dossier direnv, par exemple .direnv/python-venv-3.7.3
.
Pour créer un environnement virtuel avec un chemin différent, par exemple, dans le dossier venv plus familier, vous devez définir la variable VIRTUAL_ENV
:
export VIRTUAL_ENV=.venv
De la même manière, vous pouvez connecter un environnement virtuel déjà créé.
Travailler avec différentes versions de Python
Pour installer autre que la version système de python, vous devez utiliser la commande:
layout python-venv python3.6
Créer une chaîne d'invite bash (PS1)
Contrairement à l'activation manuelle de l'environnement virtuel, dans notre cas, l'invite bash (PS1) ne sera pas modifiée (généralement, elle ressemble à (venv) user@comp:~$
). Pour renvoyer l'affichage d'activation de l'environnement virtuel sur la console, ajoutez le code suivant au ~/.bashrc
:
show_virtual_env() { if [[ -n "$VIRTUAL_ENV" && -n "$DIRENV_DIR" ]]; then echo "($(basename $VIRTUAL_ENV))" fi } export -f show_virtual_env PS1='$(show_virtual_env)'$PS1
Exemple de fichier de configuration de fichier .envrc
Voici à quoi pourrait ressembler le fichier .envrc
configuré pour développer une application flask:
export VIRTUAL_ENV=venv layout python-venv export FLASK_APP=app.py export FLASK_DEBUG=1
Cela vous permet d'activer automatiquement l'environnement virtuel et de charger les variables d'environnement lorsque vous entrez dans le dossier du projet.
