Módulo 6 - Ambientes virtuais e pip

requirements.txt: a receita do projeto

11 min de leitura · por Cesar Gargiulo, revisado pela equipe ValorFinal e GuardiaSec · Atualizado em 01/07/2026

O que você vai aprender

  • Gerar o requirements.txt com pip freeze.
  • Recriar o ambiente com pip install -r requirements.txt.
  • Entender por que fixar versões deixa o projeto reproduzível.
  • Saber o que versionar e o que deixar de fora.

Congelar as dependências

Você já sabe listar os pacotes com pip list. Agora vem o passo que transforma essa lista numa receita guardável. O comando pip freeze mostra os pacotes instalados num formato pronto para reinstalar, com a versão fixada em cada um. Sozinho, ele só imprime na tela. A mágica é redirecionar essa saída para um arquivo com o sinal de maior, criando o requirements.txt. A partir daí, esse arquivo carrega a lista exata do que o projeto usa.

# com o ambiente ativo, gere a receita do projeto
pip freeze > requirements.txt

pip freeze imprime as versões; o > grava tudo no arquivo requirements.txt.

Abra o requirements.txt em qualquer editor e você verá algo direto: uma linha por pacote, no formato nome==versão. O sinal de igual duplo trava a versão exata. Não é uma faixa aproximada; é aquela versão específica que funcionou no seu projeto. Essa precisão é justamente o valor do arquivo. Ele não diz apenas quais bibliotecas o projeto usa, e sim quais versões, para que o comportamento seja o mesmo em qualquer lugar que a receita for aplicada.

certifi==2024.x
charset-normalizer==3.x
idna==3.x
requests==2.x
urllib3==2.x

Conteúdo típico do requirements.txt: cada pacote com a versão travada.

Recriar o ambiente a partir da receita

A receita só brilha quando você a aplica. Imagine que você trocou de computador, ou baixou o projeto de um repositório, ou apagou a pasta .venv para começar limpo. Você recria o ambiente do zero com um único comando: pip install -r requirements.txt. O -r quer dizer requirements, ou seja, instale tudo que está listado neste arquivo. O pip lê o requirements.txt linha por linha e instala cada pacote na versão exata indicada, montando a despensa idêntica à original.

python -m venv .venv
.venv\Scripts\activate
pip install -r requirements.txt

Do zero: crie o ambiente, ative e instale tudo da receita de uma vez.

Sem requirements.txt

  • Instalar cada pacote de memória, um a um
  • Risco de esquecer uma dependência
  • Cada pessoa acaba com versões diferentes
  • Bug que só acontece na máquina de alguém

Com requirements.txt

  • Um comando recria o ambiente inteiro
  • Nada é esquecido, tudo está listado
  • Todos ficam nas mesmas versões
  • Comportamento igual em qualquer computador

Esse é o momento em que o esforço de manter a receita se paga. Sem ela, quem pega o seu projeto precisa adivinhar quais pacotes instalar e em quais versões, e é comum surgir aquele bug que só acontece na máquina de uma pessoa, por causa de uma versão diferente. Com o requirements.txt versionado junto do código, qualquer um monta o ambiente exato em segundos. É o que quer dizer projeto reprodutível: mesma receita, mesmo resultado, em qualquer lugar.

O que versionar e o que deixar de fora

Fica clara agora a divisão de trabalho entre a pasta e o arquivo. A pasta .venv é pesada, específica do seu sistema operacional e recriável a qualquer instante; ela não entra no controle de versão, e o nome vai para o .gitignore. O requirements.txt, ao contrário, é leve, portátil e essencial; ele entra no repositório junto do código. Em uma frase: versione a receita, não a despensa. Quem clona o projeto recria a despensa a partir da receita, e não precisa carregar a sua.

Um cuidado prático: sempre gere o requirements.txt com o ambiente virtual ativo. Se você rodar o pip freeze fora do ambiente, ele lista os pacotes globais, e a receita fica errada, cheia de coisas que o projeto nem usa. Com o (.venv) ligado, o freeze enxerga só a despensa daquele projeto, e a lista sai enxuta e fiel. Esse é o fluxo profissional completo: criar o ambiente, ativar, instalar o que precisa, congelar a receita e versioná-la junto do código.

Teste rápido

Para que serve o comando pip install -r requirements.txt?

Perguntas frequentes

Qual a diferença entre pip list e pip freeze?
Os dois mostram os pacotes instalados, mas em formatos diferentes. O pip list exibe uma tabela legível, boa para conferir. O pip freeze imprime no formato nome==versão, pronto para reinstalar, e por isso é o usado para gerar o requirements.txt.
Por que fixar a versão exata com == em vez de deixar livre?
Para o projeto ser reprodutível. Travando a versão, todo mundo instala exatamente o que funcionou, e o comportamento não muda por causa de uma atualização inesperada de biblioteca. Faixas mais flexíveis existem, mas o pip freeze fixa a versão exata de propósito.
Preciso rodar o pip freeze toda vez?
Não a cada comando, mas sim sempre que as dependências mudarem. Instalou ou removeu um pacote, regenere o requirements.txt com pip freeze > requirements.txt. Assim o arquivo continua refletindo o que o projeto realmente usa naquele momento.
O requirements.txt tem que ficar na raiz do projeto?
É a convenção mais comum: o arquivo fica na raiz, ao lado do código, e vai para o controle de versão. Assim quem clona o projeto encontra a receita na hora e recria o ambiente com um comando, sem procurar onde a lista está.
Gerei o requirements.txt e ele veio cheio de coisa estranha. Por quê?
Provavelmente você rodou o pip freeze com o ambiente desativado, então ele listou os pacotes globais do computador. Ative o ambiente virtual e gere de novo: com o (.venv) ligado, o freeze mostra só a despensa daquele projeto, e a lista sai limpa.
Se eu apagar a pasta .venv, o requirements.txt salva o projeto?
Sim, e é para isso que ele serve. A pasta .venv é descartável. Com o requirements.txt em mãos, você cria um ambiente novo, ativa e roda pip install -r requirements.txt para reconstruir a despensa idêntica. Por isso a receita se versiona e a pasta, não.

Fontes

Seu progresso fica salvo neste aparelho. Assinantes sincronizam entre os aparelhos.