Variables de entorno en Python

Publicado por Andrea Navarro en

En este artículo veremos como cargar variables de entorno desde un archivo utilizando la librería Python-dotenv.

Variables de entorno

Las variables de entorno son aquellas que se almacenan fuera de una aplicación pero afectan su funcionamiento o son importantes para el mismo. Su se considera una buena práctica ya que permite separar el código de una aplicación de aquella información que puede ser sensible o dependiente del entorno donde se corre.

Dentro de la terminal es posible acceder a las variables del sistema operativo utilizando el comando echo.

echo $SHELL

En este caso se ha accedido a el path del Shell de Login

/bin/bash

También es posible cargar nuevas variables utilizando el comando export con el formato clave=valor. En el caso que dicho valor contenga espacios este debe colocarse entre comillas.

export EJEMPLO="Ejemplo de variable"

Una vez cargada puede accederse a su valor nuevamente con el comando echo

echo $EJEMPLO

Obteniendo como salida:

Ejemplo de variable

Es importante aclarar que estas variables son creadas unicamente para la sesión en la que se encuentran y una vez que la terminal es cerrada las variables de entorno son eliminadas.

Variables de entorno en Python

Para acceder en Python a las variables de entorno se utiliza el módulo os.

import os

print(os.environ)

Esto imprimirá la lista de las variables cargadas en el sistema operativo en formato de diccionario donde cada variable estará especificada como clave:valor.

Es posible acceder a una variable en particular utilizando las claves del diccionario.

import os

print(os.environ["EJEMPLO"])

Esto dará como salida el valor visto anteriormente:

Ejemplo de variable

En el caso de que quiera acceder a la variable no existente este script generará una excepción por lo que es recomendable utilizarlo en aquellos casos donde dicho valor sea obligatorio para el funcionamiento de la aplicación. Si este no es el caso entonces es preferible acceder la variable utilizando el método get que no simplemente cargará el valor None si esta no es encontrada.

import os
print(os.environ.get("EJEMPLO"))

Almacenar variables de entorno con Python-dotenv

Para lograr la persistencia de las variables de entorno para el uso de una aplicación una de las soluciones más comunes es almacenarlas en un archivo. Este archivo será leído durante la ejecución de la aplicación y los conjuntos de pares clave-valor serán creados como variables de entorno. La librería Python-dotenv se utiliza para este fin y puede instalarse con el manejador de paquetes pip.

pip install python-dotenv

El archivo que almacenará los valores a cargar por defecto debe nombrarse .env . Las variables deberán estar en formato clave=valor. Para utilizar otras variables de entorno como parte del valor es necesario que estas se encuentren en el formato ${VARIABLE}.

EJEMPLOA=ValorA
EJEMPLOB="Valor B"
FILE_D=${HOME}/aplicacion

Ya que este archivo contendrá valores sensibles, secretos o dependientes del entorno de ejecución es recomendable agregarlo al archivo .gitignore en el caso de estar trabajando con un repositorio git.

Para cargar las variables del archivo en el entorno utilizamos el método load_dotenv de Python-dotenv. Una vez realizado este proceso las variables de entorno quedarán cargadas y podrán ser accedidas normalmente desde os.environ .

from dotenv import load_dotenv
import os

load_dotenv()

print(os.environ.get("EJEMPLOA"))

Obtener valores de archivo

Python-dotenv permite obtener los valores cargados en el archivo .env si cargarlos como variables de entorno utilizando dotenv_values . Este método devolverá el contenido del archivo en un diccionario.

from dotenv import dotenv_values

valores = dotenv_values(".env") 

Evitar sobrescribir variables

Si las variables cargadas dentro del archivo .env no existen en el entornos estas serán creadas, si ya existen, sin embargo, los valores serán modificados por los existentes en el archivo. En el caso que este no sea el comportamiento requerido es posible configurar Python-dotenv para que no sobrescriba variables ya existentes agregando override=False .

from dotenv import load_dotenv
import os

load_dotenv(override=False)

En este artículo hemos visto como manejar la carga de variables de entorno desde nuestra aplicación Python utilizando la librería Python-dotenv. Espero que les sirva!


¿Preguntas? ¿Comentarios?

Si tenés dudas, o querés dejarnos tus comentarios y consultas, sumate al grupo de Telegram de la comunidad JuncoTIC!
¡Te esperamos!

Categorías: Programación

Andrea Navarro

- Ingeniera en Informática - Docente universitaria - Investigadora