Accéder au contenu principal

Variables d'environnement Python : Ce que vous devez savoir

Apprenez les tenants et les aboutissants de la gestion des variables d'environnement Python avec les bibliothèques os et python-dotenv.
Actualisé 14 nov. 2024  · 9 min de lecture

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 :

API_KEY=1akn4nka-aqwej3

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 :

import os
os.getenv("USER")
'bexgboost'

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 :

os.getenv("HOME")
'/home/bexgboost'

Ou le chemin d'accès à votre exécutable Conda :

os.getenv("CONDA_EXE")
'/home/bexgboost/anaconda3/bin/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 :

os.getenv("MYDATABASE")

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!")
'Nope!'

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
'/home/bexgboost/articles/2024/4_april'

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 :

os.getenv("PATH")[:46]
'/home/bexgboost/.local/bin:/home/bexgboost/bin'

Chaque chemin dans PATH est séparé par deux points. Comptons la durée de PATH sur mon système :

def count_path_items():
   items = os.getenv("PATH").split(":")

   return len(items)

count_path_items()
79

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:

# Create a new environment variable
os.environ["NEW_VARIABLE"] = "42"  # Always expects a string value

os.getenv("NEW_VARIABLE")
'42'

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

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:

$ pip install python-dotenv

Ensuite, dans un script Python ou un carnet Jupyter, nous importerons sa fonction load_dotenv et l'appellerons :

from dotenv import load_dotenv

load_dotenv()
True

S'il ne trouve pas de fichier .env dans 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 .env ci-dessus dans mon répertoire personnel ~/.env; c'est pourquoi load_dotenv a pu le trouver.

Pour créer vos propres fichiers, vous pouvez utiliser la commande touch dans le terminal ou utiliser un éditeur de texte comme VSCode :

$ touch ~/.env

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"

Utilisez des caractères d'échappement :

LONG_ENV="This value uses an \"escape character"

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

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}"

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")
'https://myapi.com/v1/api'
os.getenv("SNOWFLAKE_USERNAME")
'bexgboost'

Veillez à appeler d'abord load_dotenv.

Si votre fichier .env est situé dans un endroit inaccessible à load_dotenv, vous pouvez lui indiquer un chemin direct comme ci-dessous :

load_dotenv("/home/bexgboost/somewhere/unreachable/.env")
True

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 :

# Run this anywhere in the notebook to load EVs from .env
%load_ext dotenv
%dotenv

Ensuite, vous pouvez à nouveau utiliser le module os:

import os

os.getenv("SNOWFLAKE_USERNAME")
'bexgboost'

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

2. Lorsque vous définissez des variables, utilisez des noms descriptifs en MAJUSCULES.

# Good
DEBUG=True
LOGGING_VERBOSITY=3

# Bad
debug=True
LV=3

3. Créez un fichier .env unique pour stocker les variables système dont vous avez besoin dans chaque projet.

$ touch ~/.env

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 :

$ touch development/.env.development
$ touch testing/.env.testing
$ touch production/.env.production

La fonction load_dotenv les reconnaîtra.

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

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.

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.


Photo of Bex Tuychiev
Author
Bex Tuychiev
LinkedIn

Je suis un créateur de contenu en science des données avec plus de 2 ans d'expérience et l'un des plus grands followings sur Medium. J'aime écrire des articles détaillés sur l'IA et la ML dans un style un peu sarcastıc, car il faut bien faire quelque chose pour les rendre un peu moins ennuyeux. J'ai produit plus de 130 articles et un cours DataCamp, et un autre est en cours d'élaboration. Mon contenu a été vu par plus de 5 millions de personnes, dont 20 000 sont devenues des adeptes sur Medium et LinkedIn. 

Sujets

Poursuivez votre voyage en Python dès aujourd'hui !

Certification disponible

cours

Principes du génie logiciel en Python

4 hr
44.8K
Découvrez la modularité, la documentation et les tests automatisés pour vous aider à résoudre les problèmes de science des données plus rapidement et de manière plus fiable.
Afficher les détailsRight Arrow
Commencer Le Cours
Voir plusRight Arrow