Capítulo 8, Ambiente
Qual ferramenta escolher, editor e estrutura de projeto
Cinco ferramentas fazem coisas parecidas. Eu comparo com critérios objetivos e digo o que escolheria em cada situação.
Código deste capítulo: ambiente/cap08_estrutura_projeto.py
Comparação
| Critério | pip e venv | pyenv | pipx | Poetry | uv |
|---|---|---|---|---|---|
| Instala versões de Python | Não | Sim (compila) | Não | Não | Sim (binários prontos) |
| Cria ambiente virtual | Sim (venv) | Não | Um por ferramenta | Sim | Sim |
| Resolve dependências indiretas | Básico | Não | Não | Sim | Sim |
| Gera lockfile | Não | Não | Não | Sim | Sim |
| Instala ferramentas de CLI | Não | Não | Sim | Não | Sim (uv tool) |
| Publica pacotes | Não | Não | Não | Sim | Sim (uv publish) |
| Curva de aprendizado | Baixa | Média | Baixa | Média | Baixa |
Minha recomendação
Eu escolheria uv para projetos novos, porque ele cobre o ciclo inteiro com uma ferramenta só. Escolheria Poetry se o time já o usa e o poetry.lock está em produção: trocar de gerenciador por modismo é custo sem retorno. Escolheria pip e venv para aprender e para ambientes restritos em que só o Python do sistema está disponível: o que você aprende ali serve em todo o resto. Escolheria pyenv se eu precisasse de uma compilação específica do Python. Escolheria pipx para ferramentas globais em máquinas onde o uv não está disponível.
Editor
O VS Code com a extensão Python da Microsoft resolve a maior parte dos casos. Depois de abrir a pasta do projeto, escolha o interpretador pelo comando Python: Select Interpreter (a paleta de comandos abre com Ctrl+Shift+P, ou Cmd+Shift+P no macOS) e aponte para o .venv do projeto. O PyCharm é uma alternativa completa se você prefere um IDE.
Cuidado com a extensão Code Runner
Por padrão, o Code Runner executa o arquivo no painel Output do VS Code, que não aceita digitação. Os exemplos com
input()ficam parados ou falham ali. Rode no terminal integrado (python3 arquivo.py) ou use o botão Run Python File da extensão oficial.
A estrutura mínima de um projeto
meu-projeto/
pyproject.toml
README.md
.python-version
.gitignore
src/
meu_projeto/
__init__.py
__main__.py
tests/
test_basico.py
Todo ponto de entrada deve poder ser importado sem executar nada. O padrão é um main() protegido:
def main() -> None:
print("projeto funcionando")
if __name__ == "__main__":
main()
projeto funcionando
Explico o motivo dessa proteção no capítulo de módulos.
Exercício 1
Monte o seu ambiente de trabalho
Crie uma pasta meu-primeiro-projeto, fixe o Python 3.13, crie o ambiente, instale requests e confirme dentro do Python que o ambiente está ativo.