Variables de entorno con python-dotenv

Clase 5 de 22Curso de Despliegue de Aplicaciones Python en la Nube

Resumen

Proteger información sensible y adaptar el comportamiento de una aplicación según el entorno donde se ejecuta es una necesidad real en cualquier proyecto. Las variables de entorno resuelven exactamente ese problema, y combinadas con un archivo .env, ofrecen una forma limpia y segura de gestionar configuraciones sin exponer datos en el repositorio.

¿Por qué no deberías guardar configuraciones directamente en el código?

Imagina que tienes una variable llamada app_mode que en tu máquina local debe valer local, pero en producción debe ser production. Si defines ese valor directamente en el código y lo subes al repositorio, cada entorno tendría conflictos al intentar ejecutar comportamientos distintos. La solución es sacar esas configuraciones fuera del código mediante variables de entorno [0:20].

¿Cómo crear una variable de entorno en Linux?

En un sistema Linux se utiliza el comando export seguido del nombre y el valor de la variable [0:38]:

bash export app_mode=local

  • Todas las variables de entorno aceptan únicamente valores de tipo string.
  • Una vez definida, queda disponible para cualquier proceso que se ejecute en esa sesión de terminal.

¿Cómo leer variables de entorno desde Python?

Python incluye la librería os, que permite acceder al entorno del sistema operativo. Para obtener el valor de una variable se usa os.environ.get() [1:05]:

python import os

app_mode = os.environ.get("app_mode") print(app_mode)

Al ejecutar la aplicación con Uvicorn, el valor local se imprimió dos veces. Esto sucede porque Uvicorn levanta dos workers, es decir, dos procesos de Python independientes que aceptan peticiones. La primera solicitud activa ambos, y cada uno ejecuta el print [1:30].

¿Qué es el archivo .env y por qué facilita la gestión de variables?

Escribir export cada vez que se necesita una variable nueva resulta poco práctico. El archivo .env centraliza todas las variables de entorno en un solo lugar [1:55]:

app_mode=local secret=super_secret

  • Puedes definir tantas variables como necesites, una por línea.
  • Nunca subas este archivo al repositorio, ya que puede contener contraseñas, tokens o claves de acceso que no deben estar disponibles para todo el equipo.

¿Cómo cargar el archivo .env en Python con python-dotenv?

Para que Python lea automáticamente el archivo .env, se utiliza la librería python-dotenv. Primero hay que instalarla [2:25]:

bash pip install python-dotenv

Es buena práctica guardar la dependencia en el archivo de requerimientos:

python-dotenv==1.0

Dentro del código, se importa la función load_dotenv y se le pasa la ruta del archivo [2:42]:

python from dotenv import load_dotenv import os

load_dotenv(".env")

app_mode = os.environ.get("app_mode") secret = os.environ.get("secret")

print(app_mode) print(secret)

load_dotenv toma todas las variables definidas en .env y las inserta en el entorno del sistema, sin necesidad de ejecutar export manualmente. Al recargar la aplicación, ambas variables se muestran correctamente [3:05].

¿Qué casos prácticos resuelve el uso de .env en producción?

Este patrón tiene aplicaciones directas en escenarios reales:

  • Autenticación con servicios externos: si configuras un login con Facebook, los secrets de la aplicación se almacenan en el .env para evitar exponerlos.
  • Conexión a bases de datos: la contraseña del servidor de base de datos en producción se gestiona como variable de entorno, protegiendo la información más crítica.
  • Separación de entornos: cada servidor mantiene su propio .env con valores adaptados a su contexto, sin modificar una sola línea de código.

Un ejercicio valioso es crear la misma variable tanto con export como dentro del .env y verificar cuál toma prioridad [3:55]. Eso te ayudará a entender dónde hacer cambios cuando necesites ajustar configuraciones rápidamente.

¿Ya probaste qué sucede cuando una variable existe en ambos lugares? Comparte tu resultado y cuéntanos cómo organizas tus variables de entorno en tus proyectos.