¿Cómo acceder a los valores de las variables de entorno?

Respuestas:

3174

Se accede a las variables de entorno a través de os.environ

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

O puede ver una lista de todas las variables de entorno usando:

os.environ

¡Como a veces puede que necesites ver una lista completa!

# 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))

La instalación predeterminada de Python en Windows es C:\Python. Si desea averiguarlo mientras ejecuta Python, puede hacer lo siguiente:

import sys
print(sys.prefix)
varilla
fuente
1
hola rod, gracias por tu respuesta efectiva sobre 'instalación predeterminada'; eficaz desde el punto de vista para entenderlo rápidamente en lugar de pasar por los enlaces. Eso es realmente apreciado :) pero sobre mi (1) pregunta, mira el comando y el fragmento de salida a continuación: >>> import os >>> print os.environ ['PYTHONPATH'] Traceback (última llamada): Archivo " <console> ", línea 1, en <module> Archivo" C: \ Python25 \ lib \ os.py ", línea 435, en getitem return self.data [key.upper ()] KeyError: 'PYTHONPATH' >>> print os.environ.get ('PYTHONPATH') Ninguno >>> // PLZ continuará ... //
Amit Yadav
En una primera forma, el guión arroja una Excepción, mientras que la segunda da Ninguno. Entonces, ¿hay alguna manera de obtener un valor significativo o lo estoy haciendo de manera incorrecta? Amit
Amit Yadav
77
os.environ es un diccionario. Intentar acceder a una clave que no está presente en el diccionario arrojará un KeyError. El método get simplemente devuelve None cuando la clave no existe. ¿Tienes el set PYTHONPATH? ¿Puedes probar con una variable como PATH, que se garantiza que existe? ¿Devuelve un valor significativo?
Rod
2
PYTHONPATH se usa para agregar una nueva ruta de búsqueda a Python (sys.path) desde fuera de Python. Eche un vistazo a docs.python.org/using/cmdline.html#environment-variables
Rod
11
.get()También se le puede dar un valor predeterminado.
Gringo Suave
243

Para verificar si la clave existe (devuelve Trueo False)

'HOME' in os.environ

También puede usarlo get()al imprimir la clave; útil si quieres usar un valor predeterminado.

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

donde /home/username/es el predeterminado

lgriffiths
fuente
3
¿Cuál es mejor "HOME" in os.environo os.environ.get('HOME')?
endolito
11
@endolith Hacen cosas diferentes. El primero devuelve Verdadero o Falso, mientras que el segundo devuelve un valor, posiblemente Ninguno.
Trenton
1
@endolith, la pregunta correcta woud sea "HOME" in os.environvs os.environ.get('HOME') is None. Como puede ver primero, es mucho más fácil de leer y cómodo para trabajar.
Konstantin Sekeresh
59

La pregunta original (primera parte) era "cómo verificar las variables de entorno en Python".

Aquí le mostramos cómo verificar si $ FOO está configurado:

try:  
   os.environ["FOO"]
except KeyError: 
   print "Please set the environment variable FOO"
   sys.exit(1)
Scott C Wilson
fuente
66
"FOO" en os.environ
ealfonso
44
Intentar puede ser más rápido. El caso de env vars es probablemente el mejor para 'probar': stackoverflow.com/a/1835844/187769
RandomInsano
13
@RandomInsano más rápido = / = mejor. Este código parece menos legible que un "if 'FOO' not in os.environ: ..."bloque
Dangercrow
44

Puede acceder a las variables de entorno utilizando

import os
print os.environ

Intente ver el contenido de las variables de entorno PYTHONPATH o PYTHONHOME, tal vez esto sea útil para su segunda pregunta. Sin embargo, debes aclararlo.

andrei1089
fuente
29

En cuanto a las variables de entorno:

import os
print os.environ["HOME"]

Me temo que tendrá que desarrollar su segundo punto un poco más antes de que sea posible una respuesta decente.

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

Eso imprimirá todas las variables de entorno junto con sus valores.

Azoriano
fuente
27

En realidad se puede hacer esto lejos:

import os

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

O simplemente:

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

Para ver el valor en el parámetro:

print(os.environ['HOME'])

O:

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

Para establecer el valor:

os.environ['HOME'] = '/new/value'
britodfbr
fuente
44
No, esta respuesta realmente no agrega nada sobre las respuestas existentes
Bart
1
Esto debe eliminarse, es un duplicado de otras respuestas. str.formatEs solo una adición elegante.
connectyourcharger
>>> import os, pprint; pprint.pprint(list(os.environ.items()))
noobninja
18

Si planea usar el código en un código de aplicación web de producción,
usando cualquier marco web como Django / Flask, use proyectos como envparse , usándolo puede leer el valor como su tipo definido.

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)

NOTA: autoenv de kennethreitz es una herramienta recomendada para hacer variables de entorno específicas del proyecto, tenga en cuenta que aquellos que lo estén utilizando autoenvmantienen el .envarchivo privado (inaccesible al público)

Renjith Thankachan
fuente
11

También hay una serie de excelentes bibliotecas. Envs, por ejemplo, le permitirá analizar objetos fuera de las variables de entorno, que es rad. Por ejemplo:

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

Para django ver ( 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
fuente
0

también puedes probar esto

Primero, instale python-decouple

pip install python-decouple

importalo en tu archivo

from decouple import config

Luego obtenga la variable env

SECRET_KEY=config('SECRET_KEY')

Lea más sobre la biblioteca de Python aquí

Steve Mitto
fuente