← Stack web // stack web · back end · linguagem e plataforma

Python: do script ao servidor

Um arquivo de texto com três linhas dentro já é um programa em Python que roda. O mesmo comando que executa esse arquivo sobe um servidor HTTP na sua máquina, sem instalar pacote nenhum. As duas coisas cabem nos dez minutos desta página.

O que o Python resolve

Boa parte do trabalho de servidor é curta: ler um arquivo, chamar uma API de fora, transformar o dado e devolver uma resposta. Quando a linguagem exige criar projeto, escolher template, rodar build e mexer em arquivo de configuração antes da primeira linha, você gasta mais tempo montando o andaime do que resolvendo o problema. Em Python o arquivo com o código já é o programa, e rodar é um comando com o nome do arquivo.

A segunda dor aparece depois. O script que você escreveu pra resolver uma coisa sua costuma morrer quando outras pessoas precisam usar aquilo, porque virar serviço significa reescrever tudo em outro lugar. Em Python o caminho é contínuo. A mesma função que você chamou no terminal passa a ser chamada por um framework web, e depois roda atrás de um endereço público, com a lógica intacta no meio.

Os conceitos que você precisa antes da primeira linha

  • Interpretador e o nome do comando. O programa que lê seu arquivo e executa linha a linha chama interpretador. No Linux e no macOS ele atende por python3. No Windows a documentação oficial usa o comando py, que escolhe entre as versões instaladas na máquina. O comando python, sem o 3, pode não existir ou apontar pra outra coisa.
  • A indentação faz parte da sintaxe. Na maioria das linguagens o recuo serve pra leitura humana e o que delimita bloco é a chave. Em Python o recuo é o bloco. Misturar quatro espaços com três dentro do mesmo trecho quebra o programa antes de ele começar, com um erro chamado IndentationError.
  • Módulo e a opção -m. Todo arquivo .py é um módulo. A opção -m manda o interpretador executar um módulo pelo nome dele, em vez de por caminho de arquivo. É assim que o servidor do passo 6 sobe, e é o mesmo mecanismo que roda várias ferramentas que vieram junto com o Python.
  • Biblioteca padrão. A instalação já traz um conjunto grande de módulos prontos: leitura de arquivo, JSON, data e hora, cliente HTTP e um servidor HTTP simples, entre muitos outros. Um programa que só usa esses módulos roda em qualquer máquina com Python, sem instalar nada por fora.
  • Ambiente virtual e pip. Quando o projeto precisar de código de terceiros, o pip baixa do PyPI e o comando python3 -m venv .venv cria uma pasta isolada pra guardar essas dependências, ativada com source .venv/bin/activate. O passo a passo abaixo não usa nenhum dos dois, de propósito.

A linguagem por dentro: tipos, funções e objetos

Python tem tipagem dinâmica e forte: você não declara tipo, mas o interpretador não converte por conta própria. Somar texto com número dá TypeError na hora, em vez de um resultado esquisito. E tudo é objeto: até um número inteiro tem métodos.

  • Os tipos do dia a dia: int, float, str, bool (True/False com maiúscula), None pro vazio, list pra sequência que muda, tuple pra sequência que não muda e dict pra pares chave-valor.
  • Função se declara com def e aceita argumento com nome na chamada: enviar(destino, copia=True) se lê sozinho seis meses depois.
  • Orientação a objetos: class define o molde, __init__ é o construtor e self é o próprio objeto, escrito explicitamente como primeiro parâmetro de cada método. Herança é class Filha(Mae).
# tipos, função e classe em doze linhas
precos = [12.5, 30, 7]                  # list
total = sum(precos)

def formata(valor):                     # função
    return f"R$ {valor:.2f}"            # f-string

class Carrinho:                         # orientação a objetos
    def __init__(self):
        self.itens = []
    def add(self, item):
        self.itens.append(item)

print(formata(total))                   # R$ 49.50

Repare no que não existe: chave, ponto e vírgula, tipo declarado. O recuo delimita os blocos, como a seção anterior explicou.

Hello world: um script que imprime e um servidor que responde

Tudo roda no terminal, em Linux, macOS ou Windows. A versão estável em vigor é a 3.14.7, publicada em 05/08/2026, e qualquer 3.x recente serve pro que vem abaixo.

  1. Confira o interpretador que você tem:

    python3 --version

    A resposta tem que ser um número começando em 3. No Windows, troque python3 por py em todos os comandos desta página. Se o terminal disser que o comando não existe, instale pela página oficial de download antes de seguir.

  2. Crie uma pasta pro exercício e entre nela. Isso importa porque o servidor do passo 6 entrega os arquivos da pasta em que você estiver:

    mkdir ola-python
    cd ola-python
  3. Num editor de texto, crie o arquivo ola.py dentro dessa pasta, com este conteúdo:

    nome = "mundo"
    print(f"Olá, {nome}")
    
    for n in range(1, 4):
        print(f"linha {n}")

    Os quatro espaços antes do segundo print são o que coloca ele dentro do laço. Sem esse recuo o programa não roda.

  4. Rode o script:

    python3 ola.py
  5. Na mesma pasta, crie o arquivo index.html, pro servidor ter o que entregar na raiz:

    <!DOCTYPE html>
    <html lang="pt-BR">
      <head><meta charset="UTF-8" /><title>Servido pelo Python</title></head>
      <body><h1>Esta página saiu de um servidor Python</h1></body>
    </html>
  6. Suba o servidor da biblioteca padrão:

    python3 -m http.server 8000 --bind 127.0.0.1

    O 8000 é a porta, que já seria o padrão. O --bind 127.0.0.1 prende o servidor à sua própria máquina, e vale escrever ele sempre: sem essa opção o padrão documentado é atender por todas as interfaces de rede, o que expõe a pasta pra quem estiver na mesma rede que você.

  7. Com o servidor de pé, abra http://127.0.0.1:8000/ no navegador.

  8. Pra encerrar, volte na janela do servidor e aperte Ctrl + C.

A prova de que funcionou. São duas provas, uma por metade do exercício. No passo 4, o terminal imprime quatro linhas, Olá, mundo seguido de linha 1, linha 2 e linha 3, e devolve o prompt logo depois. Se aparecer IndentationError, o recuo antes do segundo print está errado, e é só isso. No passo 6, a janela mostra Serving HTTP on 127.0.0.1 port 8000 (http://127.0.0.1:8000/) ... e o prompt fica parado, sem voltar. Prompt travado é o sinal certo aqui: o processo está de pé, esperando pedido. No navegador, o endereço mostra "Esta página saiu de um servidor Python" em corpo grande, e a aba mostra "Servido pelo Python". Volte na janela do servidor e você vai ver uma linha nova de registro, no formato 127.0.0.1 - - [data] "GET / HTTP/1.1" 200 -. Esse 200 é o servidor dizendo que achou e entregou o arquivo. Se o navegador acusar falha de conexão, olhe a janela do servidor: com a porta 8000 já ocupada por outro programa, o Python reclama na hora de subir e o processo morre. Troque o número por 8001 e rode de novo.

O que o Python não é

O http.server do passo 6 não serve pra colocar site no ar. A documentação oficial abre a página desse módulo com um aviso: ele não é recomendado para produção, e implementa apenas verificações básicas de segurança. Ele existe pra você conferir arquivo estático na sua máquina enquanto desenvolve, e é ótimo nisso. Publicar com ele é o erro clássico de quem viu o comando funcionar e achou que estava pronto.

A confusão maior é achar que o Python traz framework web dentro. A biblioteca padrão vai até esse servidor simples e até o wsgiref, que a própria documentação marca como implementação de referência fora de produção. Aplicação web em Python usa framework instalado à parte, com Django, Flask e FastAPI entre os nomes mais usados, e o encaixe entre framework e servidor tem um padrão com nome próprio, o WSGI, definido na PEP 3333. Escolher esse framework é o passo seguinte, depois que o servidor da biblioteca padrão já respondeu na sua tela.

Fontes

Rodamos este hello world na nossa máquina em 15/08/2026, num Linux com Python 3.14.4. O python3 ola.py imprimiu as quatro linhas descritas acima. O python3 -m http.server 8000 --bind 127.0.0.1 subiu com a mensagem Serving HTTP on 127.0.0.1 port 8000, devolveu HTTP/1.0 200 OK com o cabeçalho Server: SimpleHTTP/0.6 Python/3.14.4 e entregou o index.html inteiro, e a janela do servidor registrou a linha "GET / HTTP/1.1" 200 -.

Para continuar

Do lado do back end, a linguagem é escolha. Node.js resolve o mesmo problema com o JavaScript que você já usa no navegador, e também sobe um servidor com o que vem na instalação. PHP chega por outro caminho, montando a página dentro do servidor a cada pedido que o navegador faz. Os três estão lado a lado no mapa da stack web, junto do resto da trilha.

O curso desta trilha está em preparação. A lista paga menos.

Os tutoriais daqui continuam gratuitos. O que está a caminho é um curso pago que transforma esse mapa em formação guiada, na ordem certa e com projeto. Deixe seu e-mail: você recebe os estudos novos gratuitos e, no lançamento, o desconto de quem entrou na lista primeiro.