cours
Variables d'environnement Python : Ce que vous devez savoir
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.
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.
Poursuivez votre voyage en Python dès aujourd'hui !
cursus
Programmation en Python
cours