Comment accéder aux variables d'environnement en Python

  1. Que sont les variables d’environnement
  2. Variables d’environnement en Python
  3. Lire les variables d’environnement en Python
  4. Ajouter des variables d’environnement en Python

Que sont les variables d’environnement

Les variables d’environnement sont des variables auxquelles des valeurs sont affectées en dehors du programme Python. Les développeurs les définissent généralement sur la ligne de commande avant d’invoquer l’exécutable Python. Le système d’exploitation rend ensuite ces variables accessibles à un programme Python de l’intérieur.

Les variables d’environnement existent pour la flexibilité du programme. Ainsi, un utilisateur peut modifier des paramètres spécifiques avant l’exécution du programme, et le programme pourra regarder dans ces paramètres et modifier son comportement de façon dynamique. Aucune modification du code n’est nécessaire, et une telle utilisation des variables d’environnement est appelée configuration du programme.

Variables d’environnement en Python

Le mécanisme de réglage des variables d’environnement dépend de la plate-forme. Pour cette raison, elles sont rendu disponible par le module os intégré de Python, qui extrait fonctionnalité dépendant du système d’exploitation.

Le runtime Python conserve toutes les variables d’environnement du programme dans un dictionnaire Objet o.environ.

Notez que l’objet os.environ est rempli lorsque le runtime Python charge le module os. Si vous essayez de changer les variables d’environnement après coup (par exemple, en exportant une nouvelle variable d’environnement dans l’émulateur de terminal), ça ne marchera pas.

Lire les variables d’environnement en Python

L’accès aux variables d’environnement en Python se fait par l’exécution d’une commande de type dictionnaire les opérations sur l’objet os.environ.

>>> import os
>>> os.environ
environ({'HOME': '/Users/john', 'LANG': 'en_US.UTF-8', 'LOGNAME': 'john', 'OLDPWD': '/Users/john', 'PATH': '/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin', 'PWD': '/Users/john/python-tutorial', 'SHELL': '/bin/zsh', 'TERM': 'screen', 'TERM_PROGRAM': 'Apple_Terminal', 'TERM_PROGRAM_VERSION': '433', 'TERM_SESSION_ID': 'CDC91EF3-15D6-41AD-A17B-E959D97BC4B5', 'TMPDIR': '/var/folders/md/31nwv67j113d19z0_1287f1r0000gn/T/', 'TMUX': '/private/tmp/tmux-501/default,3319,0', 'TMUX_PANE': '%28' , 'USER': 'john', '_': '/usr/local/bin/python3', '__PYVENV_LAUNCHER__': '/usr/local/bin/python3'})
>>> os.environ['HOME']
'/Users/john'
>>> os.environ['LANG']
'en_US.UTF-8'

Si vous accédez à une variable d’environnement en utilisant une notation en indice [], et que cette variable est indéfinie, vous obtiendrez une erreur d’exécution.

>>> os.environ['I_DONT_EXIST']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/Cellar/python/3.7.5/Frameworks/Python.framework/Versions/3.7/lib/python3.7/os.py", line 679, in __getitem__
    raise KeyError(key) from None
KeyError: 'I_DONT_EXIST'

Pour éviter ce problème, vous pouvez lire à partir de l’objet os.environ en utilisant l’interface get(). Si une variable d’environnement recherchée n’a pas été définie, get() renvoie None.

>>> result = os.environ.get('I_DONT_EXIST')
>>> print(result)
None

Une caractéristique pratique de l’interface get() est que vous pouvez spécifier une valeur par défaut à utiliser au cas où la variable d’environnement recherchée n’existe pas.

>>> os.environ.get('I_DONT_EXIST', 'I_AM_DEFAULT')
'I AM DEFAULT'

Une alternative à os.environ.get() est d’utiliser la fonction os.getenv(). Les deux fonctions fonctionnent de la même manière, et vous pouvez traiter la dernière comme une API de commodité.

Ajouter des variables d’environnement en Python

Parfois, vous devez modifier ou ajouter une variable d’environnement à partir de votre programme. Par exemple, cela peut arriver si vous devez modifier le comportement de votre application à la réception d’une requête de configuration réseau. Vous modifiez les variables d’environnement en utilisant l’opérateur en indice [] comme si os.environ était un dictionnaire standard.

>>> import os
>>> os.environ['LANG']
'en_US.UTF-8'
>>> os.environ['LANG'] = 'en_GB.UTF-8'
>>> os.environ['LANG']
'en_GB.UTF-8'

Notez que les valeurs des variables d’environnement doivent être de type chaîne de caractères. Si vous essayez d’affecter un entier ou toute autre valeur non chaîne de caractères à une variable d’environnement, vous obtiendra une erreur d’exécution.

>>> import os
>>> os.environ['LANG'] = 4
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/Cellar/python/3.7.5/Frameworks/Python.framework/Versions/3.7/lib/python3.7/os.py", line 684, in __setitem__
    value = self.encodevalue(value)
  File "/usr/local/Cellar/python/3.7.5/Frameworks/Python.framework/Versions/3.7/lib/python3.7/os.py", line 754, in encode
    raise TypeError("str expected, not %s" % type(value).__name__)
TypeError: str expected, not int
comments powered by Disqus