Eu tenho um projeto Heroku que usa variáveis de ambiente para obter sua configuração, mas eu uso o virtualenv para testar meu aplicativo localmente primeiro.
Existe uma maneira de definir as variáveis de ambiente definidas na máquina remota dentro do virtualenv?
python
heroku
environment-variables
virtualenv
Mahmoud Hanafy
fonte
fonte
.env
arquivos que o Heroku constrói, pelo menos na minha experiência. Portanto, não o inclua no seu repositório. Usuário de longa data / grande fã de autoenv btw. Olá Kenneth, você é cara!Caso esteja usando o virtualenvwrapper (eu recomendo isso), você pode definir diferentes ganchos (pré-ativar, pós-ativar, pré-ativar, pós-desativar) usando os scripts com os mesmos nomes em
$VIRTUAL_ENV/bin/
. Você precisa do gancho pós-ativo.Se você deseja manter essa configuração no diretório do projeto, basta criar um link simbólico do diretório do projeto para
$VIRTUAL_ENV/bin/postactivate
.Você pode até automatizar a criação dos links simbólicos toda vez que usar mkvirtualenv .
Limpando e desativando
Lembre-se de que isso não será limpo depois de si. Quando você desativa o virtualenv, a variável de ambiente persiste. Para limpar simetricamente, você pode adicionar a
$VIRTUAL_ENV/bin/predeactivate
.Lembre-se de que, se estiver usando isso para variáveis de ambiente que já podem estar configuradas em seu ambiente, a desativação resultará na desativação completa da saída da virtualenv. Portanto, se é provável que você possa registrar o valor anterior em algum lugar temporário, leia-o novamente em desativar.
Configuração:
Teste:
fonte
ln -s .env/postactivate $VIRTUAL_ENV/bin/postactivate
não funcionou para mim.ln
quer um caminho completo, então eu tinha que fazerln -s `pwd`/.env/postactivate $VIRTUAL_ENV/bin/postactivate
ln
.ln
gosta de caminhos completos, então eu tentei e funcionou. Quando tenteicat
o link simbólico com o caminho relativo, ele disseNo such file or directory
.Você poderia tentar:
em virtualenv_root / bin / activar. Basicamente, o script de ativação é o que é executado quando você começa a usar o virtualenv, para que possa colocar toda a sua personalização lá.
fonte
deactivate
função definida virtualenv_root / bin / activar para equilibrar a definição e a definiçãoUsando apenas virtualenv (sem virtualenvwrapper ), é fácil definir variáveis de ambiente através do
activate
script que você utiliza para ativar o virtualenv.Corre:
Adicione as variáveis de ambiente ao final do arquivo, assim:
Você também pode definir um gancho semelhante para desabilitar a variável de ambiente, conforme sugerido por Danilo Bargen em sua excelente resposta acima, se necessário.
fonte
cd
apenas para ter variáveis de ambiente? arrepioEmbora haja muitas respostas legais aqui, não vi uma solução publicada que inclua a desativação de variáveis de ambiente na desativação e não exija bibliotecas adicionais além
virtualenv
, então aqui está minha solução que envolve apenas editar / bin / ativar, usando o variáveisMY_SERVER_NAME
eMY_DATABASE_URL
como exemplos:Deve haver uma definição para desativar no script de ativação, e você deseja desmarcar suas variáveis no final dele:
Em seguida, no final do script de ativação, defina as variáveis:
Dessa forma, você não precisa instalar mais nada para fazê-lo funcionar e não acaba com as variáveis que sobraram quando
deactivate
o virtualenv.fonte
Localmente em um virtualenv, existem dois métodos que você pode usar para testar isso. A primeira é uma ferramenta instalada através do cinto de ferramentas Heroku (https://toolbelt.heroku.com/). A ferramenta é capataz. Ele exportará todas as variáveis de ambiente armazenadas em um arquivo .env localmente e, em seguida, executará os processos do aplicativo no seu Procfile.
A segunda maneira, se você estiver procurando uma abordagem mais leve, é ter um arquivo .env localmente e executar:
fonte
Instale o autoenv por
(ou)
E, em seguida, crie um
.env
arquivo na pasta do projeto virtualenvAgora tudo funciona bem.
fonte
Se você já usa o Heroku, considere executar o servidor via Foreman . Ele suporta um
.env
arquivo que é simplesmente uma lista de linhasKEY=VAL
que serão exportadas para o seu aplicativo antes da execução.fonte
Outra maneira de fazer isso, projetada para o django, mas deve funcionar na maioria das configurações, é usar o django-dotenv.
fonte
Para ativar o virtualenv no
env
diretório e exportar variáveis de ambiente armazenadas em.env
uso:fonte
echo 'alias e=". env/bin/activate && set -a; source .env; set +a"' >> ~/.bash_aliases