Python-dotenv lee pares clave-valor de un archivo .env
y puede configurarlos como variables de entorno. Ayuda en el desarrollo de aplicaciones siguiendo los principios de los 12 factores.
pip install python-dotenv
Si su aplicación toma su configuración de variables de entorno, como una aplicación de 12 factores, iniciarla en desarrollo no es muy práctico porque usted mismo debe configurar esas variables de entorno.
Para ayudarle con eso, puede agregar Python-dotenv a su aplicación para que cargue la configuración desde un archivo .env
cuando esté presente (por ejemplo, en desarrollo) sin dejar de ser configurable a través del entorno:
from dotenv import load_dotenv
load_dotenv () # take environment variables
# Code of your application, which uses environment variables (e.g. from `os.environ` or
# `os.getenv`) as if they came from the actual environment.
De forma predeterminada, load_dotenv
no anula las variables de entorno existentes y busca un archivo .env
en el mismo directorio que el script de Python o lo busca de forma incremental en niveles superiores.
Para configurar el entorno de desarrollo, agregue un .env
en el directorio raíz de su proyecto:
.
├── .env
└── foo.py
La sintaxis de los archivos .env
admitidos por python-dotenv es similar a la de Bash:
# Development settings
DOMAIN=example.org
ADMIN_EMAIL=admin@ ${DOMAIN}
ROOT_URL= ${DOMAIN} /app
Si usa variables en los valores, asegúrese de que estén rodeadas por {
y }
, como ${DOMAIN}
, ya que las variables simples como $DOMAIN
no se expanden.
Probablemente quieras agregar .env
a tu .gitignore
, especialmente si contiene secretos como una contraseña.
Consulte la sección "Formato de archivo" a continuación para obtener más información sobre lo que puede escribir en un archivo .env
.
La función dotenv_values
funciona más o menos de la misma manera que load_dotenv
, excepto que no toca el entorno, simplemente devuelve un dict
con los valores analizados del archivo .env
.
from dotenv import dotenv_values
config = dotenv_values ( ".env" ) # config = {"USER": "foo", "EMAIL": "[email protected]"}
Esto permite en particular una gestión avanzada de la configuración:
import os
from dotenv import dotenv_values
config = {
** dotenv_values ( ".env.shared" ), # load shared development variables
** dotenv_values ( ".env.secret" ), # load sensitive variables
** os . environ , # override loaded values with environment variables
}
load_dotenv
y dotenv_values
aceptan transmisiones a través de su argumento stream
. Por lo tanto, es posible cargar las variables desde fuentes distintas al sistema de archivos (por ejemplo, la red).
from io import StringIO
from dotenv import load_dotenv
config = StringIO ( "USER=foo n [email protected]" )
load_dotenv ( stream = config )
Puedes usar dotenv en IPython. De forma predeterminada, utilizará find_dotenv
para buscar un archivo .env
:
% load_ext dotenv
% dotenv
También puede especificar una ruta:
% dotenv relative / or / absolute / path / to / . env
Banderas opcionales:
-o
para anular las variables existentes.-v
para mayor verbosidad. También se incluye una interfaz CLI dotenv
, que le ayuda a manipular el archivo .env
sin abrirlo manualmente.
$ pip install " python-dotenv[cli] "
$ dotenv set USER foo
$ dotenv set EMAIL [email protected]
$ dotenv list
USER=foo
[email protected]
$ dotenv list --format=json
{
" USER " : " foo " ,
" EMAIL " : " [email protected] "
}
$ dotenv run -- python foo.py
Ejecute dotenv --help
para obtener más información sobre las opciones y subcomandos.
El formato no está especificado formalmente y aún mejora con el tiempo. Dicho esto, los archivos .env
deberían parecerse principalmente a archivos Bash.
Las claves pueden estar entre comillas simples o sin comillas. Los valores pueden estar entre comillas simples o dobles, sin comillas. Se ignoran los espacios antes y después de las claves, los signos iguales y los valores. Los valores pueden ir seguidos de un comentario. Las líneas pueden comenzar con la directiva export
, lo que no afecta su interpretación.
Secuencias de escape permitidas:
\
, '
\
, '
, "
, a
, b
, f
, n
, r
, t
, v
Es posible que los valores entre comillas simples o dobles ocupen varias líneas. Los siguientes ejemplos son equivalentes:
FOO= " first line
second line "
FOO= " first linensecond line "
Una variable no puede tener valor:
FOO
El resultado es que dotenv_values
asocia ese nombre de variable con el valor None
(por ejemplo, {"FOO": None}
. load_dotenv
, por otro lado, simplemente ignora dichas variables.
Esto no debe confundirse con FOO=
, en cuyo caso la variable se asocia con la cadena vacía.
Python-dotenv puede interpolar variables usando la expansión de variables POSIX.
Con load_dotenv(override=True)
o dotenv_values()
, el valor de una variable es el primero de los valores definidos en la siguiente lista:
.env
. Con load_dotenv(override=False)
, el valor de una variable es el primero de los valores definidos en la siguiente lista:
.env
.Este proyecto lo mantienen actualmente Saurabh Kumar y Bertrand Bonnefoy-Claudet y no habría sido posible sin el apoyo de estas increíbles personas.