Python-dotenv lê pares chave-valor de um arquivo .env
e pode defini-los como variáveis de ambiente. Auxilia no desenvolvimento de aplicações seguindo os princípios dos 12 fatores.
pip install python-dotenv
Se o seu aplicativo obtém sua configuração de variáveis de ambiente, como um aplicativo de 12 fatores, iniciá-lo em desenvolvimento não é muito prático porque você mesmo precisa definir essas variáveis de ambiente.
Para ajudá-lo com isso, você pode adicionar Python-dotenv ao seu aplicativo para fazê-lo carregar a configuração de um arquivo .env
quando estiver presente (por exemplo, em desenvolvimento), permanecendo configurável através do ambiente:
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.
Por padrão, load_dotenv
não substitui variáveis de ambiente existentes e procura um arquivo .env
no mesmo diretório do script python ou procura por ele de forma incremental mais acima.
Para configurar o ambiente de desenvolvimento, adicione um .env
no diretório raiz do seu projeto:
.
├── .env
└── foo.py
A sintaxe dos arquivos .env
suportados pelo python-dotenv é semelhante à do Bash:
# Development settings
DOMAIN=example.org
ADMIN_EMAIL=admin@ ${DOMAIN}
ROOT_URL= ${DOMAIN} /app
Se você usar variáveis em valores, certifique-se de que elas estejam entre {
e }
, como ${DOMAIN}
, pois variáveis simples como $DOMAIN
não são expandidas.
Você provavelmente desejará adicionar .env
ao seu .gitignore
, especialmente se ele contiver segredos como uma senha.
Consulte a seção "Formato de arquivo" abaixo para obter mais informações sobre o que você pode escrever em um arquivo .env
.
A função dotenv_values
funciona mais ou menos da mesma maneira que load_dotenv
, exceto que não afeta o ambiente, apenas retorna um dict
com os valores analisados do arquivo .env
.
from dotenv import dotenv_values
config = dotenv_values ( ".env" ) # config = {"USER": "foo", "EMAIL": "[email protected]"}
Isso permite notavelmente o gerenciamento avançado de configuração:
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
e dotenv_values
aceitam streams por meio de seu argumento stream
. É assim possível carregar as variáveis de outras fontes além do sistema de arquivos (por exemplo, a rede).
from io import StringIO
from dotenv import load_dotenv
config = StringIO ( "USER=foo n [email protected]" )
load_dotenv ( stream = config )
Você pode usar dotenv no IPython. Por padrão, ele usará find_dotenv
para procurar um arquivo .env
:
% load_ext dotenv
% dotenv
Você também pode especificar um caminho:
% dotenv relative / or / absolute / path / to / . env
Sinalizadores opcionais:
-o
para substituir variáveis existentes.-v
para maior verbosidade. Uma interface CLI dotenv
também está incluída, o que ajuda a manipular o arquivo .env
sem abri-lo 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
Execute dotenv --help
para obter mais informações sobre as opções e subcomandos.
O formato não é especificado formalmente e ainda melhora com o tempo. Dito isto, os arquivos .env
devem se parecer principalmente com arquivos Bash.
As chaves podem ser sem aspas ou entre aspas simples. Os valores podem ser sem aspas, entre aspas simples ou duplas. Espaços antes e depois das chaves, sinais de igual e valores são ignorados. Os valores podem ser seguidos de um comentário. As linhas podem começar com a diretiva export
, o que não afeta a sua interpretação.
Sequências de escape permitidas:
\
, '
\
, '
, "
, a
, b
, f
, n
, r
, t
, v
É possível que valores entre aspas simples ou duplas ocupem várias linhas. Os exemplos a seguir são equivalentes:
FOO= " first line
second line "
FOO= " first linensecond line "
Uma variável não pode ter valor:
FOO
Isso resulta em dotenv_values
associando esse nome de variável ao valor None
(por exemplo, {"FOO": None}
. load_dotenv
, por outro lado, simplesmente ignora tais variáveis.
Isso não deve ser confundido com FOO=
, caso em que a variável está associada à string vazia.
Python-dotenv pode interpolar variáveis usando expansão de variáveis POSIX.
Com load_dotenv(override=True)
ou dotenv_values()
, o valor de uma variável é o primeiro dos valores definidos na lista a seguir:
.env
. Com load_dotenv(override=False)
, o valor de uma variável é o primeiro dos valores definidos na lista a seguir:
.env
.Este projeto é atualmente mantido por Saurabh Kumar e Bertrand Bonnefoy-Claudet e não teria sido possível sem o apoio destas pessoas incríveis.