python-dotenv
python-dotenv
Python-dotenv lee pares clave-valor de un .env
archivo y puede configurarlos como variables de entorno. Ayuda en el desarrollo de aplicaciones siguiendo los principios de los 12 factores.
- Empezando
- Otros casos de uso
- Cargar configuración sin alterar el entorno
- Analizar la configuración como una secuencia
- Cargar archivos .env en IPython
- Interfaz de línea de comandos
- Formato de archivo
- Valores multilínea
- expansión variable
- Proyectos relacionados
- Agradecimientos
Empezando
pip install python-dotenv
Si su aplicación toma su configuración a partir de variables de entorno, como una aplicación de 12 factores, lanzarla en desarrollo no es muy práctico porque debe configurar esas variables de entorno usted mismo.
Para ayudarlo con eso, puede agregar Python-dotenv a su aplicación para que cargue la configuración desde un .env
archivo 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 from .env.
# Code of your application, which uses environment variables (e.g. from `os.environ` or
# `os.getenv`) as if they came from the actual environment.
Por defecto, load_dotenv
no anula las variables de entorno existentes.
Para configurar el entorno de desarrollo, agregue un .env
en el directorio raíz de su proyecto:
.
├── .env
└── foo.py
la sintaxis de .env
Los archivos admitidos por python-dotenv son similares a los de Bash:
# Development settings
DOMAIN=example.org
[email protected]${DOMAIN}
ROOT_URL=${DOMAIN}/app
Si usa variables en valores, asegúrese de que estén rodeadas de {
y }
me gusta
${DOMAIN}
como variables desnudas tales como $DOMAIN
no se expanden.
Probablemente querrá agregar .env
para usted .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
.env
expediente.
Otros casos de uso
Cargar configuración sin alterar el entorno
La función dotenv_values
funciona más o menos de la misma manera que load_dotenv
excepto que no toca el entorno, solo devuelve un dict
con los valores analizados de la
.env
expediente.
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
}
Analizar la configuración como una secuencia
load_dotenv
y dotenv_values
aceptar flujos a través de su stream
argumento. 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=foon[email protected]")
load_dotenv(stream=config)
Cargar archivos .env en IPython
Puede usar dotenv en IPython. De forma predeterminada, utilizará find_dotenv
para buscar un
.env
expediente:
%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 aumentar la verbosidad.
Interfaz de línea de comandos
Una interfaz CLI dotenv
también se incluye, lo que le ayuda a manipular el .env
archivo 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
Correr dotenv --help
para obtener más información sobre las opciones y los subcomandos.
Formato de archivo
El formato no se especifica formalmente y aún mejora con el tiempo. Habiendo dicho eso,
.env
la mayoría de los archivos deberían verse como archivos Bash.
Las claves pueden estar entre comillas simples o sin comillas. Los valores pueden estar sin comillas, con comillas simples o dobles. Se ignoran los espacios antes y después de las teclas, los signos de igual y los valores. Los valores pueden ir seguidos de un comentario. Las líneas pueden comenzar con el export
Directiva, lo que no afecta a su interpretación.
Secuencias de escape permitidas:
- en valores entre comillas simples:
\
,'
- en valores entre comillas dobles:
\
,'
,"
,a
,b
,f
,n
,r
,t
,v
Valores multilínea
Es posible que los valores entre comillas simples o dobles abarquen varias líneas. Los siguientes ejemplos son equivalentes:
FOO="first line
second line"
FOO="first linensecond line"
variable sin valor
Una variable no puede tener valor:
FOO
En resultado de dotenv_values
asociando ese nombre de variable con el valor None
(p.ej
{"FOO": None}
. load_dotenv
por otro lado, simplemente ignora tales variables.
Esto no debe confundirse con FOO=
en cuyo caso la variable se asocia con la cadena vacía.
expansión variable
Python-dotenv puede interpolar variables mediante 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:
- Valor de esa variable en el
.env
expediente. - Valor de esa variable en el entorno.
- Valor predeterminado, si se proporciona.
- Cuerda vacía.
Con load_dotenv(override=False)
el valor de una variable es el primero de los valores definidos en la siguiente lista:
- Valor de esa variable en el entorno.
- Valor de esa variable en el
.env
expediente. - Valor predeterminado, si se proporciona.
- Cuerda vacía.
Proyectos relacionados
- Honcho: para administrar aplicaciones basadas en Procfile.
- django-dotenv
- Django-entorno
- Django-entorno-2
- Django-configuración
- dump-env
- alrededores
- dinaconf
- parse_it
Agradecimientos
Este proyecto actualmente lo mantienen Saurabh Kumar y Bertrand Bonnefoy-Claudet y no hubiera sido posible sin el apoyo de estas increíbles personas.