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

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


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)

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.


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.


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.


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'

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)


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']

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

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í

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.