Paulo Queiroz

Variáveis de Ambiente

Antes de começarmos com o código, vamos entender o que são variáveis de ambiente. Variáveis de ambiente são variáveis armazenadas fora do código, geralmente no sistema operacional. Elas são usadas para armazenar dados de configuração e também podem ser usadas para armazenar informações sensíveis.

Aqui estão dois exemplos rápidos de variáveis de ambiente:

echo $USER
echo $PATH

O primeiro comando deve imprimir o nome do usuário atual (ou username), e o segundo deve imprimir o path* do sistema. Note, entretanto, que a sintaxe para acessar variáveis de ambiente pode variar dependendo do sistema operacional — os exemplos acima são para sistemas baseados em Unix (macOS e Linux).

*O path do sistema é uma lista de diretórios onde o sistema procura por executáveis. Quando você digita um comando no terminal, o sistema procura por esse comando nos diretórios listados na variável PATH. Se você instalou um programa, como o interpretador Python, e uma mensagem de erro diz que o comando não foi encontrado, é provável que o diretório onde o programa está instalado não esteja na variável PATH.

Essas variáveis são definidas pelo sistema operacional (tecnicamente, pelo shell, mas isso não é importante por enquanto). Qualquer programa que tenha acesso ao ambiente pode ler essas variáveis.

Variáveis de ambiente & Python

Em Python, você pode acessar variáveis de ambiente usando o módulo os.

import os

user = os.environ.get("USER")
print(f"Olá, {user}")

O código acima vai imprimir o nome do usuário atual — pelo menos no macOS e Linux. Se você estiver usando Windows, pode ser necessário usar a variável de ambiente USERNAME em vez de USER.

Embora tecnicamente você possa, raramente existe um bom motivo para definir variáveis de ambiente a partir do seu código.

Informações sensíveis

Você pode ter chegado aqui simplesmente porque ouviu dizer que é uma boa prática armazenar segredos e senhas em variáveis de ambiente em vez de salvá-los no código. Isso está correto. Você nunca deve armazenar informações sensíveis no seu código. Mas por quê?

Segurança: Armazenar segredos no código é considerado uma má prática, porque se você usar qualquer tipo de sistema de controle de versão (como Git), você estará compartilhando seus segredos com o mundo. Mesmo que seu repositório seja privado, ainda é uma má ideia, pois seu repositório pode vazar ou alguém pode ganhar acesso a ele.

Flexibilidade: Ao armazenar segredos fora do código, você pode mudar qual banco de dados ou serviço está usando sem ter que mudar o código. Quando você ganhar mais experiência publicando seus programas em produção, você verá como isso é útil.

Definindo variáveis de ambiente

Até agora, só vimos como ler variáveis de ambiente existentes. Isso não é muito útil se você está tentando mover suas credenciais de banco de dados para fora do código. Vamos ver como definir variáveis de ambiente.

Em sistemas baseados em Unix (macOS e Linux), você pode definir variáveis de ambiente no terminal assim:

export MY_SECRET=some_password

No Windows, você pode definir variáveis de ambiente assim:

set MY_SECRET=some_password

Estas estarão disponíveis para qualquer programa que você executar nessa sessão do terminal. Se você fechar o terminal e abrir um novo, precisará definir as variáveis de ambiente novamente. Bem chato, né?

Usando um arquivo .env

Para facilitar as coisas, você pode usar um arquivo .env para armazenar suas variáveis de ambiente. Este arquivo é apenas um arquivo de texto com pares chave-valor, assim:

MY_SECRET=some_password

.env é o nome completo do arquivo. O ponto no início não é um erro de digitação. Isso torna o arquivo oculto na maioria dos sistemas, e é isso que queremos. Isso também é uma convenção no mundo da programação. A maioria das bibliotecas que leem variáveis de ambiente de um arquivo procuram por um arquivo chamado .env.

Importante: Você nunca deve fazer commit do seu arquivo .env para seu sistema de controle de versão — nunca adicione este arquivo ao Git. Este é o objetivo de não incluir os segredos no seu código. O Git tem uma função chamada .gitignore que você pode usar para dizer ao Git para ignorar certos arquivos. Você deve adicionar .env ao seu arquivo .gitignore.

Leia mais sobre .gitignore aqui.

Para ler o arquivo .env em Python, você pode usar a biblioteca python-dotenv. Você pode instalá-la usando pip:

pip install python-dotenv

Aqui está como você pode usá-la:

from dotenv import load_dotenv
import os

load_dotenv()

db_password = os.getenv("MY_SECRET")
print(db_password)

A função load_dotenv() lê o arquivo .env no diretório atual e define as variáveis de ambiente. Agora você pode acessar as variáveis usando os.getenv().

Só para deixar claro, você não precisa de um arquivo .env ou da biblioteca python-dotenv para usar variáveis de ambiente em Python. Essa é apenas uma maneira conveniente de definir e ler variáveis de um arquivo para que você não precise defini-las manualmente toda vez que abrir uma nova sessão do terminal.

Conclusão

Variáveis de ambiente são uma ótima maneira de armazenar dados de configuração e informações sensíveis fora do seu código. Elas são fáceis de usar e podem tornar seu código mais seguro e flexível. Você pode usá-las para armazenar credenciais de banco de dados, chaves de API e outras informações sensíveis. Apenas lembre-se de nunca fazer commit do seu arquivo .env para o Git.