Variables de entorno en Python
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!