Olá Python 3.15, adeus 3.10 e agora posso usar 3.11

Olá Python 3.15, adeus 3.10 e agora posso usar 3.11

12 de outubro de 2026

Python 3.15 está aqui! Aqui está o guia essencial de Novidades no Python 3.15, este ano com curadoria do gerente de lançamento 3.14 e 3.15, Hugo van Kemenade. Como alguém que cria software de código aberto que funciona em todas as versões suportadas do Python, posso dizer adeus ao Python 3.10 e começar a adotar os recursos do Python 3.11.

Primeiro, alguns destaques do Python 3.15.

Importações preguiçosas explícitas

Estou muito entusiasmado com as importações lentas explícitas do PEP 810. Elas permitem importar módulos da seguinte forma:

lazy import json
lazy from pathlib import Path

O módulo será então importado na primeira vez que esses símbolos forem usados ​​no código a seguir.

Minha ferramenta LLM CLI implementa plug-ins. Eu tive que recomendar importações preguiçosas manuais na documentação do autor do plugin, porque simplesmente instalar plugins que usavam dependências pesadas, como sentence_transformers poderia adicionar vários segundos a cada invocação do llm comando. As importações lentas abordam diretamente esse custo inicial.

Descompactando em compreensões

O novo (*sublist for sublist in lists) a sintaxe de descompactação é legal. Aqui está uma ilustração retirada da documentação:

lists = ((1, 2), (3, 4), (5))
(*L for L in lists)
# (1, 2, 3, 4, 5)
# equivalent to (x for L in lists for x in L)

sets = ({1, 2}, {2, 3}, {3, 4})
{*s for s in sets}
# {1, 2, 3, 4}
# equivalent to {x for s in sets for x in s}

dicts = ({'a': 1}, {'b': 2}, {'a': 3})
{**d for d in dicts}
# {'a': 3, 'b': 2}
# equivalent to {k: v for d in dicts for k,v in d.items()}

PEP 798: Unpacking in Comprehensions de Adam Hartz e Erik Demaine propôs isso como uma extensão da sintaxe de descompactação do PEP 448, que chegou ao Python 3.5 em 2015.

Um perfilador de amostragem

O traçador de perfil existente do Python foi renomeado de cProfile para profiling.tracing, e foi acompanhado por um novo e interessante criador de perfil de amostragem chamado Tachyon, também conhecido como profiling.sampling.

Os criadores de perfil de amostragem funcionam capturando periodicamente rastreamentos de pilha de processos em execução e, em seguida, usando-os para calcular quais funções passam mais tempo dentro deles. Eles têm uma sobrecarga muito baixa e podem fornecer uma visão profunda dos sistemas em execução, sem a necessidade de instrumentar esses sistemas primeiro.

Já usei ferramentas como py-spy para isso. Agora, esse recurso está incluído na biblioteca padrão.

Se você tiver o PID de um processo existente do Python 3.15, poderá começar a coletar amostras executando isto (tive que usar sudo no macOS):

sudo uv run --python 3.15 python -m profiling.sampling attach 1234

Interaja um pouco com o programa principal e pressione Ctrl + C para interromper a coleta e ver um relatório semelhante a este:

Olá Python 3.15, adeus 3.10 e agora posso usar 3.11

Ele também pode produzir gráficos em degradê como este e mapas de calor como este, e pode até gerar um formato que pode ser visualizado na IU do criador de perfil do Firefox.

3.15 não é muito mais rápido que 3.14

Miguel Grinberg investigou quão rápido é o Python 3.15? outro dia em relação à versão 3.15.0rc3 e descobri que o desempenho era praticamente igual ao 3.14, com exceção do JIT experimental. O JIT deu um aumento de 1,2x em relação ao interpretador padrão 3,15 (em um teste de Fibonacci), sendo a primeira vez que Miguel observou um aumento significativo no desempenho do JIT.

As explorações de Miguel do 3.14 no ano passado encontraram aumentos significativos em relação ao Python 3.13 em muitas outras categorias.

Atualizando para Python 3.15 com UV

Usei a seguinte sequência de comandos para obter uv para usar Python 3.15 no meu Mac. Primeiro eu tive que atualizar uv para garantir que sabia sobre o novo lançamento:

Então instalei a versão estável 3.15:

E disse uv que eu queria que isso fosse o padrão para todos uv run comando, a menos que o próprio projeto fixe uma versão diferente:

uv python pin --global 3.15

Agora o seguinte reporta 3.15 como versão:

Eu já tenho um monte de ferramentas instaladas usando uv tool install. Eu os reinstalei para usar o Python 3.15 assim:

uv tool upgrade datasette --python 3.15

Então posso confirmar a versão assim:

datasette --get /-/versions.json | jq

Destaques do Python 3.11

O lançamento do 3.15 significa que o Python 3.10 (lançado em 2021) não é mais suportado oficialmente.

Minha política para meus principais projetos de código aberto é mantê-los funcionando em todas as versões suportadas do Python. Agora posso abandonar o 3.10 e começar a usar os recursos que foram introduzidos no 3.11.

Aqui está o documento Novidades no Python 3.11. Finalmente posso contar com a disponibilidade do tomllib!

Datasette faz uso extensivo de asyncio. 3.11 adiciona TaskGroup e timeout() e vários outros recursos novos.

datetime.UTC é um novo alias no 3.11 para datetime.timezone.utc.

O suporte SQLite do Python recebeu algumas atualizações significativas na versão 3.11, incluindo:

  • setlimit() e getlimit() expõem um mecanismo para definir limites de tempo de execução SQLite do Python.

  • create_window_function() nos permite criar funções de janela personalizadas em Python, como uma classe com step(), value(), inverse()e finalize() métodos.

  • blobopen() fornece um mecanismo eficiente para leituras e gravações parciais de grandes BLOB valores binários armazenados em uma linha SQLite.

  • Agora você pode ligar set_authorizer(None) para remover um autorizador SQLite. O Datasette tinha uma solução alternativa para isso!

Além de um monte de melhorias no sistema de digitação do Python.

Pretendo implementar melhorias do Python 3.11 em vários dos meus projetos nas próximas semanas. Aqui está meu primeiro PR do Datasette removendo isso set_authorizer(None) solução alternativa.

Também atualizei meus modelos click-app, datasette-plugin, python-lib e llm-plugin cookiecutter para testar em Python 3.11 até Python 3.15.

Source link

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

Botão Voltar ao Topo