Comment accéder aux valeurs des variables d'environnement?

2122

J'ai défini une variable d'environnement à laquelle je veux accéder dans mon application Python. Comment puis-je obtenir sa valeur?

Amit Yadav
la source

Réponses:

3174

Les variables d'environnement sont accessibles via os.environ

import os
print(os.environ['HOME'])

Ou vous pouvez voir une liste de toutes les variables d'environnement en utilisant:

os.environ

Comme parfois, vous pourriez avoir besoin de voir une liste complète!

# using get will return `None` if a key is not present rather than raise a `KeyError`
print(os.environ.get('KEY_THAT_MIGHT_EXIST'))

# os.getenv is equivalent, and can also give a default value instead of `None`
print(os.getenv('KEY_THAT_MIGHT_EXIST', default_value))

L'installation par défaut de Python sur Windows est C:\Python. Si vous voulez découvrir tout en exécutant python, vous pouvez faire:

import sys
print(sys.prefix)
Barre
la source
1
bonjour rod, merci pour votre réponse efficace concernant "installation par défaut"; efficace au point de vue de le comprendre rapidement plutôt que de passer par les liens. C'est vraiment ce que j'ai apprécié :) mais à propos de ma (1) question, veuillez consulter l'extrait de commande et les sorties ci-dessous: >>> import os >>> print os.environ ['PYTHONPATH'] Traceback (dernier appel en date): Fichier " <console> ", ligne 1, dans le <module> fichier" C: \ Python25 \ lib \ os.py ", ligne 435, dans getitem return self.data [key.upper ()] KeyError: 'PYTHONPATH' >>> print os.environ.get ('PYTHONPATH') Aucun >>> // PLZ à suivre ... //
Amit Yadav
Dans un premier sens, le script lance Exception alors que dans le second, il donne None. Alors, y a-t-il un moyen de lui donner une valeur significative ou est-ce que je fais mal? Amit.
Amit Yadav
7
os.environ est un dictionnaire. Essayer d'accéder à une clé qui n'est pas présente dans le dictionnaire lèvera une erreur de clé. La méthode get renvoie simplement None lorsque la clé n'existe pas. Avez-vous un ensemble PYTHONPATH? Pouvez-vous essayer avec une variable telle que PATH, qui est garantie d'exister? Renvoie-t-il une valeur significative?
Rod
2
PYTHONPATH est utilisé pour ajouter un nouveau chemin de recherche à Python (sys.path) depuis l'extérieur de Python. Jetez un oeil à docs.python.org/using/cmdline.html#environment-variables
Rod
11
.get()peut également recevoir une valeur par défaut.
Gringo Suave
243

Pour vérifier si la clé existe (retourne Trueou False)

'HOME' in os.environ

Vous pouvez également utiliser get()lors de l'impression de la clé; utile si vous souhaitez utiliser une valeur par défaut.

print(os.environ.get('HOME', '/home/username/'))

/home/username/est la valeur par défaut

lgriffiths
la source
3
Quel est le meilleur, "HOME" in os.environou os.environ.get('HOME')?
endolith
11
@endolith Ils font des choses différentes. Le premier renvoie True ou False, tandis que le second renvoie une valeur, éventuellement None.
Trenton
1
@endolith, woud être la bonne question "HOME" in os.environvs os.environ.get('HOME') is None. Comme vous pouvez le voir en premier, il est beaucoup plus lisible et confortable de travailler avec.
Konstantin Sekeresh
59

La question initiale (première partie) était «comment vérifier les variables d'environnement en Python».

Voici comment vérifier si $ FOO est défini:

try:  
   os.environ["FOO"]
except KeyError: 
   print "Please set the environment variable FOO"
   sys.exit(1)
Scott C Wilson
la source
66
"FOO" dans os.environ
ealfonso
4
Essayez peut être plus rapide. Le cas des vars env est probablement le meilleur pour `` essayer '': stackoverflow.com/a/1835844/187769
RandomInsano
13
@RandomInsano plus rapide = / = mieux. Ce code semble moins lisible qu'un "if 'FOO' not in os.environ: ..."bloc
Dangercrow
44

Vous pouvez accéder aux variables d'environnement à l'aide de

import os
print os.environ

Essayez de voir le contenu des variables d'environnement PYTHONPATH ou PYTHONHOME, cela sera peut-être utile pour votre deuxième question. Cependant, vous devez le clarifier.

andrei1089
la source
29

Quant aux variables d'environnement:

import os
print os.environ["HOME"]

Je crains que vous ne deviez étoffer votre deuxième point un peu plus avant qu'une réponse décente ne soit possible.

Jim Brissom
la source
27
import os
for a in os.environ:
    print('Var: ', a, 'Value: ', os.getenv(a))
print("all done")

Cela affichera toutes les variables d'environnement ainsi que leurs valeurs.

Azorian
la source
27

En fait, cela peut être fait:

import os

for item, value in os.environ.items():
    print('{}: {}'.format(item, value))

Ou simplement:

for i, j in os.environ.items():
    print(i, j)

Pour afficher la valeur dans le paramètre:

print(os.environ['HOME'])

Ou:

print(os.environ.get('HOME')

Pour définir la valeur:

os.environ['HOME'] = '/new/value'
britodfbr
la source
4
Non, cette réponse n'ajoute vraiment rien en plus des réponses existantes
Bart
1
Cela devrait être supprimé, c'est un doublon d'autres réponses. str.formatest juste un ajout de fantaisie.
connectyourcharger
>>> import os, pprint; pprint.pprint(list(os.environ.items()))
noobninja
18

Si vous prévoyez d'utiliser le code dans un code d'application web de production, en
utilisant n'importe quel framework web comme Django / Flask, utilisez des projets comme envparse , en l'utilisant, vous pouvez lire la valeur comme votre type défini.

from envparse import env
# will read WHITE_LIST=hello,world,hi to white_list = ["hello", "world", "hi"]
white_list = env.list("WHITE_LIST", default=[]) 
# Perfect for reading boolean
DEBUG = env.bool("DEBUG", default=False)

REMARQUE: autoenv de kennethreitz est un outil recommandé pour créer des variables d'environnement spécifiques au projet, veuillez noter que ceux qui utilisent autoenvveuillez garder le .envfichier privé (inaccessible au public)

Renjith Thankachan
la source
11

Il existe également un certain nombre d'excellentes bibliothèques. Envs, par exemple, vous permettra d'analyser des objets de vos variables d'environnement, ce qui est rad. Par exemple:

from envs import env
env('SECRET_KEY') # 'your_secret_key_here'
env('SERVER_NAMES',var_type='list') #['your', 'list', 'here']
Peter Konneker
la source
3

Pour django voir ( https://github.com/joke2k/django-environ )

$ pip install django-environ

import environ
env = environ.Env(
# set casting, default value
DEBUG=(bool, False)
)
# reading .env file
environ.Env.read_env()

# False if not in os.environ
DEBUG = env('DEBUG')

# Raises django's ImproperlyConfigured exception if SECRET_KEY not in os.environ
SECRET_KEY = env('SECRET_KEY')
Leonardo
la source
0

Vous pouvez également essayer ceci

Tout d'abord, installez python-decouple

pip install python-decouple

l'importer dans votre fichier

from decouple import config

Ensuite, obtenez la variable env

SECRET_KEY=config('SECRET_KEY')

En savoir plus sur la bibliothèque python ici

Steve Mitto
la source