Python 3.15 chega com imports preguiçosos e profiler de amostragem

Python 3.15 chega com imports preguiçosos e profiler de amostragem

Em 12 de outubro de 2026, Simon Willison publicou em seu blog uma leitura detalhada da chegada do Python 3.15, versão já liberada para download no site oficial da linguagem. O autor, que mantém projetos de código aberto compatíveis com todas as versões suportadas do interpretador, descreve a novidade como um marco duplo: é hora de dizer adeus ao Python 3.10 e começar a abraçar recursos que surgiram no Python 3.11.

O guia oficial de novidades desta versão foi curado por Hugo van Kemenade, release manager das séries 3.14 e 3.15.

Imports preguiçosos contra o custo de partida

O recurso que mais entusiasma Willison são os imports preguiçosos explícitos, definidos pela PEP 810. Com a sintaxe lazy from pathlib import Path, o módulo só é carregado na primeira vez que um de seus símbolos é usado no código que vem depois.

A motivação é prática: sua ferramenta de linha de comando LLM trabalha com plugins, e instalar plugins que dependem de bibliotecas pesadas, como sentence_transformers, podia acrescentar vários segundos a cada execução do comando LLM. A documentação para autores de plugins precisava recomendar imports preguiçosos manuais justamente para evitar esse custo de inicialização.

Agora o próprio interpretador resolve o problema.

Unpacking em comprehensions e um profiler de amostragem

Outra novidade destacada é a sintaxe de unpacking em comprehensions, [*sublist for sublist in lists], proposta pela PEP 798, de autoria de Adam Hartz e Erik Demaine. Ela estende o mecanismo de unpacking da PEP 448, que chegou ao Python 3.5 em 2015.

Na prática, listas, conjuntos e dicionários podem ser achatados em uma única expressão. Na área de diagnóstico, o antigo cProfile foi renomeado para profiling.tracing e ganhou um companheiro: o profiler estatístico Tachyon, disponível como profiling.sampling.

Ele funciona capturando periodicamente stack traces de processos em execução e calculando em quais funções o tempo é mais gasto, com sobrecarga baixa e sem exigir instrumentação prévia do sistema. Willison conta que antes recorria a ferramentas externas como o py-spy; agora o recurso faz parte da biblioteca padrão.

Com o PID de um processo 3.15, basta rodar sudo uv run --Python 3.15 Python -m profiling.sampling attach 1234, interagir com o programa e encerrar com Ctrl+C para ver o relatório, que também pode sair em flame graphs, heat maps ou no formato do profiler do Firefox.

Desempenho praticamente estável

Nem tudo é ganho de velocidade. Miguel Grinberg investigou o desempenho do Python 3.15 tomando como base a release candidate 3.15.0rc3 e concluiu que a performance é em grande parte igual à do Python 3.14, com exceção do JIT experimental. O JIT entregou um ganho de 1,2 vez sobre o interpretador padrão da 3.15 em um teste com a sequência de Fibonacci, a primeira vez que Miguel observa um aumento de desempenho relevante vindo do JIT.

No ano anterior, seus testes com o Python 3.14 haviam mostrado ganhos expressivos em relação ao Python 3.13 em um número maior de categorias.

Como migrar com uv

Willison documenta o roteiro que usou no Mac para colocar o uv na versão 3.15. Primeiro, atualizou o próprio uv para que ele reconhecesse o lançamento; em seguida instalou a versão estável e definiu o padrão global com uv Python pin --global 3.15, válido para todo comando uv run, a menos que o projeto fixe outra versão.

Ferramentas instaladas via uv tool install foram reinstaladas com uv tool upgrade datasette --Python 3.15, e a confirmação veio pelo comando datasette --get /-/versions.json | jq.

Por que isso importa

Para quem distribui bibliotecas e sustenta ecossistema, o ciclo de vida do Python define decisões práticas: deixar a 3.10 para trás libera o uso de recursos da 3.11, e adotar a nova versão estável abre espaço para imports preguiçosos e diagnóstico embutido. O saldo é menos dependência de ferramentas externas de profiling e um caminho mais simples para reduzir o tempo de inicialização de aplicações, um problema sentido por qualquer CLI que carregue dependências pesadas de IA.

Fontes e links

Matéria publicada originalmente em Simon Willison

Últimas Notícias

GitHub ensina a dar contexto ao Copilot em quatro frentes
GPT-6 Sol, Luna e Astra chegam ao Bedrock em cinco regiões da Ásia
Meta lança Muse Wonder, seu primeiro modelo de fronteira
Python 3.15 chega com imports preguiçosos e profiler de amostragem