Cómo acceder a las variables de entorno en Python

  1. ¿Qué son las variables de entorno
  2. Variables de entorno en Python
  3. Leer variables de entorno en Python
  4. Añadir variables de entorno en Python

¿Qué son las variables de entorno

Las variables de entorno son variables a las que se asignan valores externamente al programa Python. Los desarrolladores normalmente las establecen en la línea de comandos antes de invocar el ejecutable de Python. El sistema operativo entonces hace que estas variables sean accesibles a un programa Python desde dentro.

Las variables de entorno existen para la flexibilidad del programa. De esta manera, un usuario puede cambiar parámetros específicos antes de la ejecución del programa, y el programa podrá mirar estos parámetros y modificar su comportamiento dinámicamente. No se requiere ninguna modificación de código, y tal uso de las variables de entorno se llama configuración del programa.

Variables de entorno en Python

El mecanismo para establecer las variables de entorno depende de la plataforma. Por esa razón, son disponible a través del módulo os incorporado en Python, que abstrae funcionalidad dependiente del sistema operativo.

El tiempo de ejecución de Python mantiene todas las variables de entorno del programa en un diccionario como Objeto os.environ.

Note que el objeto os.environ se llena cuando el tiempo de ejecución de Python carga el módulo os. Si intenta cambiar las variables de entorno después del hecho (por ejemplo, exportando una nueva variable de entorno en el emulador de terminal), no funcionará.

Leer variables de entorno en Python

El acceso a las variables de entorno en Python se realiza mediante la ejecución de un diccionario como operaciones en el objeto 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 accede a una variable de entorno usando una notación del subíndice [], y esa variable no está definida, obtendrá un error en tiempo de ejecución.

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

Para evitar este problema, puede leer desde el objeto os.environ utilizando la interfaz get(). Si una variable de entorno buscada no ha sido definida, get() devuelve None.

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

Una característica conveniente de la interfaz get() es que puede especificar un valor por defecto para usar en caso de que una variable de entorno buscada no exista.

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

Una alternativa a os.environ.get() es usar os.getenv() function. Ambas funciones funcionan de la misma manera, y puede tratar la última como una API de conveniencia.

Añadir variables de entorno en Python

A veces es necesario cambiar o añadir una variable de entorno desde dentro de su programa. Por ejemplo, puede suceder si necesita modificar el comportamiento de su aplicación al recibir una solicitud de configuración de red. Cambie las variables de entorno usando el operador [] como si os.environ hubiera sido un diccionario estándar.

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

Tenga en cuenta que los valores de las variables de entorno deben ser de tipo cadena. Si intenta asignar un número entero o cualquier otro valor que no sea de cadena a una variable de entorno, usted obtendrá un error de tiempo de ejecución.

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

Artículo relacionado - Python Environment

  • Establecer y obtener variables de entorno en Python