Las variables de entorno son potentes mecanismos para almacenar detalles de configuración de tu proyecto de desarrollo de forma flexible y segura. Almacenan pares clave-valor de datos accesibles mediante lenguajes de programación como Python y mantienen esa información oculta de miradas indiscretas. En este tutorial, aprenderás conceptos y técnicas imprescindibles para crear y gestionar variables de entorno en Python.
¿Qué son las variables de entorno?
Las variables de entorno son pares nombre-valor almacenados en algún lugar seguro de tu sistema operativo. Lo más frecuente es que tengan este aspecto:
En Python, puedes utilizar este tipo de variables para almacenar información sensible relacionada con tu proyecto de desarrollo. La información sensible puede ser:
Claves API para acceder a las aplicaciones de otros
Nombre de usuario y contraseñas para acceder a las aplicaciones mediante scripts
Credenciales de la base de datos
cualquier cosa que pudiera causar un problema de seguridad si se expusiera accidentalmente.
Por ejemplo, si escribes un script en Python que utiliza abiertamente tus credenciales de AWS y lo envías accidentalmente a GitHub, existe la posibilidad de que lo descubran personas malintencionadas y aumenten significativamente tu factura de AWS (se sabe que esto ocurre).
Otra ventaja de las variables de entorno es la configurabilidad. Puedes ajustar fácilmente la configuración (URL de bases de datos, rutas de archivos) modificando las variables de entorno sin cambiar tu código. Esta función es especialmente útil si utilizas la misma configuración en varias partes de tu proyecto.
Así que vamos a aprender a trabajar con ellos en Python.
Cómo recuperar variables de entorno en el módulo os de Python
Para recuperar las variables de entorno existentes en tu sistema, puedes utilizar el módulo os. Dispone de la función .getenv para recuperar variables:
La función .getenv() no devuelve nada, pero podemos cambiar ese comportamiento. Puedes utilizar su parámetro default para devolver un valor personalizado si la variable no existe:
La función .getenv() es el mejor método para recuperar variables existentes.
Sin embargo, en otras fuentes, puede que veas métodos diferentes, como el atributo .environ, que devuelve un diccionario con todas las variables de entorno:
current_directory = os.environ.get("PWD",None)
current_directory
Con la tecnología de
Como se trata de un diccionario, puedes utilizar la notación entre paréntesis (no recomendada) o la función .get() para recuperar un valor.
os también tiene acceso a la que quizá sea la variable más importante del sistema, llamada PATH. PATH contiene las rutas absolutas a todos los ejecutables instalados en tu sistema, por lo que es bastante larga:
Uso de la biblioteca python-dotenv para gestionar eficazmente las variables de entorno en Python
Establecer variables de entorno personalizadas
Ahora que sabemos cómo extraer variables existentes, veamos cómo establecer variables personalizadas. El primer método es utilizar el diccionario os.environ:
# Create a new environment variable
os.environ["NEW_VARIABLE"]="42"# Always expects a string value
os.getenv("NEW_VARIABLE")Con la tecnología de
Sin embargo, este método no es muy útil, ya que todas las nuevas variables se perderán cuando finalice la sesión actual.
Afortunadamente, existe un método más duradero de almacenar variables de entorno mediante el uso de archivos .env (pronunciado dot-env). Estos archivos tienen la misma sintaxis, lo que significa que funcionarán en cualquier sistema operativo. Éste es el aspecto de un archivo .env de ejemplo:
CUSTOM_API_LINK=https://myapi.com/v1/api
SNOWFLAKE_USERNAME=bexgboost
MYSQL_DATABASE_PASSWORD=as3ndf03
Con la tecnología de
Por ahora, sólo define tres variables. Para leer este archivo y extraer su contenido, utilizaremos una biblioteca llamada python-dotenv:
También puedes añadir comentarios al archivo para futuras consultas:
# You can also add comments anywhere with a hashtag
CUSTOM_API_LINK=https://myapi.com/v1/api
SNOWFLAKE_USERNAME=bexgboost
MYSQL_DATABASE_PASSWORD=as3ndf03
Con la tecnología de
También es posible utilizar el valor de una variable dentro de otra utilizando la sintaxis ${VAR_NAME}:
FIRST_NAME=John
LAST_NAME=Doe
FULL_NAME="I am ${FIRST_NAME} ${LAST_NAME}"Con la tecnología de
Recuperar variables de entorno personalizadas con python-dotenv
Recuperar variables personalizadas es igual que antes: sólo tienes que utilizar el módulo os:
Una vez que instales Python-dotenv, no tendrás que importarlo a Python si utilizas Jupyter. La biblioteca viene con un método mágico Jupyter que la carga automáticamente:
# Run this anywhere in the notebook to load EVs from .env%load_ext dotenv
%dotenv
Con la tecnología de
Buenas prácticas para utilizar variables de entorno en Python
En esta sección, enumeraremos algunas prácticas recomendadas para garantizar que las variables de entorno permanezcan seguras y plenamente utilizables.
1. Añade siempre los archivos de .env a .gitignore para no enviarlos accidentalmente a GitHub.
# Create .gitignore if it doesn't exist
$ touch .gitignore
$ echo ".env">>.gitignore
Con la tecnología de
2. Al definir variables, utiliza nombres descriptivos, todos en MAYÚSCULAS.
4. Controla el alcance de tus archivos .env. Crea archivos separados para las distintas partes de tu flujo de trabajo de desarrollo, como se indica a continuación:
$ touch development/.env.development
$ touch testing/.env.testing
$ touch production/.env.production
Con la tecnología de
La función load_dotenv los reconocerá.
Si creas varios archivos .env con nombres diferentes, cambia tu archivo .gitignore para que todos ellos queden excluidos de la indexación de git:
# Pay attention to the asterisk *
$ echo ".env*">>.gitignore
Con la tecnología de
Conclusión
En este artículo, hemos aprendido todos los conceptos y técnicas esenciales para gestionar eficazmente las variables de entorno en Python. Descubrimos cómo recuperar variables existentes con el módulo Python OS y cómo crear valores personalizados con la biblioteca python-dotenv. También aprendimos a escribir archivos .env que se ajusten a las mejores prácticas.
Esta guía concisa y fácil de seguir te ayudará a descubrir las mejores alternativas a Anaconda y a encontrar la herramienta adecuada para tus proyectos en Python.
Aprende qué son los ámbitos de las variables y familiarízate con la regla «LEGB». También te encontrarás con situaciones en las que podrás ver las palabras clave globales y no locales en acción.
Mejora tus conocimientos de programación. Aprende a optimizar el código, a escribir funciones y pruebas, y a utilizar las mejores técnicas de ingeniería de software.
Las variables de entorno son potentes mecanismos para almacenar detalles de configuración de tu proyecto de desarrollo de forma flexible y segura. Almacenan pares clave-valor de datos accesibles mediante lenguajes de programación como Python y mantienen esa información oculta de miradas indiscretas. En este tutorial, aprenderás conceptos y técnicas imprescindibles para crear y gestionar variables de entorno en Python.
¿Qué son las variables de entorno?
Las variables de entorno son pares nombre-valor almacenados en algún lugar seguro de tu sistema operativo. Lo más frecuente es que tengan este aspecto:
En Python, puedes utilizar este tipo de variables para almacenar información sensible relacionada con tu proyecto de desarrollo. La información sensible puede ser:
Por ejemplo, si escribes un script en Python que utiliza abiertamente tus credenciales de AWS y lo envías accidentalmente a GitHub, existe la posibilidad de que lo descubran personas malintencionadas y aumenten significativamente tu factura de AWS (se sabe que esto ocurre).
Otra ventaja de las variables de entorno es la configurabilidad. Puedes ajustar fácilmente la configuración (URL de bases de datos, rutas de archivos) modificando las variables de entorno sin cambiar tu código. Esta función es especialmente útil si utilizas la misma configuración en varias partes de tu proyecto.
Así que vamos a aprender a trabajar con ellos en Python.
Cómo recuperar variables de entorno en el módulo os de Python
Para recuperar las variables de entorno existentes en tu sistema, puedes utilizar el módulo
os. Dispone de la función .getenvpara recuperar variables:Arriba, estoy recuperando el nombre de usuario del sistema, que está incorporado en todos los sistemas. Hay muchos otros como el camino de casa:
O la ruta de tu ejecutable Conda:
Así, cuando ejecutas comandos de
conda, así es como tu terminal sabe qué aplicación ejecutar.Pero, ¿qué ocurre si intentas recuperar una variable que no existe?
La función
.getenv()no devuelve nada, pero podemos cambiar ese comportamiento. Puedes utilizar su parámetrodefaultpara devolver un valor personalizado si la variable no existe:La función
.getenv() es el mejor método para recuperar variables existentes.Sin embargo, en otras fuentes, puede que veas métodos diferentes, como el atributo .environ, que devuelve un diccionario con todas las variables de entorno:
Como se trata de un diccionario, puedes utilizar la notación entre paréntesis (no recomendada) o la función
.get()para recuperar un valor.ostambién tiene acceso a la que quizá sea la variable más importante del sistema, llamada PATH.PATHcontiene las rutas absolutas a todos los ejecutables instalados en tu sistema, por lo que es bastante larga:Cada ruta en
PATHestá separada por dos puntos. Vamos a contar la longitud dePATHen mi sistema:79! No está mal.
Uso de la biblioteca python-dotenv para gestionar eficazmente las variables de entorno en Python
Establecer variables de entorno personalizadas
Ahora que sabemos cómo extraer variables existentes, veamos cómo establecer variables personalizadas. El primer método es utilizar el diccionario
os.environ:Sin embargo, este método no es muy útil, ya que todas las nuevas variables se perderán cuando finalice la sesión actual.
Afortunadamente, existe un método más duradero de almacenar variables de entorno mediante el uso de archivos
.env(pronunciado dot-env). Estos archivos tienen la misma sintaxis, lo que significa que funcionarán en cualquier sistema operativo. Éste es el aspecto de un archivo .env de ejemplo:Por ahora, sólo define tres variables. Para leer este archivo y extraer su contenido, utilizaremos una biblioteca llamada
python-dotenv:Luego, en un script de Python o en un Jupyter Notebook importaremos su función
load_dotenvy la llamaremos:Si no encuentra un archivo
.envdentro del directorio actual, buscará en todos los directorios padre y devolverá True si lo encuentra.Guardé el archivo
.envanterior en mi directorio personal~/.env; por esoload_dotenvpudo encontrarlo.Para crear tus propios archivos, puedes utilizar el comando
touchen el terminal o utilizar un editor de texto como VSCode:La sintaxis de los archivos
.enves bastante flexible. Por ejemplo, puedes establecer variables con valores de varias líneas (deben llevar comillas):Utiliza caracteres de escape:
También puedes añadir comentarios al archivo para futuras consultas:
También es posible utilizar el valor de una variable dentro de otra utilizando la sintaxis
${VAR_NAME}:Recuperar variables de entorno personalizadas con
python-dotenvRecuperar variables personalizadas es igual que antes: sólo tienes que utilizar el módulo
os:Asegúrate de llamar primero a
load_dotenv.Si tu archivo
.envse encuentra en algún lugar inalcanzable paraload_dotenv, puedes pasarle una ruta directa como la que se muestra a continuación:Trabajar con archivos .env en Jupyter
Una vez que instales
Python-dotenv, no tendrás que importarlo a Python si utilizas Jupyter. La biblioteca viene con un método mágico Jupyter que la carga automáticamente:Entonces, podrás volver a utilizar el módulo
os:Buenas prácticas para utilizar variables de entorno en Python
En esta sección, enumeraremos algunas prácticas recomendadas para garantizar que las variables de entorno permanezcan seguras y plenamente utilizables.
1. Añade siempre los archivos de
.enva.gitignorepara no enviarlos accidentalmente a GitHub.2. Al definir variables, utiliza nombres descriptivos, todos en MAYÚSCULAS.
3. Crea un único archivo .env para almacenar las variables de todo el sistema que necesites en cada proyecto.
4. Controla el alcance de tus archivos .env. Crea archivos separados para las distintas partes de tu flujo de trabajo de desarrollo, como se indica a continuación:
La función
load_dotenvlos reconocerá.Si creas varios archivos
.envcon nombres diferentes, cambia tu archivo.gitignorepara que todos ellos queden excluidos de la indexación de git:Conclusión
En este artículo, hemos aprendido todos los conceptos y técnicas esenciales para gestionar eficazmente las variables de entorno en Python. Descubrimos cómo recuperar variables existentes con el módulo Python OS y cómo crear valores personalizados con la biblioteca
python-dotenv. También aprendimos a escribir archivos.envque se ajusten a las mejores prácticas.Si quieres aprender más sobre ingeniería de software en Python, consulta nuestro curso Principios de ingeniería de software en Python.
También puedes consultar nuestro Curso de Habilidades de Programación en Python, que te llevará de principiante a Pythonista avanzado con ejercicios prácticos y proyectos.