Article image
Antonio Guedes
Antonio Guedes20/03/2026 01:33
Compartilhe

Automatizando Ambientes Virtuais Python: Como Parei de Perder Tempo Todos os Dias

    Trabalho remotamente e, por questões de segurança, preciso utilizar um sistema operacional separado para o trabalho.

    Na prática, isso significa:

    👉 Um sistema para trabalhar<br>

    👉 Outro sistema para estudar e desenvolver 

    Até aí tudo bem.

    O problema começou quando precisei manter meus projetos Python funcionando nos dois ambientes.

    Sempre que mudava de sistema, lá vinha o ritual:

    • Criar ambiente virtual 
    • Atualizar o pip 
    • Instalar dependências 

    De novo. E de novo. E de novo.

    Simples… mas extremamente repetitivo.

    E como todo desenvolvedor que começa a sentir dor repetitiva, eu pensei:

    "Por que não automatizar isso?"

    ---

    A Ideia

    Ao invés de criar ambientes manualmente toda vez, pensei:

    “E se um script resolvesse tudo isso pra mim?”

    Objetivo:

    • Detectar se o ambiente virtual existe
    • Verificar se está saudável
    • Criar novamente se necessário
    • Atualizar pip
    • Instalar dependências automaticamente

    ---

    Primeiro Passo: Localização do Projeto

    Usei `pathlib` para trabalhar com caminhos de forma mais limpa:

    from pathlib import Path
    
    ROOT_PATH = Path(__file__).resolve().parent.parent
    venv_path = ROOT_PATH / "venv"
    

    Lidando com Diferenças de Sistema Operacional

    Aqui veio um ponto importante:

    • Windows → Scripts/python.exe
    • Linux/Mac → bin/python
    import os
    
    def get_venv_python() -> Path:
    if os.name == 'nt':
      return venv_path / "Scripts" / "python.exe"
    return venv_path / "bin" / "python"
    

    Mesma lógica para o pip:

    import os
    
    def get_venv_pip() -> Path:
    if os.name == 'nt':
      return venv_path / "Scripts" / "pip.exe"
    return venv_path / "bin" / "pip"
    

    Verificando se o Ambiente Está Saudável

    Aqui entra um conceito muito importante: usar subprocessos

    import subprocess
    
    def is_venv_healthy() -> bool:
    python = get_venv_python()
    
    if not python.exists():
      return False
    
    try:
      result = subprocess.run(
        [str(python), "--version"],
        capture_output=True,
        timeout=10,
      )
      return result.returncode == 0
    except (OSError, subprocess.TimeoutExpired):
      return False
    

    💡 Se returncode == 0, deu certo.

    Se não, o ambiente está quebrado.

    Criando o Ambiente Automaticamente

    import shutil
    import sys
    
    def create_venv():
    if venv_path.exists():
      print("⚠️ Venv corrompido ou desatualizado. Removendo...")
      shutil.rmtree(venv_path)
    
    print("🔧 Criando ambiente virtual...")
    subprocess.run([sys.executable, "-m", "venv", str(venv_path)], check=True)
    
    python_venv = str(get_venv_python())
    
    subprocess.run([python_venv, "-m", "pip", "install", "--upgrade", "pip"], check=True)
    
    requirements = ROOT_PATH / "requirements.txt"
    
    if requirements.exists():
      subprocess.run(
        [python_venv, "-m", "pip", "install", "-r", str(requirements)],
        check=True
      )
      print("✅ Dependências instaladas.")
    else:
      print("⚠️ requirements.txt não encontrado.")
    

    ```

    Fluxo Principal

    if __name__ == "__main__":
    if is_venv_healthy():
      python = get_venv_python()
      print(f"✅ Venv saudável: {python}")
    else:
      print("🚧 Venv ausente ou corrompido.")
      create_venv()
    

    Por Que Não Ativar Automaticamente?

    Aqui entra uma limitação interessante:

    Tentei ativar o ambiente virtual via script… e não funcionou.

    E o motivo é simples:

    Ativar ambiente virtual muda o contexto do terminal, não do subprocesso.

    Ou seja, o script não consegue “entrar” no shell atual.

    Então optei por algo mais simples e confiável:

    if os.name == "nt":
    activate_cmd = str(venv_path / "Scripts" / "Activate.ps1")
    print(f"\n💡 Execute:\n . '{activate_cmd}'")
    else:
    activate_cmd = str(venv_path / "bin" / "activate")
    print(f"\n💡 Execute:\n source '{activate_cmd}'")
    

    Resultado

    Hoje, com um único comando:

    python activate_create_virtual.py
    

    Eu tenho:

    ✅ Ambiente verificado<br>

    ✅ Pip atualizado<br>

    ✅ Dependências instaladas<br>

    E o melhor:

    Economizo pelo menos 15 minutos por dia.

    O Ponto Principal

    Isso aqui não é sobre virtualenv.

    É sobre perceber padrões repetitivos e fazer algo a respeito.

    Não é sobre Python
    É sobre quebrar padrões mentais.

    E Você?

    Tem alguma tarefa repetitiva que você faz todos os dias?

    Talvez seja aí que esteja sua próxima automação.

    Me conta 👇

    Compartilhe
    Comentários (0)