Pular para o conteúdo principal

Tudo o que você precisa saber sobre as variáveis de ambiente do Python

Aprenda os prós e contras do gerenciamento de variáveis de ambiente do Python com as bibliotecas os e python-dotenv.
Actualizado 30 de jul. de 2024  · 9 min de leitura

As variáveis de ambiente são mecanismos poderosos para armazenar detalhes de configuração do seu projeto de desenvolvimento de forma flexível e segura. Eles armazenam pares de valores-chave de dados acessíveis por linguagens de programação como Python e mantêm essas informações ocultas de olhos curiosos. Neste tutorial, você aprenderá conceitos e técnicas essenciais para criar e gerenciar variáveis de ambiente em Python.

O que são variáveis de ambiente?

As variáveis de ambiente são pares nome-valor armazenados em algum lugar seguro em seu sistema operacional. Na maioria das vezes, eles têm a seguinte aparência:

API_KEY=1akn4nka-aqwej3

Em Python, você pode usar essas variáveis para armazenar informações confidenciais relacionadas ao seu projeto de desenvolvimento. As informações confidenciais podem ser:

  • Chaves de API para acessar aplicativos de terceiros
  • Nome de usuário e senhas para fazer login em aplicativos por meio de scripts
  • Credenciais do banco de dados
  • qualquer coisa que possa causar um problema de segurança se for exposta acidentalmente.

Por exemplo, se você escrever um script Python que usa abertamente suas credenciais da AWS e acidentalmente enviar esse script para o GitHub, há uma chance de que partes mal-intencionadas o descubram e aumentem significativamente sua conta da AWS (sabe-se que isso acontece).

Outro benefício das variáveis de ambiente é a capacidade de configuração. Você pode ajustar facilmente as configurações (URLs de banco de dados, caminhos de arquivos) modificando as variáveis de ambiente sem alterar o código. Esse recurso é especialmente útil se você usar a mesma configuração em várias partes do seu projeto.

Então, vamos aprender como você pode trabalhar com eles em Python.

Como recuperar variáveis de ambiente no módulo os do Python

Para recuperar as variáveis de ambiente existentes no seu sistema, você pode usar o módulo os. Ele tem a função .getenv para recuperar variáveis:

import os
os.getenv("USER")
'bexgboost'

Acima, estou recuperando o nome de usuário do sistema, que está incorporado em todos os sistemas. Há muitos outros, como o caminho de casa:

os.getenv("HOME")
'/home/bexgboost'

Ou o caminho para o executável do Conda:

os.getenv("CONDA_EXE")
'/home/bexgboost/anaconda3/bin/conda'

Portanto, quando você executa os comandos conda, é assim que o terminal sabe qual aplicativo deve ser executado.

Mas o que acontece se você tentar recuperar uma variável que não existe?

os.getenv("MYDATABASE")

A função .getenv() não retorna nada, mas podemos mudar esse comportamento. Você pode usar seu parâmetro default para retornar um valor personalizado se uma variável não existir:

os.getenv("COMPUTER_PASSWORD", default="Nope!")
'Nope!'

A função .getenv() é o melhor método para recuperar as variáveis existentes.

No entanto, em outras fontes, você poderá ver métodos diferentes, como o atributo .environ, que retorna um dicionário contendo todas as variáveis de ambiente:

current_directory = os.environ.get("PWD", None)
current_directory
'/home/bexgboost/articles/2024/4_april'

Como se trata de um dicionário, você pode usar a notação de colchetes (não recomendada) ou a função .get() para recuperar um valor.

os também tem acesso à variável de sistema mais importante, chamada PATH. PATH contém os caminhos absolutos para todos os executáveis instalados no sistema, portanto, é bastante longo:

os.getenv("PATH")[:46]
'/home/bexgboost/.local/bin:/home/bexgboost/bin'

Cada caminho em PATH é separado por dois pontos. Vamos contar a duração do PATH em meu sistema:

def count_path_items():
   items = os.getenv("PATH").split(":")

   return len(items)

count_path_items()
79

79! Nada mal.

Usando a biblioteca python-dotenv para gerenciar as variáveis de ambiente em Python de forma eficaz

Configuração de variáveis de ambiente personalizadas

Agora que sabemos como extrair variáveis existentes, vamos ver como definir variáveis personalizadas. O primeiro método é usar o dicionário os.environ:

# Create a new environment variable
os.environ["NEW_VARIABLE"] = "42"  # Always expects a string value

os.getenv("NEW_VARIABLE")
'42'

No entanto, esse método não é muito útil, pois todas as novas variáveis serão perdidas quando a sessão atual terminar.

Felizmente, há um método mais duradouro de armazenar variáveis de ambiente usando arquivos .env (pronuncia-se dot-env). Esses arquivos têm a mesma sintaxe, o que significa que funcionarão em qualquer sistema operacional. Aqui está um exemplo de arquivo .env:

CUSTOM_API_LINK=https://myapi.com/v1/api
SNOWFLAKE_USERNAME=bexgboost
MYSQL_DATABASE_PASSWORD=as3ndf03

Por enquanto, ele define apenas três variáveis. Para ler esse arquivo e extrair seu conteúdo, usaremos uma biblioteca chamada python-dotenv:

$ pip install python-dotenv

Em seguida, em um script Python ou em um Jupyter Notebook, importaremos sua função load_dotenv e a chamaremos:

from dotenv import load_dotenv

load_dotenv()
True

Se você não conseguir encontrar um arquivo .env no diretório atual, ele pesquisará todos os diretórios pai e retornará True se o encontrar.

Armazenei o arquivo .env acima em meu diretório pessoal ~/.env; é por isso que o load_dotenv pode encontrá-lo.

Para criar seus próprios arquivos, você pode usar o comando touch no terminal ou usar um editor de texto como o VSCode:

$ touch ~/.env

A sintaxe dos arquivos .env é bastante flexível. Por exemplo, você pode definir variáveis com valores de várias linhas (devem ter aspas):

LONG_ENV="This is an environment
variable with a long message"

Use caracteres de escape:

LONG_ENV="This value uses an \"escape character"

Você também pode adicionar comentários ao arquivo para referência futura:

# You can also add comments anywhere with a hashtag
CUSTOM_API_LINK=https://myapi.com/v1/api
SNOWFLAKE_USERNAME=bexgboost
MYSQL_DATABASE_PASSWORD=as3ndf03

Também é possível usar o valor de uma variável dentro de outra usando a sintaxe ${VAR_NAME}:

FIRST_NAME=John
LAST_NAME=Doe
FULL_NAME="I am ${FIRST_NAME} ${LAST_NAME}"

Recuperação de variáveis de ambiente personalizadas com python-dotenv

A recuperação de variáveis personalizadas é a mesma de antes - basta usar o módulo os:

import os

os.getenv("CUSTOM_API_LINK")
'https://myapi.com/v1/api'
os.getenv("SNOWFLAKE_USERNAME")
'bexgboost'

Certifique-se de que você ligue primeiro para load_dotenv.

Se o arquivo .env estiver localizado em algum lugar inacessível para load_dotenv, você poderá passar um caminho direto para ele, como abaixo:

load_dotenv("/home/bexgboost/somewhere/unreachable/.env")
True

Trabalhando com arquivos .env no Jupyter

Depois de instalar o Python-dotenv, você não precisará importá-lo para o Python se estiver usando o Jupyter. A biblioteca vem com um método mágico do Jupyter que a carrega automaticamente:

# Run this anywhere in the notebook to load EVs from .env
%load_ext dotenv
%dotenv

Em seguida, você pode usar o módulo os novamente:

import os

os.getenv("SNOWFLAKE_USERNAME")
'bexgboost'

Práticas recomendadas para o uso de variáveis de ambiente em Python

Nesta seção, listaremos algumas práticas recomendadas para garantir que as variáveis de ambiente permaneçam seguras e totalmente utilizáveis.

1. Sempre adicione os arquivos .env a .gitignore para que você não os envie acidentalmente para o GitHub.

# Create .gitignore if it doesn't exist
$ touch .gitignore
$ echo ".env" >> .gitignore

2. Ao definir variáveis, use nomes descritivos, todos em MAIÚSCULAS.

# Good
DEBUG=True
LOGGING_VERBOSITY=3

# Bad
debug=True
LV=3

3. Crie um único arquivo .env para armazenar variáveis de todo o sistema que você precisa em todos os projetos.

$ touch ~/.env

4. Controle o escopo dos seus arquivos .env. Crie arquivos separados para diferentes partes do seu fluxo de trabalho de desenvolvimento, como abaixo:

$ touch development/.env.development
$ touch testing/.env.testing
$ touch production/.env.production

A função load_dotenv os reconhecerá.

Se você criar vários arquivos .env com nomes diferentes, altere o arquivo .gitignore para que todos eles sejam excluídos da indexação do git:

# Pay attention to the asterisk *
$ echo ".env*" >> .gitignore

Conclusão

Neste artigo, aprendemos todos os conceitos e técnicas essenciais para que você gerencie efetivamente as variáveis de ambiente em Python. Descobrimos como recuperar variáveis existentes com o módulo Python OS e como criar valores personalizados com a biblioteca python-dotenv. Também aprendemos a escrever arquivos .env que estejam em conformidade com as práticas recomendadas.

Se você quiser saber mais sobre engenharia de software Python, confira nosso curso, Princípios de engenharia de software em Python.

Você também pode conferir o nosso programa Python Programming Skill Track, que o levará de iniciante a um Pythonista avançado com exercícios práticos e projetos.

Temas

Continue sua jornada com o Python hoje mesmo!

curso

Software Engineering Principles in Python

4 hr
48.9K
Learn about modularity, documentation, and automated testing to help you solve data science problems more quickly and reliably.
Ver DetalhesRight Arrow
Iniciar curso
Ver maisRight Arrow
Relacionado

blog

As 9 principais alternativas ao Anaconda para o gerenciamento do ambiente Python

Este guia conciso e fácil de seguir ajudará você a descobrir as melhores alternativas ao Anaconda e a encontrar a ferramenta certa para seus projetos Python.
Kurtis Pykes 's photo

Kurtis Pykes

23 min

blog

As 7 melhores certificações em Python para todos os níveis

Descubra se uma certificação em Python é adequada para você, quais são as melhores opções e as alternativas oferecidas neste guia abrangente.
Matt Crabtree's photo

Matt Crabtree

18 min

Data Skills

blog

6 práticas recomendadas de Python para um código melhor

Descubra as práticas recomendadas de codificação Python para escrever os melhores scripts Python da categoria.
Javier Canales Luna's photo

Javier Canales Luna

13 min

tutorial

Escopo das variáveis em Python

Saiba o que são as miras telescópicas variáveis e familiarize-se com a regra "LEGB". Você também lidará com cenários em que verá as palavras-chave globais e não locais em ação.
Sejal Jaiswal's photo

Sejal Jaiswal

9 min

tutorial

Configuração do VSCode para Python: Um guia completo

Experimente uma forma simples, divertida e produtiva de desenvolvimento em Python, aprendendo sobre o VSCode e suas extensões e recursos.
Abid Ali Awan's photo

Abid Ali Awan

16 min

tutorial

Desenvolvimento de back-end em Python: Um guia completo para iniciantes

Este guia completo ensina a você os fundamentos do desenvolvimento de back-end em Python. Aprenda conceitos básicos, estruturas e práticas recomendadas para você começar a criar aplicativos da Web.
Oluseye Jeremiah's photo

Oluseye Jeremiah

26 min

Ver maisVer mais