O problema que ambientes virtuais resolvem
Instale o Python, rode pip install requests, e o pacote cai num único lugar global. Funciona bem para um projeto. No terceiro projeto, começa a doer:
- Projeto A precisa de
django==3.2. Projeto B precisa dedjango==5.0. Só um deles pode ter sua versão instalada globalmente. - Você quer testar uma biblioteca nova mas não quer poluir todos os outros projetos da sua máquina.
- Um colega de equipe clona seu repo e não faz ideia de quais versões de quais pacotes você de fato usou.
Um ambiente virtual é a correção. É uma pasta autocontida segurando um interpretador Python e seu próprio diretório de instalação de bibliotecas. Quando o ambiente está ativado, python e pip no seu terminal apontam para dentro daquela pasta em vez do seu Python do sistema. Pacotes instalados lá ficam lá.
Criando um com venv
venv vem com o Python 3 — nada para instalar. De dentro do seu diretório de projeto:
python3 -m venv .venv
Isso cria uma pasta .venv/ ao lado do seu código. O nome .venv é convenção quase universal; o ponto no começo mantém fora da maioria das listagens de diretório, e editores como VS Code detectam automaticamente.
Depois que o comando termina, a pasta contém uma instalação Python completa (dezenas de megabytes, o que é normal) e um pip próprio.
Ativando o ambiente
Ativação reescreve o PATH do seu shell para que python e pip resolvam para os de dentro de .venv/. O comando depende da sua plataforma:
# macOS / Linux
source .venv/bin/activate
# Windows (Command Prompt)
.venv\Scripts\activate.bat
# Windows (PowerShell)
.venv\Scripts\Activate.ps1
Seu prompt ganha um prefixo (.venv) enquanto o ambiente está ativo — um lembrete visual. Qualquer pip install que você rodar agora afeta só este projeto.
Quando terminar o dia, deactivate restaura o estado anterior:
deactivate
Você não precisa desativar antes de fechar o terminal — sair do shell é a mesma coisa.
Instalando pacotes
Com o ambiente ativo, instale o que precisa:
pip install requests
pip install "pandas>=2.0"
pip install --upgrade requests
Cheque o que está instalado com pip list. Remova algo com pip uninstall requests.
Os pacotes instalados vivem sob .venv/lib/pythonX.Y/site-packages/. Você nunca edita aqueles na mão — pip gerencia o diretório.
Fixando dependências com requirements.txt
Seu projeto é reprodutível só se outros puderem instalar as mesmas versões que você usou. O jeito mais simples de capturar isso é requirements.txt:
pip freeze > requirements.txt
pip freeze imprime cada pacote instalado com a versão exata. Commit o arquivo no git.
Quando um colaborador (ou você no futuro numa máquina nova) clona o repo:
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
Três comandos e o ambiente deles bate com o seu.
Um setup de projeto comum
O fluxo completo, do começo ao fim:
# Create the project folder
mkdir my_tool && cd my_tool
# Create and activate the venv
python3 -m venv .venv
source .venv/bin/activate
# Install dependencies
pip install requests rich
# Save them
pip freeze > requirements.txt
# Work on your code...
echo "import requests; print(requests.__version__)" > main.py
python main.py
# When you're done
deactivate
Adicione .venv ao seu .gitignore
Nunca comite a pasta .venv/. É específica de plataforma e reprodutível a partir do requirements.txt:
# .gitignore
.venv/
__pycache__/
*.pyc
Commitar ia inchar o repo, quebrar em outras máquinas e vazar quaisquer binários específicos de SO que seu interpretador tem.
Qual versão do Python?
Por padrão, python3 -m venv .venv usa qualquer python3 que seu shell resolve. Se você tem vários Pythons instalados (digamos, 3.12 e 3.13), seja explícito sobre qual:
python3.13 -m venv .venv
Uma vez que o venv existe, o interpretador dele está fixado — rodar python dentro do venv ativado sempre usa aquela versão específica, mesmo se seu Python de sistema mudar.
Quando as coisas dão errado
Alguns sintomas comuns e correções:
pip installfunciona, mas meus imports falham. Você instalou contra o Python errado. Ative o venv antes dopip installe reconfira comwhich python(macOS/Linux) ouwhere python(Windows).- "ModuleNotFoundError" depois de ativar. O venv foi criado sem certas bibliotecas, ou o pacote instalou num venv diferente.
pip listmostra o que está de fato no atual. - Script de ativação não encontrado no Windows. O PowerShell pode bloquear scripts não assinados. Rode
Set-ExecutionPolicy -Scope CurrentUser RemoteSigneduma vez para permitir scripts locais. - "No module named venv". Em algumas distros Linux, venv é um pacote separado.
sudo apt install python3-venvno Debian/Ubuntu.
Além do venv: Poetry, uv, pipenv
Uma vez que você está confortável com venv + pip + requirements.txt, vai esbarrar em ferramentas que envolvem as mesmas ideias com ergonomia melhor:
- Poetry — gerencia venvs, dependências e packaging com um único
pyproject.toml. - uv — um substituto drop-in para
pipmuito rápido; lida com venvs também. - pipenv — ferramenta mais antiga que popularizou o padrão "Pipfile + Pipfile.lock".
Todas são boas. Nenhuma é exigida para aprender. Fique confortável com o fluxo simples de venv primeiro; o resto são otimizações.
O que levar
- Todo projeto Python real ganha seu próprio ambiente virtual.
- Crie um com
python3 -m venv .venv, ative, depoispip installà vontade. - Fixe dependências com
pip freeze > requirements.txte commit o arquivo. - Nunca commit a pasta
.venv/em si. - Quando imports se comportam mal, confira qual Python está ativo primeiro.
Próxima: o padrão __main__
Com um projeto montado e pacotes instalados, um último idioma fecha este capítulo — o guard if __name__ == "__main__". Está em quase todo arquivo Python feito para ser executado como script, e é assunto da próxima página.
Perguntas frequentes
O que é um ambiente virtual Python?
Um ambiente virtual é uma pasta autocontida com seu próprio interpretador Python e seu próprio diretório site-packages para bibliotecas instaladas. Ativar um faz python e pip apontarem para dentro daquela pasta em vez do seu Python de sistema, então pacotes que você instala não vazam entre projetos.
Como crio um ambiente virtual em Python?
Rode python3 -m venv .venv dentro da pasta do seu projeto. Isso cria um diretório .venv com uma instalação Python fresca. Ative com source .venv/bin/activate no macOS/Linux ou .venv\Scripts\activate no Windows. pip install agora só afeta este projeto.
Todo projeto Python deveria usar ambiente virtual?
Para qualquer coisa além de um script de uma vez, sim. Evita conflitos de versão entre projetos, torna dependências explícitas num requirements.txt (ou pyproject.toml) e deixa colaboradores reproduzirem seu setup. O setup de um minuto poupa horas de debugar ModuleNotFoundError depois.
Qual a diferença entre venv e virtualenv?
venv é embutido no Python 3 — sem install. virtualenv é uma ferramenta de terceiros que antecede, com algumas features extras (criação mais rápida, suporte a Pythons antigos). Para a maioria dos projetos modernos, venv é o default certo; recorra a virtualenv só se tiver necessidade específica.