[{"data":1,"prerenderedAt":456},["ShallowReactive",2],{"\u002Fpt\u002Fblog\u002F06-environment-variables":3,"nothing-at-all":455},{"id":4,"path":5,"title":6,"description":7,"body":8,"seo":435,"meta":436,"image":448,"locale":449,"locales":450,"tags":451,"sagaName":450,"date":454,"updated":450},"content\u002Fpt\u002Fblog\u002F06-environment-variables.md","\u002Fpt\u002Fblog\u002F06-environment-variables","Variáveis de Ambiente","Vamos aprender a usar variáveis de ambiente para armazenar dados sensíveis e de configuração.",{"type":9,"value":10,"toc":428},"minimark",[11,16,21,25,28,59,71,77,80,85,92,162,172,177,181,184,190,196,200,203,206,224,227,235,238,242,249,255,264,297,311,327,330,392,405,414,418,424],[12,13],"post-cover",{":image":14,":path":15},"image","path",[17,18],"post-title",{":date":19,":path":15,":title":20},"date","title",[22,23,24],"p",{},"Antes de começarmos com o código, vamos entender o que são variáveis de\nambiente. Variáveis de ambiente são variáveis armazenadas fora do código,\ngeralmente no sistema operacional. Elas são usadas para armazenar dados de\nconfiguração e também podem ser usadas para armazenar informações sensíveis.",[22,26,27],{},"Aqui estão dois exemplos rápidos de variáveis de ambiente:",[29,30,35],"pre",{"className":31,"code":32,"language":33,"meta":34,"style":34},"language-bash shiki shiki-themes github-light-high-contrast github-dark-high-contrast","echo $USER\necho $PATH\n","bash","",[36,37,38,51],"code",{"__ignoreMap":34},[39,40,43,47],"span",{"class":41,"line":42},"line",1,[39,44,46],{"class":45},"s-5SL","echo",[39,48,50],{"class":49},"suds8"," $USER\n",[39,52,54,56],{"class":41,"line":53},2,[39,55,46],{"class":45},[39,57,58],{"class":49}," $PATH\n",[22,60,61,62,66,67,70],{},"O primeiro comando deve imprimir o nome do usuário atual (ou ",[63,64,65],"strong",{},"username","), e o\nsegundo deve imprimir o ",[63,68,69],{},"path*"," do sistema. Note, entretanto, que a sintaxe\npara acessar variáveis de ambiente pode variar dependendo do sistema operacional\n— os exemplos acima são para sistemas baseados em Unix (macOS e Linux).",[72,73,74],"blockquote",{},[22,75,76],{},"*O path do sistema é uma lista de diretórios onde o sistema procura por\nexecutáveis. Quando você digita um comando no terminal, o sistema procura por\nesse comando nos diretórios listados na variável PATH. Se você instalou um\nprograma, como o interpretador Python, e uma mensagem de erro diz que o\ncomando não foi encontrado, é provável que o diretório onde o programa está\ninstalado não esteja na variável PATH.",[22,78,79],{},"Essas variáveis são definidas pelo sistema operacional (tecnicamente, pelo\nshell, mas isso não é importante por enquanto). Qualquer programa que tenha\nacesso ao ambiente pode ler essas variáveis.",[81,82,84],"h2",{"id":83},"variáveis-de-ambiente-python","Variáveis de ambiente & Python",[22,86,87,88,91],{},"Em Python, você pode acessar variáveis de ambiente usando o módulo ",[36,89,90],{},"os",".",[29,93,97],{"className":94,"code":95,"language":96,"meta":34,"style":34},"language-py shiki shiki-themes github-light-high-contrast github-dark-high-contrast","import os\n\nuser = os.environ.get(\"USER\")\nprint(f\"Olá, {user}\")\n","py",[36,98,99,108,114,133],{"__ignoreMap":34},[39,100,101,105],{"class":41,"line":42},[39,102,104],{"class":103},"sHUrx","import",[39,106,107],{"class":49}," os\n",[39,109,110],{"class":41,"line":53},[39,111,113],{"emptyLinePlaceholder":112},true,"\n",[39,115,117,120,123,126,130],{"class":41,"line":116},3,[39,118,119],{"class":49},"user ",[39,121,122],{"class":103},"=",[39,124,125],{"class":49}," os.environ.get(",[39,127,129],{"class":128},"sT6z2","\"USER\"",[39,131,132],{"class":49},")\n",[39,134,136,139,142,145,148,151,154,157,160],{"class":41,"line":135},4,[39,137,138],{"class":45},"print",[39,140,141],{"class":49},"(",[39,143,144],{"class":103},"f",[39,146,147],{"class":128},"\"Olá, ",[39,149,150],{"class":103},"{",[39,152,153],{"class":49},"user",[39,155,156],{"class":103},"}",[39,158,159],{"class":128},"\"",[39,161,132],{"class":49},[22,163,164,165,168,169,91],{},"O código acima vai imprimir o nome do usuário atual — pelo menos no macOS e\nLinux. Se você estiver usando Windows, pode ser necessário usar a variável de\nambiente ",[36,166,167],{},"USERNAME"," em vez de ",[36,170,171],{},"USER",[72,173,174],{},[22,175,176],{},"Embora tecnicamente você possa, raramente existe um bom motivo para definir\nvariáveis de ambiente a partir do seu código.",[81,178,180],{"id":179},"informações-sensíveis","Informações sensíveis",[22,182,183],{},"Você pode ter chegado aqui simplesmente porque ouviu dizer que é uma boa prática\narmazenar segredos e senhas em variáveis de ambiente em vez de salvá-los no\ncódigo. Isso está correto. Você nunca deve armazenar informações sensíveis no\nseu código. Mas por quê?",[22,185,186,189],{},[63,187,188],{},"Segurança",": Armazenar segredos no código é considerado uma má prática, porque\nse você usar qualquer tipo de sistema de controle de versão (como Git), você\nestará compartilhando seus segredos com o mundo. Mesmo que seu repositório seja\nprivado, ainda é uma má ideia, pois seu repositório pode vazar ou alguém pode\nganhar acesso a ele.",[22,191,192,195],{},[63,193,194],{},"Flexibilidade",": Ao armazenar segredos fora do código, você pode mudar qual\nbanco de dados ou serviço está usando sem ter que mudar o código. Quando você\nganhar mais experiência publicando seus programas em produção, você verá como\nisso é útil.",[81,197,199],{"id":198},"definindo-variáveis-de-ambiente","Definindo variáveis de ambiente",[22,201,202],{},"Até agora, só vimos como ler variáveis de ambiente existentes. Isso não é muito\nútil se você está tentando mover suas credenciais de banco de dados para fora do\ncódigo. Vamos ver como definir variáveis de ambiente.",[22,204,205],{},"Em sistemas baseados em Unix (macOS e Linux), você pode definir variáveis de\nambiente no terminal assim:",[29,207,209],{"className":31,"code":208,"language":33,"meta":34,"style":34},"export MY_SECRET=some_password\n",[36,210,211],{"__ignoreMap":34},[39,212,213,216,219,221],{"class":41,"line":42},[39,214,215],{"class":103},"export",[39,217,218],{"class":49}," MY_SECRET",[39,220,122],{"class":103},[39,222,223],{"class":49},"some_password\n",[22,225,226],{},"No Windows, você pode definir variáveis de ambiente assim:",[29,228,233],{"className":229,"code":231,"language":232},[230],"language-text","set MY_SECRET=some_password\n","text",[36,234,231],{"__ignoreMap":34},[22,236,237],{},"Estas estarão disponíveis para qualquer programa que você executar nessa sessão\ndo terminal. Se você fechar o terminal e abrir um novo, precisará definir as\nvariáveis de ambiente novamente. Bem chato, né?",[81,239,241],{"id":240},"usando-um-arquivo-env","Usando um arquivo .env",[22,243,244,245,248],{},"Para facilitar as coisas, você pode usar um arquivo ",[36,246,247],{},".env"," para armazenar suas\nvariáveis de ambiente. Este arquivo é apenas um arquivo de texto com pares\nchave-valor, assim:",[29,250,253],{"className":251,"code":252,"language":232},[230],"MY_SECRET=some_password\n",[36,254,252],{"__ignoreMap":34},[72,256,257],{},[22,258,259,261,262,91],{},[36,260,247],{}," é o nome completo do arquivo. O ponto no início não é um erro de\ndigitação. Isso torna o arquivo oculto na maioria dos sistemas, e é isso que\nqueremos. Isso também é uma convenção no mundo da programação. A maioria das\nbibliotecas que leem variáveis de ambiente de um arquivo procuram por um\narquivo chamado ",[36,263,247],{},[72,265,266,284],{},[22,267,268,271,272,274,275,278,279,281,282,91],{},[63,269,270],{},"Importante",": Você nunca deve fazer commit do seu arquivo ",[36,273,247],{}," para seu\nsistema de controle de versão — nunca adicione este arquivo ao Git. Este é o\nobjetivo de não incluir os segredos no seu código. O Git tem uma função\nchamada ",[36,276,277],{},".gitignore"," que você pode usar para dizer ao Git para ignorar certos\narquivos. Você deve adicionar ",[36,280,247],{}," ao seu arquivo ",[36,283,277],{},[22,285,286,287,289,290,91],{},"Leia mais sobre ",[36,288,277],{}," ",[291,292,296],"a",{"href":293,"rel":294},"https:\u002F\u002Fgit-scm.com\u002Fdocs\u002Fgitignore",[295],"nofollow","aqui",[22,298,299,300,302,303,306,307,310],{},"Para ler o arquivo ",[36,301,247],{}," em Python, você pode usar a biblioteca\n",[36,304,305],{},"python-dotenv",". Você pode instalá-la usando ",[36,308,309],{},"pip",":",[29,312,314],{"className":31,"code":313,"language":33,"meta":34,"style":34},"pip install python-dotenv\n",[36,315,316],{"__ignoreMap":34},[39,317,318,321,324],{"class":41,"line":42},[39,319,309],{"class":320},"soyes",[39,322,323],{"class":128}," install",[39,325,326],{"class":128}," python-dotenv\n",[22,328,329],{},"Aqui está como você pode usá-la:",[29,331,333],{"className":94,"code":332,"language":96,"meta":34,"style":34},"from dotenv import load_dotenv\nimport os\n\nload_dotenv()\n\ndb_password = os.getenv(\"MY_SECRET\")\nprint(db_password)\n",[36,334,335,348,354,358,363,368,384],{"__ignoreMap":34},[39,336,337,340,343,345],{"class":41,"line":42},[39,338,339],{"class":103},"from",[39,341,342],{"class":49}," dotenv ",[39,344,104],{"class":103},[39,346,347],{"class":49}," load_dotenv\n",[39,349,350,352],{"class":41,"line":53},[39,351,104],{"class":103},[39,353,107],{"class":49},[39,355,356],{"class":41,"line":116},[39,357,113],{"emptyLinePlaceholder":112},[39,359,360],{"class":41,"line":135},[39,361,362],{"class":49},"load_dotenv()\n",[39,364,366],{"class":41,"line":365},5,[39,367,113],{"emptyLinePlaceholder":112},[39,369,371,374,376,379,382],{"class":41,"line":370},6,[39,372,373],{"class":49},"db_password ",[39,375,122],{"class":103},[39,377,378],{"class":49}," os.getenv(",[39,380,381],{"class":128},"\"MY_SECRET\"",[39,383,132],{"class":49},[39,385,387,389],{"class":41,"line":386},7,[39,388,138],{"class":45},[39,390,391],{"class":49},"(db_password)\n",[22,393,394,395,398,399,401,402,91],{},"A função ",[36,396,397],{},"load_dotenv()"," lê o arquivo ",[36,400,247],{}," no diretório atual e define as\nvariáveis de ambiente. Agora você pode acessar as variáveis usando\n",[36,403,404],{},"os.getenv()",[22,406,407,408,410,411,413],{},"Só para deixar claro, você não precisa de um arquivo ",[36,409,247],{}," ou da biblioteca\n",[36,412,305],{}," para usar variáveis de ambiente em Python. Essa é apenas uma\nmaneira conveniente de definir e ler variáveis de um arquivo para que você não\nprecise defini-las manualmente toda vez que abrir uma nova sessão do terminal.",[81,415,417],{"id":416},"conclusão","Conclusão",[22,419,420,421,423],{},"Variáveis de ambiente são uma ótima maneira de armazenar dados de configuração e\ninformações sensíveis fora do seu código. Elas são fáceis de usar e podem tornar\nseu código mais seguro e flexível. Você pode usá-las para armazenar credenciais\nde banco de dados, chaves de API e outras informações sensíveis. Apenas\nlembre-se de nunca fazer commit do seu arquivo ",[36,422,247],{}," para o Git.",[425,426,427],"style",{},"html pre.shiki code .s-5SL, html code.shiki .s-5SL{--shiki-default:#023B95;--shiki-dark:#91CBFF}html pre.shiki code .suds8, html code.shiki .suds8{--shiki-default:#0E1116;--shiki-dark:#F0F3F6}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sHUrx, html code.shiki .sHUrx{--shiki-default:#A0111F;--shiki-dark:#FF9492}html pre.shiki code .sT6z2, html code.shiki .sT6z2{--shiki-default:#032563;--shiki-dark:#ADDCFF}html pre.shiki code .soyes, html code.shiki .soyes{--shiki-default:#702C00;--shiki-dark:#FFB757}",{"title":34,"searchDepth":53,"depth":53,"links":429},[430,431,432,433,434],{"id":83,"depth":53,"text":84},{"id":179,"depth":53,"text":180},{"id":198,"depth":53,"text":199},{"id":240,"depth":53,"text":241},{"id":416,"depth":53,"text":417},{"title":6,"description":7},{"head":437},{"meta":438},[439,442,445],{"name":440,"content":441},"keywords","python, env, variables, secrets, envvar",{"name":443,"content":444},"robots","index, follow",{"name":446,"content":447},"author","Paulo Queiroz","https:\u002F\u002Fraggesilver-com.fly.storage.tigris.dev\u002Fimages\u002Fblog\u002Fblog_06.jpg","pt",null,[452,453],"python","devops","2025-01-28",[],1794219184910]