Les variables d'environnement sont des mécanismes puissants qui permettent de stocker les détails de configuration de votre projet de développement de manière flexible et sécurisée. Ils stockent des paires clé-valeur de données accessibles par des langages de programmation tels que Python et gardent ces informations à l'abri des regards indiscrets. Dans ce tutoriel, vous apprendrez les concepts et techniques incontournables pour créer et gérer les variables d'environnement en Python.
Que sont les variables d'environnement ?
Les variables d'environnement sont des paires nom-valeur stockées dans un endroit sûr de votre système d'exploitation. Le plus souvent, elles se présentent comme suit :
En Python, vous pouvez utiliser de telles variables pour stocker des informations sensibles liées à votre projet de développement. Les informations sensibles peuvent être :
Clés API pour accéder aux applications des autres
Nom d'utilisateur et mots de passe pour se connecter aux applications par le biais de scripts
Informations d'identification de la base de données
tout ce qui pourrait poser un problème de sécurité en cas d'exposition accidentelle.
Par exemple, si vous écrivez un script Python qui utilise ouvertement vos identifiants AWS et que vous commettez accidentellement ce script sur GitHub, il y a une chance que des parties malveillantes le découvrent et augmentent considérablement votre facture AWS (cela est connu).
Un autre avantage des variables d'environnement est la possibilité de les configurer. Vous pouvez facilement ajuster les paramètres (URL de la base de données, chemins d'accès aux fichiers) en modifiant les variables d'environnement sans changer votre code. Cette fonction est particulièrement utile si vous utilisez le même paramètre dans plusieurs parties de votre projet.
Apprenons donc à travailler avec eux en Python.
Comment récupérer les variables d'environnement dans le module os de Python
Pour récupérer les variables d'environnement existantes dans votre système, vous pouvez utiliser le module os. Il dispose de la fonction .getenv pour récupérer les variables :
Ci-dessus, je récupère le nom de l'utilisateur du système, qui est intégré dans tous les systèmes. Il y en a beaucoup d'autres comme le chemin de la maison :
La fonction .getenv() ne renvoie rien, mais nous pouvons modifier ce comportement. Vous pouvez utiliser son paramètre default pour renvoyer une valeur personnalisée si la variable n'existe pas :
os.getenv("COMPUTER_PASSWORD", default="Nope!")Propulsé par
La fonction .getenv() est la meilleure méthode pour récupérer les variables existantes.
Cependant, dans d'autres sources, vous pouvez trouver des méthodes différentes comme l'attribut .environ, qui renvoie un dictionnaire contenant toutes les variables d'environnement :
current_directory = os.environ.get("PWD",None)
current_directory
Propulsé par
'/home/bexgboost/articles/2024/4_april'Propulsé par
Comme il s'agit d'un dictionnaire, vous pouvez utiliser la notation entre crochets (non recommandée) ou la fonction .get() pour récupérer une valeur.
os a également accès à la variable système la plus importante, appelée PATH. PATH contient les chemins absolus de tous les exécutables installés sur votre système, et elle est donc assez longue :
Utiliser la bibliothèque python-dotenv pour gérer efficacement les variables d'environnement en Python
Définition de variables d'environnement personnalisées
Maintenant que nous savons comment extraire des variables existantes, voyons comment définir des variables personnalisées. La première méthode consiste à utiliser le dictionnaire os.environ:
# Create a new environment variable
os.environ["NEW_VARIABLE"]="42"# Always expects a string value
os.getenv("NEW_VARIABLE")Propulsé par
Cependant, cette méthode n'est pas très utile car toutes les nouvelles variables seront perdues à la fin de la session en cours.
Heureusement, il existe une méthode plus durable pour stocker les variables d'environnement en utilisant les fichiers .env (prononcé dot-env). Ces fichiers ont la même syntaxe, ce qui signifie qu'ils fonctionneront sur n'importe quel système d'exploitation. Voici un exemple de fichier .env :
CUSTOM_API_LINK=https://myapi.com/v1/api
SNOWFLAKE_USERNAME=bexgboost
MYSQL_DATABASE_PASSWORD=as3ndf03
Propulsé par
Pour l'instant, il ne définit que trois variables. Pour lire ce fichier et en extraire le contenu, nous utiliserons une bibliothèque appelée python-dotenv:
La syntaxe des fichiers .env est assez souple. Par exemple, vous pouvez définir des variables avec des valeurs sur plusieurs lignes (avec des guillemets) :
LONG_ENV="This is an environment
variable with a long message"
Propulsé par
Utilisez des caractères d'échappement :
LONG_ENV="This value uses an \"escape character"Propulsé par
Vous pouvez également ajouter des commentaires au fichier pour référence ultérieure :
# You can also add comments anywhere with a hashtag
CUSTOM_API_LINK=https://myapi.com/v1/api
SNOWFLAKE_USERNAME=bexgboost
MYSQL_DATABASE_PASSWORD=as3ndf03
Propulsé par
Il est également possible d'utiliser la valeur d'une variable à l'intérieur d'une autre en utilisant la syntaxe ${VAR_NAME}:
FIRST_NAME=John
LAST_NAME=Doe
FULL_NAME="I am ${FIRST_NAME} ${LAST_NAME}"Propulsé par
Récupération des variables d'environnement personnalisées avec python-dotenv
La récupération des variables personnalisées se fait de la même manière qu'auparavant - il suffit d'utiliser le module os:
import os
os.getenv("CUSTOM_API_LINK")Propulsé par
Une fois que vous avez installé Python-dotenv, vous n'avez pas besoin de l'importer dans Python si vous utilisez Jupyter. La bibliothèque est livrée avec une méthode magique Jupyter qui la charge automatiquement :
# Run this anywhere in the notebook to load EVs from .env%load_ext dotenv
%dotenv
Propulsé par
Ensuite, vous pouvez à nouveau utiliser le module os:
import os
os.getenv("SNOWFLAKE_USERNAME")Propulsé par
Meilleures pratiques pour l'utilisation des variables d'environnement en Python
Dans cette section, nous allons énumérer quelques bonnes pratiques pour s'assurer que les variables d'environnement restent sûres et pleinement utilisables.
1. Ajoutez toujours les fichiers .env à .gitignore afin de ne pas les commettre accidentellement sur GitHub.
# Create .gitignore if it doesn't exist
$ touch .gitignore
$ echo ".env">>.gitignore
Propulsé par
2. Lorsque vous définissez des variables, utilisez des noms descriptifs en MAJUSCULES.
# Good
DEBUG=True
LOGGING_VERBOSITY=3# Bad
debug=True
LV=3Propulsé par
3. Créez un fichier .env unique pour stocker les variables système dont vous avez besoin dans chaque projet.
4. Contrôlez la portée de vos fichiers .env. Créez des fichiers distincts pour les différentes parties de votre processus de développement, comme ci-dessous :
Si vous créez plusieurs fichiers .env avec des noms différents, modifiez votre fichier .gitignore pour qu'ils soient tous exclus de l'indexation de git :
# Pay attention to the asterisk *
$ echo ".env*">>.gitignore
Propulsé par
Conclusion
Dans cet article, nous avons appris tous les concepts et techniques essentiels pour gérer efficacement les variables d'environnement en Python. Nous avons découvert comment récupérer des variables existantes avec le module OS de Python et comment créer des valeurs personnalisées avec la bibliothèque python-dotenv. Nous avons également appris à rédiger des fichiers .env conformes aux meilleures pratiques.
Vous pouvez également consulter notre cursus de programmation Python, qui vous fera passer du statut de débutant à celui de Pythoniste avancé grâce à des exercices et des projets pratiques.
Initiez-vous aux structures de données de Python : apprenez-en plus sur les types de données et les structures de données primitives et non primitives, telles que les chaînes de caractères, les listes, les piles, etc.
Tutoriel complet d'introduction aux boucles Python. Apprenez et pratiquez les boucles while et for, les boucles imbriquées, les mots-clés break et continue, la fonction range et bien plus encore.
Améliorez vos compétences en programmation. Apprenez à optimiser le code, à écrire des fonctions et des tests, et à utiliser les meilleures techniques de génie logiciel.
Les variables d'environnement sont des mécanismes puissants qui permettent de stocker les détails de configuration de votre projet de développement de manière flexible et sécurisée. Ils stockent des paires clé-valeur de données accessibles par des langages de programmation tels que Python et gardent ces informations à l'abri des regards indiscrets. Dans ce tutoriel, vous apprendrez les concepts et techniques incontournables pour créer et gérer les variables d'environnement en Python.
Que sont les variables d'environnement ?
Les variables d'environnement sont des paires nom-valeur stockées dans un endroit sûr de votre système d'exploitation. Le plus souvent, elles se présentent comme suit :
En Python, vous pouvez utiliser de telles variables pour stocker des informations sensibles liées à votre projet de développement. Les informations sensibles peuvent être :
Par exemple, si vous écrivez un script Python qui utilise ouvertement vos identifiants AWS et que vous commettez accidentellement ce script sur GitHub, il y a une chance que des parties malveillantes le découvrent et augmentent considérablement votre facture AWS (cela est connu).
Un autre avantage des variables d'environnement est la possibilité de les configurer. Vous pouvez facilement ajuster les paramètres (URL de la base de données, chemins d'accès aux fichiers) en modifiant les variables d'environnement sans changer votre code. Cette fonction est particulièrement utile si vous utilisez le même paramètre dans plusieurs parties de votre projet.
Apprenons donc à travailler avec eux en Python.
Comment récupérer les variables d'environnement dans le module os de Python
Pour récupérer les variables d'environnement existantes dans votre système, vous pouvez utiliser le module
os. Il dispose de la fonction .getenvpour récupérer les variables :Ci-dessus, je récupère le nom de l'utilisateur du système, qui est intégré dans tous les systèmes. Il y en a beaucoup d'autres comme le chemin de la maison :
Ou le chemin d'accès à votre exécutable Conda :
Ainsi, lorsque vous exécutez les commandes
conda, c'est ainsi que votre terminal sait quelle application exécuter.Mais que se passe-t-il si vous essayez de récupérer une variable qui n'existe pas :
La fonction
.getenv()ne renvoie rien, mais nous pouvons modifier ce comportement. Vous pouvez utiliser son paramètredefaultpour renvoyer une valeur personnalisée si la variable n'existe pas :La fonction
.getenv() est la meilleure méthode pour récupérer les variables existantes.Cependant, dans d'autres sources, vous pouvez trouver des méthodes différentes comme l'attribut .environ, qui renvoie un dictionnaire contenant toutes les variables d'environnement :
Comme il s'agit d'un dictionnaire, vous pouvez utiliser la notation entre crochets (non recommandée) ou la fonction
.get()pour récupérer une valeur.osa également accès à la variable système la plus importante, appelée PATH.PATHcontient les chemins absolus de tous les exécutables installés sur votre système, et elle est donc assez longue :Chaque chemin dans
PATHest séparé par deux points. Comptons la durée dePATHsur mon système :79! Pas mal.
Utiliser la bibliothèque python-dotenv pour gérer efficacement les variables d'environnement en Python
Définition de variables d'environnement personnalisées
Maintenant que nous savons comment extraire des variables existantes, voyons comment définir des variables personnalisées. La première méthode consiste à utiliser le dictionnaire
os.environ:Cependant, cette méthode n'est pas très utile car toutes les nouvelles variables seront perdues à la fin de la session en cours.
Heureusement, il existe une méthode plus durable pour stocker les variables d'environnement en utilisant les fichiers
.env(prononcé dot-env). Ces fichiers ont la même syntaxe, ce qui signifie qu'ils fonctionneront sur n'importe quel système d'exploitation. Voici un exemple de fichier .env :Pour l'instant, il ne définit que trois variables. Pour lire ce fichier et en extraire le contenu, nous utiliserons une bibliothèque appelée
python-dotenv:Ensuite, dans un script Python ou un carnet Jupyter, nous importerons sa fonction
load_dotenvet l'appellerons :S'il ne trouve pas de fichier
.envdans le répertoire actuel, il cherchera dans tous les répertoires parents et renverra True s'il en trouve un.J'ai stocké le fichier
.envci-dessus dans mon répertoire personnel~/.env; c'est pourquoiload_dotenva pu le trouver.Pour créer vos propres fichiers, vous pouvez utiliser la commande
touchdans le terminal ou utiliser un éditeur de texte comme VSCode :La syntaxe des fichiers
.envest assez souple. Par exemple, vous pouvez définir des variables avec des valeurs sur plusieurs lignes (avec des guillemets) :Utilisez des caractères d'échappement :
Vous pouvez également ajouter des commentaires au fichier pour référence ultérieure :
Il est également possible d'utiliser la valeur d'une variable à l'intérieur d'une autre en utilisant la syntaxe
${VAR_NAME}:Récupération des variables d'environnement personnalisées avec
python-dotenvLa récupération des variables personnalisées se fait de la même manière qu'auparavant - il suffit d'utiliser le module
os:Veillez à appeler d'abord
load_dotenv.Si votre fichier
.envest situé dans un endroit inaccessible àload_dotenv, vous pouvez lui indiquer un chemin direct comme ci-dessous :Travailler avec des fichiers .env dans Jupyter
Une fois que vous avez installé
Python-dotenv, vous n'avez pas besoin de l'importer dans Python si vous utilisez Jupyter. La bibliothèque est livrée avec une méthode magique Jupyter qui la charge automatiquement :Ensuite, vous pouvez à nouveau utiliser le module
os:Meilleures pratiques pour l'utilisation des variables d'environnement en Python
Dans cette section, nous allons énumérer quelques bonnes pratiques pour s'assurer que les variables d'environnement restent sûres et pleinement utilisables.
1. Ajoutez toujours les fichiers
.envà.gitignoreafin de ne pas les commettre accidentellement sur GitHub.2. Lorsque vous définissez des variables, utilisez des noms descriptifs en MAJUSCULES.
3. Créez un fichier .env unique pour stocker les variables système dont vous avez besoin dans chaque projet.
4. Contrôlez la portée de vos fichiers .env. Créez des fichiers distincts pour les différentes parties de votre processus de développement, comme ci-dessous :
La fonction
load_dotenvles reconnaîtra.Si vous créez plusieurs fichiers
.envavec des noms différents, modifiez votre fichier.gitignorepour qu'ils soient tous exclus de l'indexation de git :Conclusion
Dans cet article, nous avons appris tous les concepts et techniques essentiels pour gérer efficacement les variables d'environnement en Python. Nous avons découvert comment récupérer des variables existantes avec le module OS de Python et comment créer des valeurs personnalisées avec la bibliothèque
python-dotenv. Nous avons également appris à rédiger des fichiers.envconformes aux meilleures pratiques.Si vous souhaitez en savoir plus sur le génie logiciel en Python, consultez notre cours, Principes du génie logiciel en Python.
Vous pouvez également consulter notre cursus de programmation Python, qui vous fera passer du statut de débutant à celui de Pythoniste avancé grâce à des exercices et des projets pratiques.