Variables d'environnement pour les projets Python

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.


#  .   . API_KEY = 'very_secret_password' 

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.


 #  . from config import API_KEY app = Flask(__name__) app.config['API_KEY'] = API_KEY 

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 Direnv

Cré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.


terminal_direnv

Source: https://habr.com/ru/post/fr472674/


All Articles