O que há de novo no Python 3.13
*******************************

Editor:
   Thomas Wouters

Esse artigo explica os novos recursos no Python 3.13, comparado ao
3.12.

Para detalhes completos, veja o changelog.

Ver também: **PEP 719** -- Agendamento de lançamento do Python 3.13

Nota:

  Os usuários de pré-lançamento devem estar cientes de que este
  documento está atualmente em forma de rascunho. Ele será atualizado
  substancialmente à medida que o Python 3.13 caminha para seu
  lançamento estável, portanto vale a pena conferir mesmo depois de
  ler as versões anteriores.


Resumo -- Destaques da versão
=============================

Python 3.13 beta é o pré-lançamento da próxima versão da linguagem de
programação Python, com uma mistura de mudanças na linguagem, na
implementação e na biblioteca padrão. As maiores mudanças na
implementação incluem um novo interpretador interativo e suporte
experimental para eliminar a trava global do interpretador (**PEP
703**) e um compilador Just-In-Time (**PEP 744**). As alterações da
biblioteca contêm a remoção de APIs e módulos descontinuados, bem como
as melhorias usuais na facilidade de uso e correção.

Melhorias no interpretador:

* Um interpretador interativo bastante aprimorado e mensagens de erro
  aprimoradas.

* Suporte de cores no novo interpretador interativo, bem como na saída
  de tracebacks e de doctest. Isso pode ser desabilitado através das
  variáveis de ambiente "PYTHON_COLORS" e "NO_COLOR".

* **PEP 744**: Um compilador JIT básico foi adicionado. Atualmente
  está desativado por padrão (embora possamos ativá-lo mais tarde). As
  melhorias de desempenho são modestas -- esperamos melhorar isso nas
  próximas versões.

* **PEP 667**: A função embutida "locals()" agora tem semântica
  definida ao fazer a mutação do mapeamento retornado. Os depuradores
  do Python e ferramentas semelhantes agora podem atualizar variáveis
  locais de maneira mais confiável em escopos otimizados, mesmo
  durante a execução simultânea de código.

Novos recursos de tipagem:

* **PEP 696**: Parâmetros de tipo ("typing.TypeVar",
  "typing.ParamSpec" e "typing.TypeVarTuple") agora oferecem suporte a
  padrões.

* **PEP 702**: Suporte para marcação de descontinuações no sistema de
  tipos usando o novo decorador "warnings.deprecated()".

* **PEP 742**: "typing.TypeIs" foi adicionado, fornecendo um
  comportamento de restrição de tipo mais intuitivo.

* **PEP 705**: "typing.ReadOnly" foi adicionado, para marcar um item
  de "typing.TypedDict" como somente leitura para verificadores de
  tipo.

Threads livres:

* **PEP 703**: CPython 3.13 tem suporte experimental para ser
  executado com a *trava global do interpretador*, ou GIL,
  desabilitada quando compilado com "--disable-gil". Veja CPython com
  threads livres para mais detalhes.

Suporte a plataforma:

* **PEP 730**: O iOS da Apple agora é uma plataforma com suporte
  oficial. O suporte oficial do Android (**PEP 738**) também está em
  andamento.

Módulos removidos:

* PEP 594: As 19 "baterias descarregadas" restantes foram removidas da
  biblioteca padrão: "aifc", "audioop", "cgi", "cgitb", "chunk",
  "crypt", "imghdr", "mailcap", "msilib", "nis", "nntplib",
  "ossaudiodev", "pipes", "sndhdr", "spwd", "sunau", "telnetlib", "uu"
  e "xdrlib".

* Também foram removidos os módulos "tkinter.tix" e "lib2to3", e o
  programa "2to3".

Mudanças no cronograma de lançamento:

* **PEP 602** ("Ciclo de lançamento anual para Python") foi
  atualizado:

  * Python 3.9 até 3.12 tem um ano e meio de suporte total, seguido de
    três anos e meio de correções de segurança.

  * Python 3.13 e posteriores têm dois anos de suporte total, seguidos
    de três anos de correções de segurança.


Novas funcionalidades
=====================


Um interpretador interativo melhor
----------------------------------

Em sistemas do tipo Unix, como Linux ou macOS, vem como Windows,
Python agora usa um novo console *interativo*. Quando o usuário inicia
o *REPL*, a partir de um terminal interativo, o console interativo
agora oferece suporte aos seguintes novos recursos:

* Prompts coloridos.

* Edição multilinha com preservação do histórico.

* Ajuda interativa para navegar usando "F1" com um histórico de
  comandos separado.

* Navegação no histórico usando "F2" que ignora a saída, bem como os
  prompts *>>>* e *...*.

* "Modo de colagem" com "F3" que facilita colar blocos maiores de
  código (pressione "F3" novamente para retornar ao prompt normal).

* A capacidade de emitir comandos específicos do REPL como "help",
  "exit" e "quit" sem a necessidade de usar parênteses de chamada após
  o nome do comando.

Se o novo console interativo não for desejado, ele pode ser
desabilitado através da variável de ambiente "PYTHON_BASIC_REPL".

O novo console requer "curses" em sistemas do tipo Unix.

Para mais informações sobre o modo interativo, veja Modo interativo.

(Contribuição de Pablo Galindo Salgado, Łukasz Langa e Lysandros
Nikolaou em gh-111201 baseado no código do projeto PyPy. Suporte ao
Windows foi uma contribuição de Dino Viehland e Anthony Shaw.)


Mensagens de erro melhoradas
----------------------------

* O interpretador agora colore mensagens de erro ao exibir
  rastreamentos por padrão. Este recurso pode ser controlado através
  da nova variável de ambiente "PYTHON_COLORS", bem como das variáveis
  de ambiente canônicas "NO_COLOR" e "FORCE_COLOR". Veja também
  Controlando cores. (Contribuição de Pablo Galindo Salgado em
  gh-112730.)

* Um erro comum é escrever um script com o mesmo nome de um módulo de
  biblioteca padrão. Quando isso resulta em erros, agora exibimos uma
  mensagem de erro mais útil:

     $ python random.py
     Traceback (most recent call last):
       File "/home/random.py", line 1, in <module>
         import random; print(random.randint(5))
         ^^^^^^^^^^^^^
       File "/home/random.py", line 1, in <module>
         import random; print(random.randint(5))
                             ^^^^^^^^^^^^^^
     AttributeError: module 'random' has no attribute 'randint' (consider renaming '/home/random.py' since it has the same name as the standard library module named 'random' and the import system gives it precedence)

  Da mesma forma, se um script tiver o mesmo nome de um módulo de
  terceiros que ele tentar importar e isso resultar em erros, também
  exibiremos uma mensagem de erro mais útil:

     $ python numpy.py
     Traceback (most recent call last):
       File "/home/numpy.py", line 1, in <module>
         import numpy as np; np.array([1,2,3])
         ^^^^^^^^^^^^^^^^^^
       File "/home/numpy.py", line 1, in <module>
         import numpy as np; np.array([1,2,3])
                             ^^^^^^^^
     AttributeError: module 'numpy' has no attribute 'array' (consider renaming '/home/numpy.py' if it has the same name as a third-party module you intended to import)

  (Contribuição de Shantanu Jain em gh-95754.)

* Quando um argumento nomeado incorreto é passado para uma função, a
  mensagem de erro agora sugere potencialmente o argumento nomeado
  correto. (Contribuição de Pablo Galindo Salgado e Shantanu Jain em
  gh-107944.)

  >>> "better error messages!".split(max_split=1)
  Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
      "better error messages!".split(max_split=1)
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
  TypeError: split() got an unexpected keyword argument 'max_split'. Did you mean 'maxsplit'?

* As classes possuem um novo atributo "__static_attributes__",
  preenchido pelo compilador, com uma tupla de nomes de atributos
  desta classe que são acessados através de "self.X" a partir de
  qualquer função em seu corpo. (Contribuição de Irit Katriel em
  gh-115775.)


Semântica de mutação definida para "locals()"
---------------------------------------------

Historicamente, o resultado esperado da mutação do valor de retorno de
"locals()" foi deixado para implementação individual do Python
definir.

Através de **PEP 667**, Python 3.13 padroniza o comportamento
histórico do CPython para a maioria dos escopos de execução de código,
mas altera *escopos otimizados* (funções, geradores, corrotinas,
compreensões e expressões geradoras) para retornar explicitamente
instantâneos independentes das variáveis ​​locais atualmente
atribuídas, incluindo variáveis ​​não locais referenciadas localmente
capturadas em encerramentos.

Esta mudança na semântica de "locals()" em escopos otimizados também
afeta o comportamento padrão das funções de execução de código que
visam implicitamente "locals()" se nenhum espaço de nomes explícito
for fornecido (como "exec()" e "eval()"). Nas versões anteriores, se
as alterações podiam ou não ser acessadas chamando "locals()" após
chamar a função de execução de código dependia da implementação.
Especificamente no CPython, esse código normalmente parece funcionar
conforme desejado, mas às vezes pode falhar em escopos otimizados com
base em outro código (incluindo depuradores e ferramentas de
rastreamento de execução de código), redefinindo potencialmente o
instantâneo compartilhado nesse escopo. Agora, o código sempre será
executado em um instantâneo independente das variáveis ​​locais em
escopos otimizados e, portanto, as alterações nunca serão visíveis em
chamadas subsequentes para "locals()". Para acessar as alterações
feitas nesses casos, uma referência explícita de namespace deve agora
ser passada para a função relevante. Alternativamente, pode fazer
sentido atualizar o código afetado para usar uma API de execução de
código de nível superior que retorne o namespace de execução de código
resultante (por exemplo, "runpy.run_path()" ao executar arquivos
Python do disco).

Para garantir que depuradores e ferramentas semelhantes possam
atualizar de forma confiável variáveis ​​locais em escopos afetados
por esta mudança, "FrameType.f_locals" agora retorna um proxy write-
through para as variáveis ​​locais e não locais referenciadas
localmente do quadro nesses escopos, em vez de retornar uma instância
"dict" compartilhada atualizada inconsistentemente com semântica de
tempo de execução indefinida.

Veja **PEP 667** para mais detalhes, incluindo alterações e
descontinuações relacionadas à API C. Notas de portabilidade também
são fornecidas abaixo para as APIs de Python e as APIs de C afetadas.

(PEP e implementação são contribuição de Mark Shannon e Tian Gao em
gh-74929. Atualizações da documentação fornecidas por Guido van Rossum
e Alyssa Coghlan.)


Coleta de lixo incremental
--------------------------

* O coletor de lixo do ciclo agora é incremental. Isso significa que
  os tempos máximos de pausa são reduzidos em uma ordem de magnitude
  ou mais para heaps maiores.


Suporte para plataformas móveis
-------------------------------

* iOS agora é uma plataforma suportada por **PEP 11**. "arm64-apple-
  ios" (dispositivos iPhone e iPad lançados após 2013) e "arm64-apple-
  ios-simulator" (simulador Xcode iOS rodando em hardware Apple
  Silicon) são agora plataformas de nível 3.

  "x86_64-apple-ios-simulator" (simulador Xcode iOS rodando em
  hardware x86_64 mais antigo) não é uma plataforma suportada de nível
  3, mas será suportada na base do melhor esforço.

  Veja **PEP 730**: para mais detalhes.

  (Escrita e implementação da PEP foi uma contribuição de Russell
  Keith-Magee em gh-114099.)


Compilador JIT experimental
===========================

Quando o CPython é configurado usando a opção "--enable-experimental-
jit", um compilador just-in-time é adicionado o que pode acelerar
alguns programas Python.

A arquitetura interna é aproximadamente a seguinte.

* Começamos com especializado *bytecode de Tier 1*. Veja O que há de
  novo no 3.11 para detalhes.

* Quando o bytecode Tier 1 fica quente o suficiente, ele é traduzido
  para um novo *Tier 2 IR* puramente interno, também conhecido como
  micro-ops ("uops").

* O IR Tier 2 usa a mesma VM baseada em pilha que o Tier 1, mas o
  formato de instrução é mais adequado para tradução em código de
  máquina.

* Temos vários passes de otimização para IR Tier 2, que são aplicados
  antes de serem interpretados ou traduzidos em código de máquina.

* Existe um interpretador de Tier 2, mas ele se destina principalmente
  à depuração dos estágios iniciais do pipeline de otimização. O
  interpretador Tier 2 pode ser habilitado configurando o Python com "
  --enable-experimental-jit=interpreter".

* Quando o JIT está habilitado, o IR Tier 2 otimizado é traduzido em
  código de máquina, que é então executado.

* O processo de tradução de código de máquina usa uma técnica chamada
  *copiar e corrigir*. Não possui dependências de tempo de execução,
  mas há uma nova dependência de tempo de construção no LLVM.

O sinalizador "--enable-experimental-jit" tem os seguintes valores
opcionais:

* "no" (padrão) -- Desativa todo o pipeline de Tier 2 e JIT.

* "yes" (padrão se o sinalizador estiver presente sem valor opcional)
  -- Habilita o JIT. Para desabilitar o JIT em tempo de execução,
  passe a variável de ambiente "PYTHON_JIT=0".

* "yes-off" -- Constrói o JIT, mas desabilita-o por padrão. Para
  habilitar o JIT em tempo de execução, passe a variável de ambiente
  "PYTHON_JIT=1".

* "interpreter" -- Habilita o interpretador Tier 2, mas desabilita o
  JIT. O interpretador pode ser desabilitado executando com
  "PYTHON_JIT=0".

(No Windows, use "PCbuild/build.bat --experimental-jit" para habilitar
o JIT ou "--experimental-jit-interpreter" para habilitar o
interpretador Tier 2.)

Veja **PEP 744** para mais detalhes.

(JIT de Brandt Bucher, inspirado em um artigo de Haoran Xu e Fredrik
Kjolstad. Tier 2 IR de Mark Shannon e Guido van Rossum. Otimizador
Tier 2 de Ken Jin.)


CPython com threads livres
==========================

O CPython será executado com a *trava global do interpretador* (GIL)
desabilitada quando configurado usando a opção "--disable-gil" no
momento da construção. Este é um recurso experimental e, portanto, não
é usado por padrão. Os usuários precisam construir seu próprio
interpretador ou instalar uma das construções experimentais marcadas
como *free-threaded* (threads livres). Veja **PEP 703** "Tornando a
trava global do interpretador opcional no CPython" para mais detalhes.

A execução com threads livres permite a utilização total do poder de
processamento disponível, executando threads em paralelo nos núcleos
de CPU disponíveis. Embora nem todos os softwares se beneficiem disso
automaticamente, os programas projetados com uso de threads em mente
serão executados mais rapidamente em hardware com vários núcleos.

O trabalho ainda está em andamento: espere alguns bugs e um impacto
substancial no desempenho de thread único.

A construção com threads livres ainda opcionalmente oferece suporte à
execução com a GIL habilitada em tempo de execução usando a variável
de ambiente "PYTHON_GIL" ou a opção de linha de comando "-X gil".

Para verificar se o interpretador atual está configurado com "--
disable-gil", use "sysconfig.get_config_var("Py_GIL_DISABLED")". Para
verificar se a *GIL* está realmente desabilitada no processo em
execução, a função "sys._is_gil_enabled()" pode ser usada.

Os módulos de extensão da API C precisam ser construídos
especificamente para a construção com threads livres. Extensões que
oferecem suporte à execução com *GIL* desabilitada devem usar o slot
"Py_mod_gil". Extensões que usam inicialização monofásica devem usar
"PyUnstable_Module_SetGIL()" para indicar se oferecem suporte à
execução com a GIL desabilitada. A importação de extensões C que não
usam esses mecanismos fará com que a GIL seja habilitada, a menos que
a GIL tenha sido explicitamente desabilitada com a variável de
ambiente "PYTHON_GIL" ou a opção "-X gil=0".

pip 24.1b1 ou mais recente é necessário para instalar pacotes com
extensões C na construção com threads livres.


Outras mudanças na linguagem
============================

* The "exec()" and "eval()" built-ins now accept their "globals" and
  "locals" namespace arguments as keywords. (Contibuted by Raphael
  Gaschignard in gh-105879)

* Permite que o argumento *count* de "str.replace()" seja um argumento
  nomeado. (Contribuição de Hugo van Kemenade em gh-106487.)

* O compilador agora remove os recuos das docstrings. Isso reduzirá o
  tamanho do *cache de bytecode* (por exemplo, arquivo ".pyc"). Por
  exemplo, o tamanho do arquivo de cache para "sqlalchemy.orm.session"
  no SQLAlchemy 2.0 é reduzido em cerca de 5%. Esta mudança afetará
  ferramentas que usam docstrings, como "doctest". (Contribuição de
  Inada Naoki em gh-81283.)

* A função embutida "compile()" agora pode aceitar um novo
  sinalizador, "ast.PyCF_OPTIMIZED_AST", que é semelhante a
  "ast.PyCF_ONLY_AST" exceto que o "AST" retornado é otimizado de
  acordo com o valor do argumento "optimize". (Contribuição de Irit
  Katriel em gh-108113).

* "multiprocessing", "concurrent.futures", "compileall": Substitui
  "os.cpu_count()" por "os.process_cpu_count()" para selecionar o
  número padrão de threads de trabalho e processos. Obtém a afinidade
  da CPU, se houver suporte. (Contribuição de Victor Stinner em
  gh-109649.)

* "os.path.realpath()" agora resolve nomes de arquivos no estilo MS-
  DOS, mesmo que o arquivo não esteja acessível. (Contribuição de
  Moonsik Park em gh-82367.)

* Corrigido um bug onde uma declaração "global" em um bloco "except" é
  rejeitada quando o global é usado no bloco "else". (Contribuição de
  Irit Katriel em gh-111123.)

* Muitas funções agora emitem um aviso se um valor booleano for
  passado como argumento do descritor de arquivo. Isso pode ajudar a
  detectar alguns erros mais cedo. (Contribuição de Serhiy Storchaka
  em gh-82626.)

* Adicionada uma nova variável de ambiente "PYTHON_FROZEN_MODULES".
  Ela determina se os módulos congelados são ou não ignorados pelo
  mecanismo de importação, equivalente à opção de linha de comando "-X
  frozen_modules". (Contribuição de Yilei Yang em gh-111374.)

* Adicionado suporte ao perfilador perf funcionando sem ponteiros de
  quadro através da nova variável de ambiente
  "PYTHON_PERF_JIT_SUPPORT" e opção de linha de comando "-X perf_jit"
  (Contribuição de Pablo Galindo em gh-118518.)

* A nova variável de ambiente "PYTHON_HISTORY" pode ser usada para
  alterar a localização de um arquivo ".python_history". (Contribuição
  de Levi Sabah, Zackery Spytz e Hugo van Kemenade em gh-73965.)

* Adiciona a exceção "PythonFinalizationError".  Esta exceção derivada
  de "RuntimeError" é levantada quando uma operação é bloqueada
  durante a *finalização do Python*.

  As seguintes funções agora levantam PythonFinalizationError, em vez
  de "RuntimeError":

  * "_thread.start_new_thread()".

  * "subprocess.Popen".

  * "os.fork()".

  * "os.forkpty()".

  (Contribuição de Victor Stinner em gh-114570.)

* Adicionados atributos "name" e "mode" para objetos arquivo ou
  similar compactados e arquivados nos módulos "bz2", "lzma",
  "tarfile" e "zipfile". (Contribuição de Serhiy Storchaka em
  gh-115961.)

* Permite controlar o adiamento da nova análise do Expat >=2.6.0
  (CVE-2023-52425) adicionando cinco novos métodos:

  * "xml.etree.ElementTree.XMLParser.flush()"

  * "xml.etree.ElementTree.XMLPullParser.flush()"

  * "xml.parsers.expat.xmlparser.GetReparseDeferralEnabled()"

  * "xml.parsers.expat.xmlparser.SetReparseDeferralEnabled()"

  * "xml.sax.expatreader.ExpatParser.flush()"

  (Contribuição de Sebastian Pipping em gh-115623.)

* A API "ssl.create_default_context()" agora inclui
  "ssl.VERIFY_X509_PARTIAL_CHAIN" e "ssl.VERIFY_X509_STRICT" em seus
  sinalizadores padrão.

  Nota:

    "ssl.VERIFY_X509_STRICT" pode rejeitar certificados pré-**RFC
    5280** ou malformados que a implementação OpenSSL subjacente
    aceitaria de outra forma. Embora não seja recomendado desativar
    isso, você pode fazer isso usando:

       ctx = ssl.create_default_context()
       ctx.verify_flags &= ~ssl.VERIFY_X509_STRICT

  (Contribuição de William Woodruff em gh-112389.)

* "configparser.ConfigParser" agora aceita seções sem nome antes das
  nomeadas se configurado para isso. (Contribuição de Pedro Sousa
  Lacerda em gh-66449.)

* Escopo de anotação dentro dos escopos de classe agora pode conter
  lambdas e compreensões. As compreensões localizadas nos escopos de
  classe não são incorporadas ao escopo pai. (Contribuição de Jelle
  Zijlstra em gh-109118 e gh-118160.)

* As classes possuem um novo atributo "__firstlineno__", preenchido
  pelo compilador, com o número da primeira linha da definição de
  classe. (Contribuição de Serhiy Storchaka em gh-118465.)

* As instruções "from __future__ import ..." agora são apenas
  importações relativas normais se houver pontos antes do nome do
  módulo. (Contribuição de Jeremiah Gabriel Pascual em gh-118216.)


Novos módulos
=============

* Nenhum.


Módulos melhorados
==================


argparse
--------

* Adiciona o parâmetro *deprecated* nos métodos "add_argument()" e
  "add_parser()" que permite descontinuar opções de linha de comando,
  argumentos posicionais e subcomandos. (Contribuição de Serhiy
  Storchaka em gh-83648.)


array
-----

* Adiciona o código do tipo "'w'" ("Py_UCS4") que pode ser usado para
  strings Unicode. Ele pode ser usado no lugar do código do tipo
  "'u'", que foi descontinuado. (Contribuição de Inada Naoki em
  gh-80480.)

* Adiciona o método "clear()" para implementar "MutableSequence".
  (Contribuição de Mike Zimin em gh-114894.)


ast
---

* Os construtores dos tipos de nós no módulo "ast" agora são mais
  rígidos nos argumentos que aceitam e têm um comportamento mais
  intuitivo quando os argumentos são omitidos.

  Se um campo opcional em um nó AST não for incluído como argumento ao
  construir uma instância, o campo agora será definido como "None". Da
  mesma forma, se um campo de lista for omitido, esse campo será agora
  definido como uma lista vazia, e se um campo "ast.expr_context" for
  omitido, o padrão será "Load()". (Anteriormente, em todos os casos,
  o atributo estaria ausente na instância do nó de AST recém-
  construída.)

  Se outros argumentos forem omitidos, um "DeprecationWarning" será
  emitido. Isso causará uma exceção no Python 3.15. Da mesma forma,
  passar um argumento nomeado que não mapeia para um campo no nó AST
  agora está descontinuado e vai levantar uma exceção no Python 3.15.

  Estas mudanças não se aplicam às subclasses definidas pelo usuário
  de "ast.AST", a menos que a classe opte pelo novo comportamento
  definindo o atributo "ast.AST._field_types".

  (Contribuição de Jelle Zijlstra em gh-105858, gh-117486 e
  gh-118851.)

* "ast.parse()" agora aceita um argumento opcional *optimize* que é
  passado para o "compile()" embutido. Isto torna possível obter um
  AST otimizado. (Contribuição de Irit Katriel em gh-108113.)


asyncio
-------

* "asyncio.loop.create_unix_server()" agora removerá automaticamente o
  soquete Unix quando o servidor for fechado. (Contribuição de Pierre
  Ossman em gh-111246.)

* "asyncio.DatagramTransport.sendto()" agora enviará datagramas de
  comprimento zero se for chamado com um objeto de bytes vazios. O
  controle de fluxo de transporte agora também leva em conta o
  cabeçalho do datagrama ao calcular o tamanho do buffer.
  (Contribuição de Jamie Phan em gh-115199.)

* Adiciona os métodos "asyncio.Server.close_clients()" e
  "asyncio.Server.abort_clients()" que permitem fechar de forma mais
  forçada um servidor asyncio. (Contribuição de Pierre Ossman em
  gh-113538.)

* "asyncio.as_completed()" agora retorna um objeto que é ao mesmo
  tempo um *iterador assíncrono* e um *iterator* simples de
  aguardáveis. Os aguardáveis ​​gerados pela iteração assíncrona
  incluem tarefas originais ou objetos futuros que foram passados,
  facilitando a associação dos resultados às tarefas que estão sendo
  concluídas. (Contribuição de Justin Arthur em gh-77714.)

* Quando "asyncio.TaskGroup.create_task()" é chamado em um
  "asyncio.TaskGroup" inativo, a corrotina fornecida será fechada (o
  que evita que um "RuntimeWarning" sobre a corrotina fornecida nunca
  seja aguardado). (Contribuição de Arthur Tacca e Jason Zhang em
  gh-115957.)

* Comportamento aprimorado de "asyncio.TaskGroup" quando um
  cancelamento externo colide com um cancelamento interno. Por
  exemplo, quando dois grupos de tarefas estão aninhados e ambos
  experimentam uma exceção em uma tarefa filho simultaneamente, é
  possível que o grupo de tarefas externo seja interrompido, porque
  seu cancelamento interno foi engolido pelo grupo de tarefas interno.

  No caso em que um grupo de tarefas é cancelado externamente e também
  deve levantar "ExceptionGroup", ele agora chamará o método
  "cancel()" da tarefa pai. Isso garante que uma
  "asyncio.CancelledError" será levantada no próximo "await", para que
  o cancelamento não seja perdido.

  Um benefício adicional dessas mudanças é que os grupos de tarefas
  agora preservam a contagem de cancelamentos
  ("asyncio.Task.cancelling()").

  Para lidar com alguns casos extremos, "asyncio.Task.uncancel()"
  agora pode redefinir o sinalizador não documentado "_must_cancel"
  quando a contagem de cancelamentos chegar a zero.

  (Inspirado por um relatório de problema relatado por Arthur Tacca em
  gh-116720.)

* Adiciona "asyncio.Queue.shutdown()" (junto com
  "asyncio.QueueShutDown") para encerramento da fila. (Contribuição de
  Laurie Opperman e Yves Duprat em gh-104228.)

* Aceita uma tupla de separadores em
  "asyncio.StreamReader.readuntil()", parando quando um deles for
  encontrado. (Contribuição de Bruce Merry em gh-81322.)


base64
------

* Adiciona funções "base64.z85encode()" e "base64.z85decode()" que
  permitem codificar e decodificar dados Z85. Consulte a especificação
  Z85 para obter mais informações. (Contribuição de Matan Perelman em
  gh-75299.)


copy
----

* Adiciona a função "copy.replace()" que permite criar uma cópia
  modificada de um objeto, o que é especialmente útil para objetos
  imutáveis. Ele oferece suporte a tuplas nomeadas criadas com a
  função de fábrica "collections.namedtuple()", instâncias
  "dataclass", vários objetos "datetime", objetos "Signature",
  "Parameter", objeto código, e quaisquer classes de usuário que
  definam o método "__replace__()". (Contribuição de Serhiy Storchaka
  em gh-108751.)


dbm
---

* Adiciona os métodos "dbm.gnu.gdbm.clear()" e "dbm.ndbm.ndbm.clear()"
  que removem todos os itens do banco de dados. (Contribuição de
  Donghee Na em gh-107122.)

* Adiciona o novo backend "dbm.sqlite3" e torna-o o backend padrão
  "dbm". (Contribuição de Raymond Hettinger e Erlend E. Aasland em
  gh-100414.)


dis
---

* Altera a saída das funções do módulo "dis" para mostrar rótulos
  lógicos para alvos de salto e manipuladores de exceção, em vez de
  deslocamentos. Os deslocamentos podem ser adicionados com a nova
  opção de linha de comando "-O" ou o parâmetro "show_offsets".
  (Contribuição de Irit Katriel em gh-112137.)

* "get_instructions()" não representa mais entradas de cache como
  instruções separadas. Em vez disso, ele os retorna como parte de
  "Instruction", no novo campo *cache_info*. O argumento *show_caches*
  para "get_instructions()" foi descontinuado e não tem mais nenhum
  efeito. (Contribuição de Irit Katriel em gh-112962.)


doctest
-------

* A cor é adicionada à saída por padrão. Isso pode ser controlado
  através da nova variável de ambiente "PYTHON_COLORS", bem como das
  variáveis ​​de ambiente canônicas "NO_COLOR" e "FORCE_COLOR". Veja
  também Controlando cores. (Contribuição de Hugo van Kemenade em
  gh-117225.)

* O método "doctest.DocTestRunner.run()" agora conta o número de
  testes ignorados. Adiciona os atributos
  "doctest.DocTestRunner.skips" e "doctest.TestResults.skipped".
  (Contribuição de Victor Stinner em gh-108794.)


email
-----

* "email.utils.getaddresses()" e "email.utils.parseaddr()" agora
  retornam tuplas de dois elementos "('', '')" em mais situações onde
  endereços de e-mail inválidos são encontrados em vez de
  potencialmente imprecisos valores. Adiciona o parâmetro *strict*
  opcional a estas duas funções: use "strict=False" para obter o
  comportamento antigo, aceitar entradas malformadas.
  "getattr(email.utils, 'supports_strict_parsing', False)" pode ser
  usado para verificar se o parâmetro *strict* está disponível.
  (Contribuição de Thomas Dwyer e Victor Stinner para gh-102988 para
  melhorar a correção CVE-2023-27043.)


fractions
---------

* A formatação para objetos do tipo "fractions.Fraction" agora oferece
  suporte às regras de minilinguagem de especificação de formato
  padrão para preenchimento, alinhamento, manipulação de sinais,
  largura mínima e agrupamento. (Contribuição de Mark Dickinson em
  gh-111320.)


gc
--

* O coletor de lixo cíclico agora é incremental, o que altera o
  significado dos resultados de "gc.get_threshold()" e
  "gc.set_threshold()", bem como de "gc.get_count()" e
  "gc.get_stats()".

  * "gc.get_threshold()" retorna uma tupla de três itens para
    compatibilidade com versões anteriores. O primeiro valor é o
    limite para coleções jovens, como antes; o segundo valor determina
    a taxa na qual a coleção antiga é verificada (o padrão é 10 e
    valores mais altos significam que a coleção antiga é verificada
    mais lentamente). O terceiro valor não tem sentido e é sempre
    zero.

  * "gc.set_threshold()" ignora quaisquer itens após o segundo.

  * "gc.get_count()" e "gc.get_stats()" retornam o mesmo formato de
    resultados de antes. A única diferença é que em vez dos resultados
    fazerem referência às gerações jovens, em envelhecimento e
    antigas, os resultados fazem referência à geração jovem e em
    envelhecimento, e coleta de espaços de geração antigas.

  Em resumo, o código que tentou manipular o comportamento do ciclo GC
  pode não funcionar exatamente como pretendido, mas é muito
  improvável que seja prejudicial. Todos os outros códigos funcionarão
  perfeitamente.


glob
----

* Adiciona a função "glob.translate()" que converte uma especificação
  de caminho com curingas estilo shell em uma expressão regular.
  (Contribuição de Barney Gale em gh-72904.)


importlib
---------

* As funções "importlib.resources" anteriormente descontinuado não
  estão mais descontinuadas:

     * "is_resource()"

     * "open_binary()"

     * "open_text()"

     * "path()"

     * "read_binary()"

     * "read_text()"

  Todos agora permitem um diretório (ou árvore) de recursos, usando
  múltiplos argumentos posicionais.

  Para funções de leitura de texto, *encoding* e *errors* devem agora
  ser fornecidos como argumentos nomeados.

  A "contents()" permanece descontinuada em favor da API completa
  "Traversable". No entanto, agora não há planos para removê-la.

  (Contribuição de Petr Viktorin em gh-106532.)


io
--

* O finalizador "io.IOBase" agora registra os erros do método
  "close()" com "sys.unraisablehook". Anteriormente, os erros eram
  ignorados silenciosamente por padrão e registrados apenas em Modo de
  Desenvolvimento do Python ou em Python construído em modo de
  depuração. (Contribuição de Victor Stinner em gh-62948.)


ipaddress
---------

* Adiciona a propriedade "ipaddress.IPv4Address.ipv6_mapped", que
  retorna o endereço IPv6 mapeado para IPv4. (Contribuição de Charles
  Machalow em gh-109466.)

* Corrige os comportamentos "is_global" e "is_private" em
  "IPv4Address", "IPv6Address", "IPv4Network" e "IPv6Network".


itertools
---------

* Adicionada uma opção "strict" a "itertools.batched()". Isso levanta
  "ValueError" se o lote final for menor que o tamanho do lote
  especificado. (Contribuição de Raymond Hettinger em gh-113202.)


marshal
-------

* Adiciona o parâmetro *allow_code* nas funções do módulo. Passar
  "allow_code=False" evita a serialização e desserialização de objetos
  de código que são incompatíveis entre versões do Python.
  (Contribuição de Serhiy Storchaka em gh-113626.)


math
----

* Uma nova função "fma()" para operações fundidas de multiplicação e
  adição foi adicionada. Esta função calcula "x * y + z" com apenas
  uma única rodada e, portanto, evita qualquer perda intermediária de
  precisão. Ele envolve a função "fma()" fornecida pelo C99 e segue a
  especificação da operação IEEE 754 "fusedMultiplyAdd" para casos
  especiais. (Contribuição de Mark Dickinson e Victor Stinner em
  gh-73468.)


mimetypes
---------

* Adiciona a função "guess_file_type()" que funciona com o caminho do
  arquivo. Passar o caminho do arquivo em vez da URL em "guess_type()"
  está *suavemente descontinuado*. (Contribuição de Serhiy Storchaka
  em gh-66543.)


mmap
----

* A classe "mmap.mmap" agora tem um método "seekable()" que pode ser
  usado quando um objeto pesquisável arquivo ou similar é necessário.
  O método "seek()" agora retorna a nova posição absoluta.
  (Contribuição de Donghee Na e Sylvie Liberman em gh-111835.)

* "mmap.mmap" agora tem um parâmetro *trackfd* no Unix; se for
  "False", o descritor de arquivo especificado por *fileno* não será
  duplicado. (Contribuição de Zackery Spytz e Petr Viktorin em
  gh-78502.)

* "mmap.mmap" agora está protegido contra travamentos no Windows
  quando a memória mapeada está inacessível devido a erros no sistema
  de arquivos ou violações de acesso. (Contribuição de Jannis Weigend
  em gh-118209.)


opcode
------

* Move "opcode.ENABLE_SPECIALIZATION" para
  "_opcode.ENABLE_SPECIALIZATION". Este campo foi adicionado na versão
  3.12, nunca foi documentado e não se destina ao uso externo.
  (Contribuição de Irit Katriel em gh-105481.)

* Removidos "opcode.is_pseudo", "opcode.MIN_PSEUDO_OPCODE" e
  "opcode.MAX_PSEUDO_OPCODE", que foram adicionados em 3.12, nunca
  foram documentados ou expostos através de "dis", e não foram
  planejados para serem usados externamente.


os
--

* Adiciona a função "os.process_cpu_count()" para obter o número de
  CPUs lógicas utilizáveis ​​pelo thread de chamada do processo atual.
  (Contribuição de Victor Stinner em gh-109649.)

* Adiciona uma interface de baixo nível para descritores de arquivo de
  notificação de temporizador do Linux via "os.timerfd_create()",
  "os.timerfd_settime()", "os.timerfd_settime_ns()",
  "os.timerfd_gettime()" e "os.timerfd_gettime_ns()",
  "os.TFD_NONBLOCK", "os.TFD_CLOEXEC", "os.TFD_TIMER_ABSTIME" e
  "os.TFD_TIMER_CANCEL_ON_SET" (Contribuição de Masaru Tsuchiyama em
  gh-108277.)

* "os.cpu_count()" e "os.process_cpu_count()" podem ser substituídos
  através da nova variável de ambiente "PYTHON_CPU_COUNT" ou da nova
  opção de linha de comando "-X cpu_count". Esta opção é útil para
  usuários que precisam limitar os recursos da CPU de um sistema
  contêiner sem precisar modificar o contêiner (código da aplicação).
  (Contribuição de Donghee Na em gh-109595.)

* Adiciona suporte para "os.lchmod()" e o argumento *follow_symlinks*
  em "os.chmod()" no Windows. Observe que o valor padrão de
  *follow_symlinks* em "os.lchmod()" é "False" no Windows.
  (Contribuição de Serhiy Storchaka em gh-59616.)

* Adiciona suporte para "os.fchmod()" e um descritor de arquivo em
  "os.chmod()" no Windows. (Contribuição de Serhiy Storchaka em
  gh-113191.)

* "os.posix_spawn()" agora aceita "env=None", o que faz com que o
  processo recém gerado use o ambiente de processo atual.
  (Contribuição de Jakub Kulik em gh-113119.)

* "os.posix_spawn()" ganha um atributo "os.POSIX_SPAWN_CLOSEFROM" para
  uso em "file_actions=" em plataformas que oferecem suporte a
  "posix_spawn_file_actions_addclosefrom_np()". (Contribuição de Jakub
  Kulik em gh-113117.)

* "os.mkdir()" e "os.makedirs()" no Windows agora oferecem suporte a
  passar um valor *mode* de "0o700" para aplicar controle de acesso ao
  novo diretório. Isso afeta implicitamente "tempfile.mkdtemp()" e é
  uma mitigação para CVE-2024-4030. Outros valores para *mode*
  continuam a ser ignorados. (Contribuição de Steve Dower em
  gh-118486.)


os.path
-------

* Adiciona "os.path.isreserved()" para verificar se um caminho está
  reservado no sistema atual. Esta função está disponível apenas no
  Windows. (Contribuição de Barney Gale em gh-88569.)

* No Windows, "os.path.isabs()" não considera mais caminhos que
  começam com exatamente uma (contra)barra como absolutos.
  (Contribuição de Barney Gale e Jon Foster em gh-44626.)

* Adiciona suporte para argumentos nomeados *dir_fd* e
  *follow_symlinks* em "shutil.chown()". (Contribuição de Berker
  Peksag e Tahia K em gh-62308)


pathlib
-------

* Adiciona "pathlib.UnsupportedOperation", que é levantado em vez de
  "NotImplementedError" quando uma operação de caminho não é
  suportada. (Contribuição de Barney Gale em gh-89812.)

* Adiciona "pathlib.Path.from_uri()", um novo construtor para criar um
  objeto "pathlib.Path" a partir de um URI 'file' ("file://").
  (Contribuição de Barney Gale em gh-107465.)

* Adiciona "pathlib.PurePath.full_match()" para corresponder caminhos
  com curingas do tipo shell, incluindo o curinga recursivo ""**"".
  (Contribuição de Barney Gale em gh-73435.)

* Adiciona o atributo de classe "pathlib.PurePath.parser" que armazena
  a implementação de "os.path" usado para análise e junção de caminhos
  de baixo nível: "posixpath" ou "ntpath".

* Adiciona o argumento somente-nomeado *recurse_symlinks* a
  "pathlib.Path.glob()" e "rglob()". (Contribuição de Barney Gale em
  gh-77609.)

* Adiciona o argumento somente-nomeado *follow_symlinks* a
  "is_file()", "is_dir()", "owner()", "group()". (Contribuição de
  Barney Gale em gh-105793 e Kamil Turek em gh-107962.)

* Retorna arquivos e diretórios de "pathlib.Path.glob()" e "rglob()"
  quando recebe um padrão que termina com ""**"". Nas versões
  anteriores, apenas os diretórios eram retornados. (Contribuição de
  Barney Gale em gh-70303.)


pdb
---

* Adiciona a capacidade de mover entre exceções encadeadas durante a
  depuração post mortem em "pm()" usando o novo comando "exceptions
  [número_exc]" para Pdb. (Contribuição de Matthias Bussonnier em
  gh-106676.)

* Expressões/instruções cujo prefixo é um comando pdb agora são
  identificadas e executadas corretamente. (Contribuição de Tian Gao
  em gh-108464.)

* "sys.path[0]" não será mais substituído pelo diretório do script que
  está sendo depurado quando "sys.flags.safe_path" estiver definido
  (através da opção de linha de comando "-P" ou a variável de ambiente
  "PYTHONSAFEPATH"). (Contribuição de Tian Gao e Christian Walther em
  gh-111762.)

* "zipapp" é suportado como alvo de depuração. (Contribuição de Tian
  Gao em gh-118501.)

* "breakpoint()" e "pdb.set_trace()" agora entram no depurador
  imediatamente em vez de na próxima linha de código a ser executada.
  Esta mudança evita que o depurador quebre fora do contexto quando
  "breakpoint()" estiver posicionado no final do contexto.
  (Contribuição de Tian Gao em gh-118579.)


queue
-----

* Adiciona "queue.Queue.shutdown()" (junto com "queue.ShutDown") para
  encerramento da fila. (Contribuição de Laurie Opperman e Yves Duprat
  em gh-104750.)


random
------

* Adiciona uma interface de linha de comando. (Contribuição de Hugo
  van Kemenade em gh-118131.)


re
--

* Renomeia "re.error" para "re.PatternError" para maior clareza.
  "re.error" é mantido para compatibilidade com versões anteriores.


site
----

* Os arquivos ".pth" agora são decodificados primeiro por UTF-8 e
  depois por *codificação da localidade* se a decodificação UTF-8
  falhar. (Contribuição de Inada Naoki em gh-117802.)


sqlite3
-------

* Uma "ResourceWarning" agora é emitida se um objeto
  "sqlite3.Connection" não for explicitamente "fechado". (Contribuição
  de Erlend E. Aasland em gh-105539.)

* Adiciona o parâmetro somente-nomeado *filter* a
  "sqlite3.Connection.iterdump()" para filtrar objetos de banco de
  dados para despejo. (Contribuição de Mariusz Felisiak em gh-91602.)


statistics
----------

* Adiciona "statistics.kde()" para estimativa de densidade do núcleo.
  Isto torna possível estimar uma função de densidade de probabilidade
  contínua a partir de um número fixo de amostras discretas. Também
  foi adicionado "statistics.kde_random()" para amostragem da função
  de densidade de probabilidade estimada. (Contribuição de Raymond
  Hettinger em gh-115863.)


subprocess
----------

* O módulo "subprocess" agora usa a função "os.posix_spawn()" em mais
  situações. Notavelmente no caso padrão de "close_fds=True" em
  versões mais recentes de plataformas incluindo Linux, FreeBSD e
  Solaris onde a biblioteca C fornece
  "posix_spawn_file_actions_addclosefrom_np()". No Linux, isso deve
  funcionar de maneira semelhante ao nosso código existente baseado em
  Linux "vfork()". Um botão de controle privado
  "subprocess._USE_POSIX_SPAWN" pode ser definido como "False" se você
  precisar forçar "subprocess" a nunca usar "os.posix_spawn()".
  Informe o motivo e os detalhes da plataforma no rastreador de
  problemas do CPython se você definir isso para que possamos melhorar
  nossa lógica de seleção de API para todos. (Contribuição de Jakub
  Kulik em gh-113117.)


sys
---

* Adiciona a função "sys._is_interned()" para testar se a string foi
  internada. Não há garantia de que esta função exista em todas as
  implementações do Python. (Contribuição de Serhiy Storchaka em
  gh-78573.)


tempfile
--------

* No Windows, o modo padrão "0o700" usado por "tempfile.mkdtemp()"
  agora limita o acesso ao novo diretório devido a alterações em
  "os.mkdir()". Esta é uma mitigação para CVE-2024-4030. (Contribuição
  de Steve Dower em gh-118486.)


time
----

* No Windows, "time.monotonic()" agora usa o relógio
  "QueryPerformanceCounter()" para ter uma resolução melhor que 1 us,
  em vez do relógio "GetTickCount64()" que tem uma resolução de 15.6
  ms. (Contribuição de Victor Stinner em gh-88494.)

* No Windows, "time.time()" agora usa o relógio
  "GetSystemTimePreciseAsFileTime()" para ter uma resolução melhor que
  1 μs, em vez do relógio "GetSystemTimeAsFileTime()" que tem uma
  resolução de 15.6 ms. (Contribuição de Victor Stinner em gh-63207.)


tkinter
-------

* Adiciona métodos de widget "tkinter": "tk_busy_hold()",
  "tk_busy_configure()", "tk_busy_cget()", "tk_busy_forget()",
  "tk_busy_current()" e "tk_busy_status()". (Contribuição de Miguel,
  klappnase e Serhiy Storchaka em gh-72684.)

* O método "wm_attributes()" de widget "tkinter" agora aceita o nome
  do atributo sem o prefixo negativo para obter atributos de janela
  (por exemplo, "w.wm_attributes('alpha')") e permite especificar
  atributos e valores para definir como argumentos nomeados (por
  exemplo, "w.wm_attributes(alpha=0.5)"). Adiciona novo parâmetro
  opcional somente-nomeado *return_python_dict*: chamar
  "w.wm_attributes(return_python_dict=True)" retorna os atributos como
  um dict em vez de uma tupla. (Contribuição de Serhiy Storchaka em
  gh-43457.)

* Adiciona um novo parâmetro opcional somente-nomeado *return_ints* no
  método "Text.count()". Passar "return_ints=True" faz com que ele
  sempre retorne a contagem única como um número inteiro em vez de uma
  tupla de 1 elemento ou "None". (Contribuição de Serhiy Storchaka em
  gh-97928.)

* Adiciona suporte ao tipo de elemento "vsapi" no método
  "element_create()" de "tkinter.ttk.Style". (Contribuição de Serhiy
  Storchaka em gh-68166.)

* Adiciona o método "after_info()" para widgets do Tkinter.
  (Contribuição de Cheryl Sabella em gh-77020.)

* Adiciona o método  "copy_replace()" à classe "PhotoImage" para
  copiar uma região de uma imagem para outra imagem, possivelmente com
  ampliação e subamostragem de pixels. Adiciona parâmetro
  *from_coords* para os métodos "copy()", "zoom()" e "subsample()" da
  classe "PhotoImage". Adiciona parâmetros *zoom* e *subsample* para o
  método "copy()" da classe "PhotoImage". (Contribuição de Serhiy
  Storchaka em gh-118225.)

* Adiciona os métodos "PhotoImage" "read()" para ler uma imagem de um
  arquivo e "data()" para obter os dados da imagem. Adiciona os
  parâmetros *background* e *grayscale* ao método "write()" de
  "PhotoImage". (Contribuição de Serhiy Storchaka em gh-118271.)


traceback
---------

* Adiciona o parâmetro *show_group* a
  "traceback.TracebackException.format_exception_only()" para formatar
  as exceções aninhadas de uma instância "BaseExceptionGroup",
  recursivamente. (Contribuição de Irit Katriel em gh-105292.)

* Adiciona o campo *exc_type_str* a "TracebackException", que contém
  uma exibição de string do *exc_type*. Substitua o campo *exc_type*
  que contém o próprio objeto de tipo. Adicione o parâmetro
  *save_exc_type* (padrão "True") para indicar se "exc_type" deve ser
  salvo. (Contribuição de Irit Katriel em gh-112332.)


types
-----

* O construtor "SimpleNamespace" agora permite especificar valores
  iniciais de atributos como um argumento posicional que deve ser um
  mapeamento ou um iterável de pares chave-valor. (Contribuição de
  Serhiy Storchaka em gh-108191.)


typing
------

* Adiciona "typing.get_protocol_members()" para retornar o conjunto de
  membros que definem um "typing.Protocol". Adiciona
  "typing.is_protocol()" para verificar se uma classe é um
  "typing.Protocol". (Contribuição de Jelle Zijlstra em gh-104873.)

* Adiciona "typing.ReadOnly", uma construção especial do typing para
  marcar um item de "typing.TypedDict" como somente leitura para
  verificadores de tipo. Veja **PEP 705** para mais detalhes.

* Adiciona "typing.NoDefault", um objeto sinalizador usado para
  representar os padrões de alguns parâmetros no módulo "typing".
  (Contribuição de Jelle Zijlstra em gh-116126.)


unicodedata
-----------

* O banco de dados Unicode foi atualizado para a versão 15.1.0.
  (Contribuição de James Gerity em gh-109559.)


venv
----

* Adiciona suporte para adicionar arquivos ignorados pelo
  gerenciamento de controle de fontes (SCM) ao diretório de um
  ambiente virtual. Por padrão, o Git é compatível. Isso está
  implementado como ativado por padrão por meio da API, que pode ser
  estendido para oferecer suporte a outros SCMs ("venv.EnvBuilder" e
  "venv.create()") e desativado por padrão por meio da CLI (usando "--
  without-scm-ignore-files"). (Contribuição de Brett Cannon em
  gh-108125.)


warnings
--------

* O novo decorador "warnings.deprecated()" fornece uma maneira de
  comunicar descontinuações para *verificadores de tipo estático* e
  avisar sobre o uso de classes e funções obsoletas. Um aviso de
  descontinuação do tempo de execução também pode ser emitido quando
  uma função ou classe decorada é usada em tempo de execução. Veja
  **PEP 702**. (Contribuição de Jelle Zijlstra em gh-104003.)


xml.etree.ElementTree
---------------------

* Adiciona o método "close()" para o iterador retornado por
  "iterparse()" para limpeza explícita. (Contribuição de Serhiy
  Storchaka em gh-69893.)


zipimport
---------

* Obtém suporte para arquivos no formato ZIP64. Todo mundo adora
  códigos enormes, certo? (Contribuição de Tim Hatch em gh-94146.)


Otimizações
===========

* "textwrap.indent()" agora é cerca de 30% mais rápido do que antes
  para entradas grandes. (Contribuição de Inada Naoki em gh-107369.)

* O módulo "subprocess" usa "os.posix_spawn()" em mais situações,
  incluindo o padrão sendo "close_fds=True" em muitas plataformas
  modernas. Isto deve fornecer um aumento notável de desempenho ao
  iniciar processos no FreeBSD e Solaris. Veja a seção de subprocess
  acima para detalhes. (Contribuição de Jakub Kulik em gh-113117.)

* Vários módulos de biblioteca padrão tiveram seus tempos de
  importação significativamente melhorados. Por exemplo, o tempo de
  importação do módulo "typing" foi reduzido em cerca de um terço pela
  remoção de dependências em "re" e "contextlib". Outros módulos para
  aproveitar a aceleração no tempo de importação incluem
  "importlib.metadata", "threading", "enum", "functools" e
  "email.utils". (Contribuição de Alex Waygood, Shantanu Jain, Adam
  Turner, Daniel Hollas e outros em gh-109653.)


Módulos e APIs removidas
========================


PEP 594: baterias mortas (e remoção de outros módulos)
------------------------------------------------------

* **PEP 594** removeu 19 módulos da biblioteca padrão, descontinuados
  no Python 3.11:

  * "aifc". (Contribuição de Victor Stinner em gh-104773.)

  * "audioop". (Contribuição de Victor Stinner em gh-104773.)

  * "chunk". (Contribuição de Victor Stinner em gh-104773.)

  * "cgi" e "cgitb".

    * "cgi.FieldStorage" normalmente pode ser substituído por
      "urllib.parse.parse_qsl()" para solicitações "GET" e "HEAD", e o
      módulo "email.message" ou projeto multipart do PyPI para "POST"
      e "PUT".

    * "cgi.parse()" pode ser substituída chamando
      "urllib.parse.parse_qs()" diretamente na string de consulta
      desejada, exceto para a entrada "multipart/form-data", que pode
      ser tratada conforme descrito para "cgi.parse_multipart()".

    * "cgi.parse_header()" pode ser substituído pela funcionalidade do
      pacote "email", que implementa os mesmos RFCs MIME. Por exemplo,
      com "email.message.EmailMessage":

         from email.message import EmailMessage
         msg = EmailMessage()
         msg['content-type'] = 'application/json; charset="utf8"'
         main, params = msg.get_content_type(), msg['content-type'].params

    * "cgi.parse_multipart()" pode ser substituída pela funcionalidade
      do pacote "email" (por exemplo "email.message.EmailMessage" e
      "email.message.Message") que implementa os mesmos RFCs MIME, ou
      com o projeto multipart do PyPI.

    (Contribuição de Victor Stinner em gh-104773.)

  * Módulo "crypt" e sua extensão privada "_crypt". O módulo "hashlib"
    é um substituto potencial para certos casos de uso. Caso
    contrário, os seguintes projetos PyPI podem ser usados:

    * bcrypt: Hashing de senha moderno para seu software e servidores.

    * passlib: Framework abrangente de hash de senha com suporte para
      mais de 30 esquemas.

    * argon2-cffi: O algoritmo seguro de hashing de senha Argon2.

    * legacycrypt: Envólucro ao "ctypes" para a chamada POSIX da
      biblioteca de criptografia e funcionalidade associada.

    * crypt_r: Fork do módulo "crypt", um envólucro para a chamada da
      biblioteca *crypt_r(3)* e funcionalidade associada.

    (Contribuição de Victor Stinner em gh-104773.)

  * "imghdr": use os projetos filetype, puremagic ou python-magic. A
    função "puremagic.what()" pode ser usada para substituir a função
    "imghdr.what()" para todos os formatos de arquivo que eram
    suportados por "imghdr". (Contribuição de Victor Stinner em
    gh-104773.)

  * "mailcap". O módulo "mimetypes" fornece uma alternativa.
    (Contribuição de Victor Stinner em gh-104773.)

  * "msilib". (Contribuição de Zachary Ware em gh-104773.)

  * "nis". (Contribuição de Victor Stinner em gh-104773.)

  * "nntplib": o projeto nntplib do PyPI pode ser usado em seu lugar.
    (Contribuição de Victor Stinner em gh-104773.)

  * "ossaudiodev": use o projeto pygame para reprodução de áudio.
    (Contribuição de Victor Stinner em gh-104780.)

  * "pipes": use o módulo "subprocess". (Contribuição de Victor
    Stinner em gh-104773.)

  * "sndhdr": use os projetos filetype, puremagic ou python-magic.
    (Contribuição de Victor Stinner em gh-104773.)

  * "spwd": o projeto python-pam pode ser usado em seu lugar.
    (Contribuição de Victor Stinner em gh-104773.)

  * "sunau". (Contribuição de Victor Stinner em gh-104773.)

  * "telnetlib", use os projetos telnetlib3 ou Exscript. (Contribuição
    de Victor Stinner em gh-104773.)

  * "uu": o módulo "base64" é uma alternativa moderna. (Contribuição
    de Victor Stinner em gh-104773.)

  * "xdrlib". (Contribuição de Victor Stinner em gh-104773.)

* Remove o programa "2to3" e o módulo "lib2to3", descontinuados no
  Python 3.11. (Contribuição de Victor Stinner em gh-104780.)

* Remove o módulo "tkinter.tix", descontinuado no Python 3.6. A
  biblioteca Tix de terceiros que o módulo empacota não é mantida.
  (Contribuição de Zachary Ware em gh-75552.)


configparser
------------

* Remove a classe não documentada "configparser.LegacyInterpolation",
  descontinuada na docstring desde Python 3.2 e com um aviso de
  descontinuação desde Python 3.11. (Contribuição de Hugo van Kemenade
  em gh-104886.)


importlib
---------

* Remova o acesso descontinuado "__getitem__()" para objetos
  "importlib.metadata.EntryPoint". (Contribuição de Jason R. Coombs em
  gh-113175.)


locale
------

* Remove a função "locale.resetlocale()" descontinuada no Python 3.11:
  use "locale.setlocale(locale.LC_ALL, "")" em vez disso.
  (Contribuição de Victor Stinner em gh-104783.)


logging
-------

* "logging": Remove os métodos "Logger.warn()" e
  "LoggerAdapter.warn()" não documentados e não testados e a função
  "logging.warn()". Descontinuados desde Python 3.3, eles eram
  apelidos para o método "logging.Logger.warning()", método
  "logging.LoggerAdapter.warning()" e função "logging.warning()".
  (Contribuição de Victor Stinner em gh-105376.)


pathlib
-------

* Remove o suporte para usar objetos "pathlib.Path" como gerenciadores
  de contexto. Esta funcionalidade foi descontinuada e tornou-se não
  operacional no Python 3.9.


re
--

* Remove a função "re.template" não documentada, que nunca funciona e
  descontinuada e o sinalizador "re.TEMPLATE" (e o apelido "re.T").
  (Contribuição de Serhiy Storchaka e Nikita Sobolev em gh-105687.)


turtle
------

* Remove o método "turtle.RawTurtle.settiltangle()", descontinuado na
  documentação desde o Python 3.1 e com um aviso de descontinuação
  desde o Python 3.11. (Contribuição de Hugo van Kemenade em
  gh-104876.)


typing
------

* Os espaços de nomes "typing.io" e "typing.re", descontinuados no
  Python 3.8, foram agora removidos. Os itens nesses espaços de nomes
  podem ser importados diretamente de "typing". (Contribuição de
  Sebastian Rittau em gh-92871.)

* Remove o suporte para o método de argumento nomeado de criação de
  tipos "typing.TypedDict", descontinuados no Python 3.11.
  (Contribuição de Tomas Roun em gh-104786.)


unittest
--------

* Remove as seguintes funções "unittest", descontinuadas no Python
  3.11:

  * "unittest.findTestCases()"

  * "unittest.makeSuite()"

  * "unittest.getTestCaseNames()"

  Em vez delas, use os métodos de "TestLoader":

  * "unittest.TestLoader.loadTestsFromModule()"

  * "unittest.TestLoader.loadTestsFromTestCase()"

  * "unittest.TestLoader.getTestCaseNames()"

  (Contribuição de Hugo van Kemenade em gh-104835.)

* Remove o método "unittest.TestProgram.usageExit()" não testado e não
  documentado, descontinuado no Python 3.11. (Contribuição de Hugo van
  Kemenade em gh-104992.)


urllib
------

* Remove os parâmetros *cafile*, *capath* e *cadefault* da função
  "urllib.request.urlopen()", descontinuada no Python 3.6: passe o
  parâmetro *context* em vez disso. Use
  "ssl.SSLContext.load_cert_chain()" para carregar certificados
  específicos ou deixe "ssl.create_default_context()" selecionar os
  certificados CA confiáveis ​​do sistema para você. (Contribuição de
  Victor Stinner em gh-105382.)


webbrowser
----------

* Remove a classe "webbrowser" "MacOSX" não testada e não documentada,
  descontinuada no Python 3.11. Use a classe "MacOSXOSAScript"
  (introduzida no Python 3.2). (Contribuição de Hugo van Kemenade em
  gh-104804.)

* Remove o atributo descontinuado "webbrowser.MacOSXOSAScript._name".
  Use o atributo "webbrowser.MacOSXOSAScript.name" em vez disso.
  (Contribuição de Nikita Sobolev em gh-105546.)


Novas descontinuações
=====================

* Removidos os descritores "classmethod" encadeados (introduzidos em
  gh-63272). Isto não pode mais ser usado para agrupar outros
  descritores como "property". O design central desse recurso
  apresentava falhas e causou vários problemas posteriores. Para
  "passar" um "classmethod", considere usar o atributo "__wrapped__"
  que foi adicionado no Python 3.10. (Contribuição de Raymond
  Hettinger em gh-89519.)

* "array": O código de formato "'u'" de "array", descontinuado em
  documentos desde Python 3.3, emite "DeprecationWarning" desde 3.13 e
  será removido em Python 3.16. Use o código de formato "'w'".
  (Contribuição de Hugo van Kemenade em gh-80480.)

* "ctypes": Descontinua funções não documentadas
  "ctypes.SetPointerType()" e "ctypes.ARRAY()". Substitua
  "ctypes.ARRAY(item_type, size)" por "item_type * size".
  (Contribuição de Victor Stinner em gh-105733.)

* "decimal": Descontinua o especificador de formato não padrão "N"
  para "decimal.Decimal". Não foi documentado e apenas suportado na
  implementação C. (Contribuição de Serhiy Storchaka em gh-89902.)

* "dis": O separador "dis.HAVE_ARGUMENT" está descontinuado. Verifique
  a associação em "hasarg". (Contribuição de Irit Katriel em
  gh-109319.)

* Objetos quadro: Chamar "frame.clear()" em um quadro suspenso levanta
  "RuntimeError" (como sempre foi o caso para um quadro em execução).
  (Contribuição de Irit Katriel em gh-79932.)

* Módulos "getopt" e "optparse": Eles agora estão *suavemente
  descontinuado*: o módulo "argparse" deve ser usado para novos
  projetos. Anteriormente, o módulo "optparse" já estava
  descontinuado, sua remoção não foi agendada e nenhum aviso foi
  emitido: portanto não há mudança na prática. (Contribuição de Victor
  Stinner em gh-106535.)

* "gettext": Emite aviso de descontinuação para números não inteiros
  em funções e métodos "gettext" que consideram formas plurais mesmo
  que a tradução não tenha sido encontrada. (Contribuição de Serhiy
  Storchaka em gh-88434.)

* "glob": As funções não documentadas "glob.glob0()" e "glob.glob1()"
  estão descontinuadas. Use "glob.glob()" e passe um diretório para
  seu argumento *root_dir*. (Contribuição de Barney Gale em
  gh-117337.)

* "http.server": "http.server.CGIHTTPRequestHandler" agora emite uma
  exceção "DeprecationWarning", pois será removida na versão 3.15. Os
  servidores HTTP CGI baseados em processos estão em desuso há muito
  tempo. Este código estava desatualizado, sem manutenção e raramente
  usado. Tem um alto potencial para bugs de segurança e
  funcionalidade. Isso inclui a remoção do sinalizador "--cgi" da
  linha de comando "python -m http.server" na versão 3.15.

* "mimetypes": Passar o caminho do arquivo em vez da URL em
  "guess_type()" está *suavemente descontinuado*. Use
  "guess_file_type()" em vez disso. (Contribuição de Serhiy Storchaka
  em gh-66543.)

* "re": Passar argumentos opcionais *maxsplit*, *count* e *flags* em
  funções de nível de módulo "re.split()", "re.sub()" e "re.subn()"
  como argumentos posicionais agora é descontinuado. Nas versões
  futuras do Python, esses parâmetros serão somente-nomeados.
  (Contribuição de Serhiy Storchaka em gh-56166.)

* "pathlib": "pathlib.PurePath.is_reserved()" está descontinuado e
  agendado para remoção no Python 3.15. Use "os.path.isreserved()"
  para detectar caminhos reservados no Windows.

* "platform": "java_ver()" está descontinuada e será removida na
  versão 3.15. Ela não foi testada em grande parte, tinha uma API
  confusa e só era útil para suporte a Jython. (Contribuição de Nikita
  Sobolev em gh-116349.)

* "pydoc": Descontinua a função não documentada "pydoc.ispackage()".
  (Contribuição de Zackery Spytz em gh-64020.)

* "sqlite3": Passar mais de um argumento posicional para
  "sqlite3.connect()" e o construtor "sqlite3.Connection" está
  descontinuado. Os parâmetros restantes se tornarão somente-nomeados
  no Python 3.15.

  Descontinua a passagem de nome, número de argumentos e o chamável
  como argumentos nomeados para as seguintes APIs de
  "sqlite3.Connection":

  * "create_function()"

  * "create_aggregate()"

  Descontinua a passagem do chamável de retorno de chamada como
  argumento nomeado para as seguintes APIs de "sqlite3.Connection":

  * "set_authorizer()"

  * "set_progress_handler()"

  * "set_trace_callback()"

  Os parâmetros afetados se tornarão somente-posicionais no Python
  3.15.

  (Contribuição de Erlend E. Aasland em gh-107948 e gh-108278.)

* "sys": função "sys._enablelegacywindowsfsencoding()". Substitua-a
  pela variável de ambiente "PYTHONLEGACYWINDOWSFSENCODING".
  (Contribuição de Inada Naoki em gh-73427.)

* "tarfile": O atributo "tarfile" não documentado e não utilizado de
  "tarfile.TarFile" está descontinuado e agendado para remoção no
  Python 3.16.

* "traceback": O campo *exc_type* de "traceback.TracebackException"
  está descontinuado. Use *exc_type_str* em vez disso.

* "typing":

  * Criar uma classe "typing.NamedTuple" usando argumentos nomeados
    para denotar os campos ("NT = NamedTuple("NT", x=int, y=int)")
    está descontinuado e não será permitido no Python 3.15. Use a
    sintaxe baseada em classe ou a sintaxe funcional. (Contribuição de
    Alex Waygood em gh-105566.)

  * Ao usar a sintaxe funcional para criar uma classe
    "typing.NamedTuple" ou uma classe "typing.TypedDict", falhando ao
    passar um valor para o parâmetro 'fields' ("NT = NamedTuple("NT")"
    ou "TD = TypedDict("TD")") está descontinuado. Passar "None" para
    o parâmetro 'fields' ("NT = NamedTuple("NT", None)" ou "TD =
    TypedDict("TD", None)") também está descontinuado. Ambos não serão
    permitidos no Python 3.15. Para criar uma classe NamedTuple com 0
    campos, use "class NT(NamedTuple): pass" ou "NT = NamedTuple("NT",
    [])". Para criar uma classe TypedDict com 0 campos, use "class
    TD(TypedDict): pass" ou "TD = TypedDict("TD", {})". (Contribuição
    de Alex Waygood em gh-105566 e gh-105570.)

  * "typing.no_type_check_decorator()" está descontinuado e agendado
    para remoção no Python 3.15. Depois de oito anos no módulo
    "typing", ele ainda não foi suportado por nenhum dos principais
    verificadores de tipos. (Contribuição de Alex Waygood em
    gh-106309.)

  * "typing.AnyStr" está descontinuado. No Python 3.16, ele será
    removido de "typing.__all__", e uma exceção "DeprecationWarning"
    será emitida quando for importada ou acessada. Ele será removido
    totalmente no Python 3.18. Use a nova sintaxe de parâmetro de
    tipo. (Contribuição de Michael The em gh-107116.)

* Funções definidas pelo usuário: A atribuição ao atributo "__code__"
  de uma função onde o tipo do novo objeto código não corresponde ao
  tipo da função está descontinuada. Os diferentes tipos são: função
  simples, gerador, gerador assíncrono e corrotina. (Contribuição de
  Irit Katriel em gh-81137.)

* "wave": Descontinua os métodos "getmark()", "setmark()" e
  "getmarkers()" das classes "wave.Wave_read" e "wave.Wave_write".
  Eles serão removidos no Python 3.15. (Contribuição de Victor Stinner
  em gh-105096.)


Remoção pendente no Python 3.14
-------------------------------

* "argparse": Os parâmetros *type*, *choices* e *metavar* de
  "argparse.BooleanOptionalAction" foram descontinuados e serão
  removidos na versão 3.14. (Contribuição de Nikita Sobolev em
  gh-92248.)

* "ast": Os seguintes recursos foram descontinuados na documentação
  desde Python 3.8, agora fazem com que um "DeprecationWarning" seja
  emitido em tempo de execução quando eles são acessados ou usados, e
  serão removidos no Python 3.14:

  * "ast.Num"

  * "ast.Str"

  * "ast.Bytes"

  * "ast.NameConstant"

  * "ast.Ellipsis"

  Usa "ast.Constant" em vez disso. (Contribuição de Serhiy Storchaka
  em gh-90953.)

* "collections.abc": "ByteString" foi descontinuado. Prefira
  "Sequence" ou "Buffer" Para uso em tipagem, prefira uma união, como
  "bytes | bytearray" ou "collections.abc.Buffer". (Contribuição de
  Shantanu Jain em gh-91896.)

* "email": Descontinua o parâmetro *isdst* em
  "email.utils.localtime()". (Contribuição de Alan Williams em
  gh-72346.)

* "importlib": "__package__" e "__cached__" deixarão de ser definidos
  ou levados em consideração pelo sistema de importação (gh-97879).

* "importlib.abc" descontinuou as classes:

  * "importlib.abc.ResourceReader"

  * "importlib.abc.Traversable"

  * "importlib.abc.TraversableResources"

  Em vez disso, use classes "importlib.resources.abc":

  * "importlib.resources.abc.Traversable"

  * "importlib.resources.abc.TraversableResources"

  (Contribuição de Jason R. Coombs e Hugo van Kemenade em gh-93963.)

* "itertools" tinha suporte não documentado, ineficiente,
  historicamente cheio de bugs e inconsistente para operações de
  cópia, cópia profunda e serialização com pickle. Isso será removido
  na versão 3.14 para uma redução significativa no volume de código e
  na carga de manutenção. (Contribuição de Raymond Hettinger em
  gh-101588.)

* "multiprocessing": O método de inicialização padrão será alterado
  para um mais seguro no Linux, BSDs e outras plataformas POSIX não-
  macOS onde "'fork'" é atualmente o padrão (gh-84559). Adicionar um
  aviso de tempo de execução sobre isso foi considerado muito
  perturbador, pois não se espera que a maior parte do código se
  importe. Use as APIs "get_context()" ou "set_start_method()" para
  especificar explicitamente quando seu código *requer* "'fork'". Veja
  Contextos e métodos de inicialização.

* "pathlib": "is_relative_to()" e "relative_to()": passar argumentos
  adicionais foi descontinuado.

* "pkgutil": "find_loader()" e "get_loader()" agora levantam
  "DeprecationWarning"; use "importlib.util.find_spec()" em vez disto.
  (Contribuição de Nikita Sobolev em gh-97850.)

* "pty":

  * "master_open()": use "pty.openpty()".

  * "slave_open()": use "pty.openpty()".

* "sqlite3":

  * "version" e "version_info".

  * "execute()" e "executemany()" se espaços reservados nomeados forem
    usados ​​e *parameters* for uma sequência em vez de um "dict" .

  * adaptador de data e hora, conversor de registro de data e hora:
    veja a documentação de "sqlite3" para receitas de substituição
    sugeridas.

* "types.CodeType": O acesso a "co_lnotab" foi descontinuado na **PEP
  626** desde 3.10 e foi planejado para ser removido em 3.12, mas só
  recebeu uma "DeprecationWarning" adequada em 3.12. Pode ser removido
  em 3.14. (Contribuição de Nikita Sobolev em gh-101866.)

* "typing": "ByteString", descontinuado desde Python 3.9, agora faz
  com que uma "DeprecationWarning" seja emitida quando é usado.

* "urllib": "urllib.parse.Quoter" está obsoleto: não foi planejado
  para ser uma API pública. (Contribuição de Gregory P. Smith em
  gh-88168.)


Remoção pendente no Python 3.15
-------------------------------

* "http.server.CGIHTTPRequestHandler" será removido junto com seu
  sinalizador relacionado "--cgi" para "python -m http.server". Estava
  descontinuado e raramente usado. Não existe substituição direta.
  *Qualquer coisa* é melhor que CGI para fazer a interface de um
  servidor web com um manipulador de solicitações.

* "locale": "locale.getdefaultlocale()" foi descontinuada no Python
  3.11 e originalmente planejada para remoção no Python 3.13
  (gh-90817), mas a remoção foi adiada para o Python 3.15. Use
  "locale.setlocale()", "locale.getencoding()" e "locale.getlocale()"
  em vez disso. (Contribuição de Hugo van Kemenade em gh-111187.)

* "pathlib": "pathlib.PurePath.is_reserved()" está descontinuado e
  agendado para remoção no Python 3.15. Use "os.path.isreserved()"
  para detectar caminhos reservados no Windows.

* "platform": "java_ver()" está descontinuada e será removida na
  versão 3.15. Ela não foi testada em grande parte, tinha uma API
  confusa e só era útil para suporte a Jython. (Contribuição de Nikita
  Sobolev em gh-116349.)

* "threading": Passar qualquer argumento para "threading.RLock()"
  agora está descontinuado. A versão C permite qualquer número de args
  e kwargs, mas eles são simplesmente ignorados. A versão Python não
  permite nenhum argumento. Todos os argumentos serão removidos de
  "threading.RLock()" no Python 3.15. (Contribuição de Nikita Sobolev
  em gh-102029.)

* "typing.NamedTuple":

  * A sintaxe de argumento nomeado não documentada para criar classes
    "NamedTuple" ("NT = NamedTuple("NT", x=int)") está descontinuada e
    não será permitida em 3.15. Use a sintaxe baseada em classe ou a
    sintaxe funcional.

  * Ao usar a sintaxe funcional para criar uma classe "NamedTuple",
    falhar ao passar um valor para o parâmetro *fields* ("NT =
    NamedTuple("NT")") está descontinuada. Passar "None" para o
    parâmetro *fields* ("NT = NamedTuple("NT", None)") também está
    descontinuada. Ambos não serão permitidos no Python 3.15. Para
    criar uma classe "NamedTuple" com 0 campos, use "class
    NT(NamedTuple): pass" ou "NT = NamedTuple("NT", [])".

* "typing.TypedDict": Ao usar a sintaxe funcional para criar uma
  classe "TypedDict", falhar ao passar um valor para o parâmetro
  *fields* ("TD = TypedDict("TD")") está descontinuada. Passar "None"
  para o parâmetro *fields* ("TD = TypedDict("TD", None)") também está
  descontinuada. Ambos não serão permitidos no Python 3.15. Para criar
  uma classe "TypedDict" com 0 campos, use "class TD(TypedDict): pass"
  ou "TD = TypedDict("TD", {})".

* "wave": Descontinua os métodos "getmark()", "setmark()" e
  "getmarkers()" das classes "wave.Wave_read" e "wave.Wave_write".
  Eles serão removidos no Python 3.15. (Contribuição de Victor Stinner
  em gh-105096.)


Remoção pendente no Python 3.16
-------------------------------

* "array.array": tipo "'u'" ("wchar_t"): use o tipo "'w'" ("Py_UCS4").


Remoção pendente em versões futuras
-----------------------------------

As APIs a seguir foram descontinuadas em versões anteriores do Python
e serão removidas, embora atualmente não haja uma data agendada para
sua remoção.

* "argparse": O aninhamento de grupos de argumentos e o aninhamento de
  grupos mutuamente exclusivos estão descontinuados.

* "builtins":

  * "~bool", inversão bit a bit em booleanos.

  * "bool(NotImplemented)".

  * Geradores: A assinatura "throw(type, exc, tb)" e "athrow(type,
    exc, tb)" está descontinuada: use "throw(exc)" e "athrow(exc)", a
    assinatura do argumento único.

  * Atualmente Python aceita literais numéricos imediatamente seguidos
    por palavras reservadas como, por exemplo, "0in x", "1or x", "0if
    1else 2". Ele permite expressões confusas e ambíguas como "[0x1for
    x in y]" (que pode ser interpretada como "[0x1 for x in y]" ou
    "[0x1f or x in y]"). Um aviso de sintaxe é levantado se o literal
    numérico for imediatamente seguido por uma das palavras reservadas
    "and", "else", "for", "if", "in" , "is" e "or". Em uma versão
    futura, será alterado para um erro de sintaxe. (gh-87999)

  * Suporte para métodos "__index__()" e "__int__()" retornando tipo
    não-int: esses métodos serão necessários para retornar uma
    instância de uma subclasse estrita de "int".

  * Suporte para o método "__float__()" retornando uma subclasse
    estrita de "float": esses métodos serão necessários para retornar
    uma instância de "float".

  * Suporte para o método "__complex__()" retornando uma subclasse
    estrita de "complex": esses métodos serão necessários para
    retornar uma instância de "complex".

  * Delegação do método "int()" para o "__trunc__()".

* "calendar": As constantes "calendar.January" e "calendar.February"
  foram descontinuadas e substituídas por "calendar.JANUARY" e
  "calendar.FEBRUARY". (Contribuição de Prince Roshan em gh-103636.)

* "codeobject.co_lnotab": use o método "codeobject.co_lines()".

* "datetime":

  * "utcnow()": use "datetime.datetime.now(tz=datetime.UTC)".

  * "utcfromtimestamp()": use
    "datetime.datetime.fromtimestamp(timestamp, tz=datetime.UTC)".

* "gettext": O valor de plural deve ser um número inteiro.

* "importlib":

  * Método "load_module()": use "exec_module()" em vez disso.

  * O parâmetro *debug_override* de "cache_from_source()" foi
    descontinuado: em vez disso, use o parâmetro *optimization*.

* "importlib.metadata":

  * Interface de tupla "EntryPoints".

  * "None" implícito nos valores de retorno.

* "mailbox": O uso da entrada StringIO e do modo de texto foi
  descontinuado; em vez disso, use BytesIO e o modo binário.

* "os": Chamar "os.register_at_fork()" em processo multithread.

* "pydoc.ErrorDuringImport": Um valor de tupla para o parâmetro
  *exc_info* foi descontinuado, use uma instância de exceção.

* "re": Regras mais rigorosas agora são aplicadas para referências
  numéricas de grupos e nomes de grupos em expressões regulares.
  Apenas a sequência de dígitos ASCII agora é aceita como referência
  numérica. O nome do grupo em padrões de bytes e strings de
  substituição agora pode conter apenas letras e dígitos ASCII e
  sublinhado. (Contribuição de Serhiy Storchaka em gh-91760.)

* Módulos "sre_compile", "sre_constants" e "sre_parse".

* "shutil": O parâmetro *onerror* de "rmtree()" foi descontinuado no
  Python 3.12; use o parâmetro *onexc*.

* Protocolos e opções de "ssl"

  * "ssl.SSLContext" sem argumento de protocolo foi descontinuado.

  * "ssl.SSLContext": "set_npn_protocols()" e
    "selected_npn_protocol()" foram descontinuados: use ALPN.

  * Opções de "ssl.OP_NO_SSL*"

  * Opções de "ssl.OP_NO_TLS*"

  * "ssl.PROTOCOL_SSLv3"

  * "ssl.PROTOCOL_TLS"

  * "ssl.PROTOCOL_TLSv1"

  * "ssl.PROTOCOL_TLSv1_1"

  * "ssl.PROTOCOL_TLSv1_2"

  * "ssl.TLSVersion.SSLv3"

  * "ssl.TLSVersion.TLSv1"

  * "ssl.TLSVersion.TLSv1_1"

* O parâmetro *check_home* de "sysconfig.is_python_build()" foi
  descontinuado e é ignorado.

* Métodos de "threading":

  * "threading.Condition.notifyAll()": use "notify_all()".

  * "threading.Event.isSet()": use "is_set()".

  * "threading.Thread.isDaemon()", "threading.Thread.setDaemon()": use
    o atributo "threading.Thread.daemon".

  * "threading.Thread.getName()", "threading.Thread.setName()": use o
    atributo "threading.Thread.name".

  * "threading.currentThread()": use "threading.current_thread()".

  * "threading.activeCount()": use "threading.active_count()".

* "typing.Text" (gh-92332).

* "unittest.IsolatedAsyncioTestCase": foi descontinuado retornar um
  valor que não seja "None" de um caso de teste.

* Funções descontinuadas de "urllib.parse": use "urlparse()"

  * "splitattr()"

  * "splithost()"

  * "splitnport()"

  * "splitpasswd()"

  * "splitport()"

  * "splitquery()"

  * "splittag()"

  * "splittype()"

  * "splituser()"

  * "splitvalue()"

  * "to_bytes()"

* "urllib.request": O estilo de "URLopener" e "FancyURLopener" de
  invocar solicitações foi descontinuado. Use as mais novas funções e
  métodos "urlopen()".

* "wsgiref": "SimpleHandler.stdout.write()" não deve fazer gravações
  parciais.

* "xml.etree.ElementTree": testar o valor verdade de um "Element" está
  descontinuado. Em um lançamento futuro isso sempre retornará "True".
  Em vez disso, prefira os testes explícitos "len(elem)" ou "elem is
  not None".

* "zipimport.zipimporter.load_module()" foi descontinuado: use
  "exec_module()".


Mudanças no bytecode do CPython
===============================

* O oparg de "YIELD_VALUE" agora é "1" se o yield fizer parte de um
  yield-from ou um await, e "0" caso contrário. O oparg de "RESUME"
  foi alterado para adicionar um bit indicando se a profundidade de
  exceção é 1, o que é necessário para otimizar o fechamento dos
  geradores. (Contribuição de Irit Katriel em gh-111354.)


Mudanças na API C
=================


Novas funcionalidades
---------------------

* Você não precisa mais definir a macro "PY_SSIZE_T_CLEAN" antes de
  incluir "Python.h" ao usar formatos "#" em códigos de formato. APIs
  que aceitam os códigos de formato sempre usam "Py_ssize_t" para
  formatos "#". (Contribuição de Inada Naoki em gh-104922.)

* O parâmetro *keywords* de "PyArg_ParseTupleAndKeywords()" e
  "PyArg_VaParseTupleAndKeywords()" agora tem tipo char *const* em C e
  const char *const* em C++, em vez de char**. Torna essas funções
  compatíveis com argumentos do tipo const char *const*, const char**
  ou char *const* em C++ e char *const* em C sem uma conversão de tipo
  explícita. Isso pode ser substituído pela macro "PY_CXX_CONST".
  (Contribuição de Serhiy Storchaka em gh-65210.)

* Adiciona "PyImport_AddModuleRef()": semelhante a
  "PyImport_AddModule()", mas retorna uma *referência forte* em vez de
  uma *referência emprestada*. (Contribuição de Victor Stinner em
  gh-105922.)

* Adiciona a função "PyWeakref_GetRef()": semelhante a
  "PyWeakref_GetObject()", mas retorna uma *referência forte*, ou
  "NULL" se o referente não mais existir. (Contribuição de Victor
  Stinner em gh-105927.)

* Adiciona "PyObject_GetOptionalAttr()" e
  "PyObject_GetOptionalAttrString()", variantes de
  "PyObject_GetAttr()" e "PyObject_GetAttrString()" que não levantam
  "AttributeError" se o atributo não for encontrado. Essas variantes
  são mais convenientes e rápidas se o atributo ausente não for
  tratado como uma falha. (Contribuição de Serhiy Storchaka em
  gh-106521.)

* Adiciona "PyMapping_GetOptionalItem()" e
  "PyMapping_GetOptionalItemString()", variantes de
  "PyObject_GetItem()" e "PyMapping_GetItemString()" que não levantam
  "KeyError" se a chave não for encontrada. Essas variantes são mais
  convenientes e rápidas se a chave ausente não for tratada como uma
  falha. (Contribuição de Serhiy Storchaka em gh-106307.)

* Adiciona variantes fixas de funções que ignoram erros
  silenciosamente:

  * "PyObject_HasAttrWithError()" substitui "PyObject_HasAttr()".

  * "PyObject_HasAttrStringWithError()" substitui
    "PyObject_HasAttrString()".

  * "PyMapping_HasKeyWithError()" substitui "PyMapping_HasKey()".

  * "PyMapping_HasKeyStringWithError()" substitui
    "PyMapping_HasKeyString()".

  Novas funções retornam não apenas "1" para verdadeiro e "0" para
  falso, mas também "-1" para erro.

  (Contribuição de Serhiy Storchaka em gh-108511.)

* Se Python for construído em modo de depuração ou "com asserções",
  "PyTuple_SET_ITEM()" e "PyList_SET_ITEM()" agora verificam o
  argumento do índice com uma asserção. (Contribuição de Victor
  Stinner em gh-106168.)

* Adiciona a função "PyModule_Add()": semelhante a
  "PyModule_AddObjectRef()" e "PyModule_AddObject()", mas sempre rouba
  uma referência ao valor. (Contribuição de Serhiy Storchaka em
  gh-86493.)

* Adiciona funções "PyDict_GetItemRef()" e
  "PyDict_GetItemStringRef()": semelhantes a
  "PyDict_GetItemWithError()", mas retornando uma *referência forte*
  em vez de uma *referência emprestada* . Além disso, essas funções
  retornam -1 em caso de erro e, portanto, a verificação de
  "PyErr_Occurred()" não é necessária. (Contribuição de Victor Stinner
  em gh-106004.)

* Adicionada "PyDict_SetDefaultRef()", que é semelhante a
  "PyDict_SetDefault()", mas retorna uma *referência forte* em vez de
  uma *referência emprestada*. Esta função retorna "-1" em caso de
  erro, "0" na inserção e "1" se a chave já estivesse presente no
  dicionário. (Contribuição de Sam Gross em gh-112066.)

* Adiciona a função "PyDict_ContainsString()" como
  "PyDict_Contains()", mas *key* é especificada como uma string de
  bytes const char* codificada em UTF-8, em vez de um PyObject*.
  (Contribuição de Victor Stinner em gh-108314.)

* Adicionada a função "PyList_GetItemRef()": semelhante a
  "PyList_GetItem()", mas retorna uma *referência forte* em vez de uma
  *referência emprestada*.

* Adiciona a função "Py_IsFinalizing()": verifica se o interpretador
  Python principal está *sendo desligado*. (Contribuição de Victor
  Stinner em gh-108014.)

* Adiciona a função "PyLong_AsInt()": semelhante a "PyLong_AsLong()",
  mas armazena o resultado em um int C em vez de um long C.
  Anteriormente, era conhecida como função privada "_PyLong_AsInt()"
  (com um prefixo de sublinhado). (Contribuição de Victor Stinner em
  gh-108014.)

* Python construído com "configure" "--with-trace-refs" (referências
  de rastreamento) agora oferece suporte à API Limitada. (Contribuição
  de Victor Stinner em gh-108634.)

* Adiciona funções "PyObject_VisitManagedDict()" e
  "PyObject_ClearManagedDict()" que devem ser chamadas pelas funções
  traverse e clear de um tipo usando o sinalizador
  "Py_TPFLAGS_MANAGED_DICT". O projeto pythoncapi-compat pode ser
  usado para obter essas funções no Python 3.11 e 3.12. (Contribuição
  de Victor Stinner em gh-107073.)

* Adiciona as funções "PyUnicode_EqualToUTF8AndSize()" e
  "PyUnicode_EqualToUTF8()": comparam o objeto Unicode com uma string
  const char* codificada em UTF-8 e retornam true ("1") se forem
  iguais, ou falso ("0") caso contrário. Essas funções não levantam
  exceções. (Contribuição de Serhiy Storchaka em gh-110289.)

* Adiciona a função "PyThreadState_GetUnchecked()": semelhante a
  "PyThreadState_Get()", mas não encerra forçadamente o processo com
  um erro fatal se for NULL. O chamador é responsável por verificar se
  o resultado é NULL. Anteriormente, a função era privada e conhecida
  como "_PyThreadState_UncheckedGet()". (Contribuição de Victor
  Stinner em gh-108867.)

* Adiciona a função "PySys_AuditTuple()": semelhante a
  "PySys_Audit()", mas passa argumentos de evento como um objeto
  "tuple" do Python. (Contribuição de Victor Stinner em gh-85283.)

* "PyArg_ParseTupleAndKeywords()" agora oferece suporte a nomes de
  parâmetros nomeados não-ASCII. (Contribuição de Serhiy Storchaka em
  gh-110815.)

* Adiciona "PyMem_RawMalloc()", "PyMem_RawCalloc()",
  "PyMem_RawRealloc()" e "PyMem_RawFree()" à API C limitada (versão
  3.13). (Contribuição de Victor Stinner em gh-85283.)

* Adiciona as funções "PySys_Audit()" e "PySys_AuditTuple()" à API C
  limitada. (Contribuição de Victor Stinner em gh-85283.)

* Adiciona a função "PyErr_FormatUnraisable()": semelhante a
  "PyErr_WriteUnraisable()", mas permite personalizar a mensagem de
  aviso. (Contribuição de Serhiy Storchaka em gh-108082.)

* Adiciona as funções "PyList_Extend()" e "PyList_Clear()":
  semelhantes aos métodos "list.extend()" e "list.clear()" do Python.
  (Contribuição de Victor Stinner em gh-111138.)

* Adiciona funções "PyDict_Pop()" e "PyDict_PopString()": removem uma
  chave de um dicionário e, opcionalmente, retornam o valor removido.
  Isto é semelhante a "dict.pop()", mas sem o valor padrão e sem
  levantar "KeyError" se a chave estiver ausente. (Contribuição de
  Stefan Behnel e Victor Stinner em gh-111262.)

* Adiciona a função "Py_HashPointer()" para fazer hash de um ponteiro.
  (Contribuição de Victor Stinner em gh-111545.)

* Adiciona a função "PyObject_GenericHash()" que implementa a função
  hashing padrão de um objeto Python. (Contribuição de Serhiy
  Storchaka em gh-113024.)

* Adiciona a API C PyTime:

  * Tipo "PyTime_t".

  * Constantes "PyTime_MIN" e "PyTime_MAX".

  * Adiciona as funções:

    * "PyTime_AsSecondsDouble()".

    * "PyTime_Monotonic()".

    * "PyTime_MonotonicRaw()".

    * "PyTime_PerfCounter()".

    * "PyTime_PerfCounterRaw()".

    * "PyTime_Time()".

    * "PyTime_TimeRaw()".

  (Contribuição de Victor Stinner e Petr Viktorin em gh-110850.)

* Adiciona as funções "PyLong_AsNativeBytes()",
  "PyLong_FromNativeBytes()" e "PyLong_FromUnsignedNativeBytes()" para
  simplificar a conversão entre tipos inteiros nativos e objetos "int"
  do Python. (Contribuição de Steve Dower em gh-111140.)

* Adiciona a função "PyType_GetFullyQualifiedName()" para obter o nome
  totalmente qualificado do tipo. Equivalente a
  "f"{type.__module__}.{type.__qualname__}"", ou "type.__qualname__"
  se "type.__module__" não for uma string ou for igual a ""builtins"".
  (Contribuição de Victor Stinner em gh-111696.)

* Adiciona a função "PyType_GetModuleName()" para obter o nome do
  módulo do tipo. Equivalente a obter o atributo "type.__module__".
  (Contribuição de Eric Snow e Victor Stinner em gh-111696.)

* Adiciona suporte para os formatos "%T", "%#T", "%N" e "%#N" para
  "PyUnicode_FromFormat()": formata o nome totalmente qualificado de
  um tipo de objeto e de um tipo: chame "PyType_GetModuleName()". Veja
  **PEP 737** para mais informações. (Contribuição de Victor Stinner
  em gh-111696.)

* Adiciona as funções "Py_GetConstant()" e "Py_GetConstantBorrowed()"
  para obter constantes. Por exemplo,
  "Py_GetConstant(Py_CONSTANT_ZERO)" retorna uma *referência forte*
  para a constante zero. (Contribuição de Victor Stinner em
  gh-115754.)

* Adiciona "PyType_GetModuleByDef()" à API C limitada (contribuição de
  Victor Stinner em gh-116936.)

* Adiciona duas novas funções à API C, "PyRefTracer_SetTracer()" e
  "PyRefTracer_GetTracer()", que permitem rastrear a criação e
  destruição de objetos da mesma forma que o módulo "tracemalloc".
  (Contribuição de Pablo Galindo em gh-93502.)

* Adiciona "PyEval_GetFrameBuiltins()", "PyEval_GetFrameGlobals()" e
  "PyEval_GetFrameLocals()" à API C. Essas substituições para
  "PyEval_GetBuiltins()", "PyEval_GetGlobals()" e "PyEval_GetLocals()"
  retornam *referências fortes* em vez de referências emprestadas.
  (Adicionado como parte de **PEP 667**.)

* Adiciona a API "PyMutex", um mutex leve que ocupa um único byte. A
  função "PyMutex_Lock()" irá liberar a GIL (se atualmente mantida) se
  a operação precisar de bloqueio. (Contribuição de Sam Gross em
  gh-108724.)


Mudanças na construção
======================

* A opção "--with-system-libmpdec" do "configure" agora tem como
  padrão "yes". A cópia empacotada de "libmpdecimal" será removida no
  Python 3.15.

* Autoconf 2.71 e aclocal 1.16.4 agora são necessários para regerar o
  script "configure". (Contribuição de Christian Heimes em gh-89886.)

* SQLite 3.15.2 ou mais recente é necessário para construir o módulo
  de extensão "sqlite3". (Contribuição de Erlend Aasland em
  gh-105875.)

* Python construído com "configure" "--with-trace-refs" (referências
  de rastreamento) tem compatibilidade de ABI com a construção de
  lançamento do Python e a construção de depuração. (Contribuição de
  Victor Stinner em gh-108634.)

* Construir CPython agora requer um compilador com suporte para a
  biblioteca atômica C11, funções atômicas embutidas do GCC ou
  intrínsecos interligados MSVC.

* As extensões C "errno", "fcntl", "grp", "md5", "pwd", "resource",
  "termios", "winsound", "_ctypes_test",
  "_multiprocessing.posixshmem", "_scproxy", "_stat", "_statistics",
  "_testconsole", "_testimportmultiple" e "_uuid" são agora
  construídas com a API C limitada. (Contribuição de Victor Stinner em
  gh-85283.)

* "wasm32-wasi" agora é uma plataforma de nível 2 segundo a **PEP
  11**. (Contribuição de Brett Cannon em gh-115192.)

* "wasm32-emscripten" não é mais uma plataforma suportada pela **PEP
  11**. (Contribuição de Brett Cannon em gh-115192.)

* Python agora inclui a biblioteca mimalloc. Está licenciada sob a
  licença do MIT; veja licença do mimalloc. O mimalloc incluído tem
  alterações personalizadas, veja gh-113141 para detalhes.
  (Contribuição de Dino Viehland em gh-109914.)

* Em sistemas POSIX, os nomes de arquivos pkg-config (".pc") agora
  incluem os sinalizadores de ABI. Por exemplo, a construção com
  threads livres gera "python-3.13t.pc" e a construção de depuração
  gera "python-3.13d.pc".


Portando para o Python 3.13
===========================

Esta seção lista as alterações descritas anteriormente e outras
correções que podem exigir alterações no seu código.


Mudanças na API Python
----------------------

* Uma "OSError" agora é levantada por "getpass.getuser()" para
  qualquer falha na recuperação de um nome de usuário, em vez de
  "ImportError" em plataformas não-Unix ou "KeyError" em plataformas
  Unix onde o banco de dados de senhas está vazio.

* O módulo "threading" agora espera que o módulo "_thread" tenha um
  atributo "_is_main_interpreter". É uma função sem argumentos que
  retorna "True" se o interpretador atual for o interpretador
  principal.

  Qualquer biblioteca ou aplicação que forneça um módulo "_thread"
  personalizado deve obrigatoriamente fornecer
  "_is_main_interpreter()", da mesma forma que outros atributos
  "privados" do módulo. (Veja gh-112826.)

* "mailbox.Maildir" agora ignora arquivos com um ponto inicial.
  (Contribuição de Zackery Spytz em gh-65559.)

* "pathlib.Path.glob()" e "rglob()" agora retornam arquivos e
  diretórios se um padrão que termina com ""**"" for fornecido, em vez
  de apenas diretórios. Os usuários podem adicionar uma barra final
  para corresponder apenas aos diretórios.

* O valor do atributo "mode" de "gzip.GzipFile" foi alterado de
  inteiro ("1" ou "2") para string ("'rb'" ou "'wb'"). O valor do
  atributo "mode" do objeto arquivo ou similar legível retornado por
  "zipfile.ZipFile.open()" foi alterado de "'r'" para "'rb'".
  (Contribuição de Serhiy Storchaka em gh-115961.)

* "functools.partial" agora emite uma "FutureWarning" quando é usado
  como método. Seu comportamento será alterado em versões futuras do
  Python. Envolva-a em "staticmethod()" se quiser preservar o
  comportamento antigo. (Contribuição de Serhiy Storchaka em
  gh-121027.)

* Chamar "locals()" em um *escopo otimizado* agora produz uma captura
  independente em cada chamada e, portanto, não atualiza mais
  implicitamente as referências retornadas anteriormente. Obter o
  comportamento legado do CPython agora requer chamadas explícitas
  para atualizar o dicionário inicialmente retornado com os resultados
  de chamadas subsequentes para "locals()". Funções de execução de
  código que visam implicitamente "locals()" (como "exec" e "eval")
  devem receber um espaço de nomes explícito para acessar seus
  resultados em um escopo otimizado. (Alterado como parte da **PEP
  667**.)

* Chamar "locals()" de uma compreensão no módulo ou escopo de classe
  (inclusive via "exec" ou "eval") mais uma vez se comporta como se a
  compreensão estivesse sendo executada como uma função aninhada
  independente (isto é, as variáveis ​​locais de o escopo que contém
  não está incluído). No Python 3.12, isso mudou para incluir as
  variáveis ​​locais do escopo que o contém ao implementar a **PEP
  709**. (Alterado como parte da **PEP 667**.)

* Acessar "FrameType.f_locals" em um *escopo otimizado* agora retorna
  um proxy de "write-through" em vez de uma captura que é atualizado
  em horários mal especificados. Se uma captura for desejada, ela deve
  ser criada explicitamente com "dict" ou com o método ".copy()" do
  proxy. (Alterado como parte da **PEP 667**.)


Mudanças na API C
-----------------

* "Python.h" não inclui mais o cabeçalho padrão "<ieeefp.h>". Ele foi
  incluído para a função "finite()" que agora é fornecida pelo
  cabeçalho "<math.h>". Agora deve ser incluído explicitamente, se
  necessário. Remova também a macro "HAVE_IEEEFP_H". (Contribuição de
  Victor Stinner em gh-108765.)

* "Python.h" não inclui mais estes arquivos de cabeçalho padrão:
  "<time.h>", "<sys/select.h>" e "<sys/time.h>". Se necessário,
  deverão agora ser incluídos explicitamente. Por exemplo, "<time.h>"
  fornece as funções "clock()" e "gmtime()", "<sys/select.h>" fornece
  o "select()", e "<sys/time.h>" fornece as funções "futimes()",
  "gettimeofday()" e "setitimer()". (Contribuição de Victor Stinner em
  gh-108765.)

* No Windows, "Python.h" não inclui mais o arquivo de cabeçalho padrão
  "<stddef.h>". Se necessário, deverá agora ser incluído
  explicitamente. Por exemplo, ele fornece a função "offsetof()" e os
  tipos "size_t" e "ptrdiff_t". Incluindo "<stddef.h>" explicitamente
  já era necessário para todas as outras plataformas, a macro
  "HAVE_STDDEF_H" só é definida no Windows. (Contribuição de Victor
  Stinner em gh-108765.)

* Se a macro "Py_LIMITED_API" estiver definida, as macros
  "Py_BUILD_CORE", "Py_BUILD_CORE_BUILTIN" e "Py_BUILD_CORE_MODULE"
  agora são indefinidas por "<Python.h>". (Contribuição de Victor
  Stinner em gh-85283.)

* As macros antigas da lixeira "Py_TRASHCAN_SAFE_BEGIN" e
  "Py_TRASHCAN_SAFE_END" foram removidas. Elas devem ser substituídas
  pelas novas macros "Py_TRASHCAN_BEGIN" e "Py_TRASHCAN_END".

  Uma função "tp_dealloc" que contém as macros antigas, como:

     static void
     mytype_dealloc(mytype *p)
     {
         PyObject_GC_UnTrack(p);
         Py_TRASHCAN_SAFE_BEGIN(p);
         ...
         Py_TRASHCAN_SAFE_END
     }

  deve migrar para as novas macros da seguinte forma:

     static void
     mytype_dealloc(mytype *p)
     {
         PyObject_GC_UnTrack(p);
         Py_TRASHCAN_BEGIN(p, mytype_dealloc)
         ...
         Py_TRASHCAN_END
     }

  Observe que "Py_TRASHCAN_BEGIN" tem um segundo argumento que deve
  ser a função de desalocação em que está. As novas macros foram
  adicionadas no Python 3.8 e as macros antigas foram descontinuadas
  no Python 3.11. (Contribuição de Irit Katriel em gh-105111.)

* Funções "PyDict_GetItem()", "PyDict_GetItemString()",
  "PyMapping_HasKey()", "PyMapping_HasKeyString()",
  "PyObject_HasAttr()", "PyObject_HasAttrString()", e
  "PySys_GetObject()", que apagam todos os erros que ocorrem ao
  chamá-los, agora se reportam usando "sys.unraisablehook()". Você
  pode substituí-las por outras funções conforme recomendado na
  documentação. (Contribuição de Serhiy Storchaka em gh-106672.)

* "PyCode_GetFirstFree()" é uma API instável agora e foi renomeada
  para "PyUnstable_Code_GetFirstFree()". (Contribuição de Bogdan
  Romanyuk em gh-115781.)

* Os efeitos da mutação do dicionário retornado de
  "PyEval_GetLocals()" em um *escopo otimizado* foram alterados. Novas
  entradas de dict adicionadas desta forma agora *apenas* ficarão
  visíveis para chamadas "PyEval_GetLocals()" subsequentes nesse
  quadro, como "PyFrame_GetLocals()", "locals()" e
  "FrameType.f_locals" não acessa mais o mesmo dicionário armazenado
  em cache subjacente. As alterações feitas nas entradas para nomes de
  variáveis ​​reais e nomes adicionados através das interfaces proxy
  de "write-through" serão substituídas em chamadas subsequentes para
  "PyEval_GetLocals()" nesse quadro. A atualização de código
  recomendada depende de como a função estava sendo usada, portanto,
  consulte o aviso de descontinuação na função para obter detalhes.
  (Alteração como parte da **PEP 667**.)

* Chamar "PyFrame_GetLocals()" em um *escopo otimizado* agora retorna
  um proxy de "write-through" em vez de uma captura que é atualizada
  em horários mal especificados. Se uma captura for desejada, ela deve
  ser criada explicitamente (por exemplo, com "PyDict_Copy()") ou
  chamando a nova API "PyEval_GetFrameLocals()". (Alteração como parte
  da **PEP 667**.)

* "PyFrame_FastToLocals()" e "PyFrame_FastToLocalsWithError()" não têm
  mais nenhum efeito. Chamar essas funções tem sido redundante desde o
  Python 3.11, quando "PyFrame_GetLocals()" foi introduzido pela
  primeira vez. (Alteração como parte de **PEP 667**.)

* "PyFrame_LocalsToFast()" não tem mais efeito. Chamar esta função é
  redundante agora que "PyFrame_GetLocals()" retorna um proxy de
  "write-through" para *escopos otimizados*. (Alteração como parte da
  **PEP 667**.)


APIs C removidas
----------------

* Remove muitas APIs (funções, macros, variáveis) com nomes prefixados
  por "_Py" ou "_PY" (consideradas como API privada). Se o seu projeto
  for afetado por uma dessas remoções e você considerar que a API
  removida deve permanecer disponível, abra um novo relatório de
  problema para solicitar uma API C pública e adicione "cc @vstinner"
  ao problema para notificar Victor Stinner. (Contribuição de Victor
  Stinner em gh-106320.)

* Remova funções descontinuadas no Python 3.9:

  * "PyEval_CallObject()", "PyEval_CallObjectWithKeywords()": use
    "PyObject_CallNoArgs()" ou "PyObject_Call()" em vez disso. Aviso:
    os argumentos posicionais de "PyObject_Call()" devem ser "tuple" e
    não podem ser "NULL", os argumentos nomeados devem ser "dict" ou
    "NULL", enquanto funções removidas verificavam o tipo de
    argumentos e aceitavam argumentos posicionais e nomeados "NULL".
    Para substituir "PyEval_CallObjectWithKeywords(func, NULL,
    kwargs)" por "PyObject_Call()", passe uma tupla vazia como
    argumentos posicionais usando "PyTuple_New(0)".

  * "PyEval_CallFunction()": use "PyObject_CallFunction()".

  * "PyEval_CallMethod()": use "PyObject_CallMethod()".

  * "PyCFunction_Call()": use "PyObject_Call()".

  (Contribuição de Victor Stinner em gh-105107.)

* Remova protocolos de buffer antigos descontinuados no Python 3.0.
  Use Protocolo de Buffer em vez disso.

  * "PyObject_CheckReadBuffer()": Use "PyObject_CheckBuffer()" para
    testar se o objeto oferece suporte ao protocolo de buffer. Observe
    que "PyObject_CheckBuffer()" não garante que
    "PyObject_GetBuffer()" terá sucesso. Para testar se o objeto é
    realmente legível, veja o próximo exemplo de
    "PyObject_GetBuffer()".

  * "PyObject_AsCharBuffer()", "PyObject_AsReadBuffer()":
    "PyObject_GetBuffer()" e "PyBuffer_Release()":

       Py_buffer view;
       if (PyObject_GetBuffer(obj, &view, PyBUF_SIMPLE) < 0) {
           return NULL;
       }
       // Use `view.buf` and `view.len` to read from the buffer.
       // You may need to cast buf as `(const char*)view.buf`.
       PyBuffer_Release(&view);

  * "PyObject_AsWriteBuffer()": Use "PyObject_GetBuffer()" e
    "PyBuffer_Release()":

       Py_buffer view;
       if (PyObject_GetBuffer(obj, &view, PyBUF_WRITABLE) < 0) {
           return NULL;
       }
       // Use `view.buf` and `view.len` to write to the buffer.
       PyBuffer_Release(&view);

  (Contribuição de Inada Naoki in gh-85275.)

* Remova as seguintes funções antigas da configuração de inicialização
  do Python, descontinuadas no Python 3.11:

  * "PySys_AddWarnOptionUnicode()": use "PyConfig.warnoptions".

  * "PySys_AddWarnOption()": use "PyConfig.warnoptions".

  * "PySys_AddXOption()": use "PyConfig.xoptions".

  * "PySys_HasWarnOptions()": use "PyConfig.xoptions".

  * "PySys_SetPath()": defina "PyConfig.module_search_paths".

  * "Py_SetPath()": defina "PyConfig.module_search_paths".

  * "Py_SetStandardStreamEncoding()": defina "PyConfig.stdio_encoding"
    e talvez também defina "PyConfig.legacy_windows_stdio" (no
    Windows).

  * "_Py_SetProgramFullPath()": defina "PyConfig.executable".

  Em vez disso, use a nova API "PyConfig" da Configuração de
  Inicialização do Python (**PEP 587**), adicionada ao Python 3.8.
  (Contribuição de Victor Stinner em gh-105145.)

* Remove a função "PyEval_ThreadsInitialized()", descontinuada no
  Python 3.9. Desde Python 3.7, "Py_Initialize()" sempre cria a GIL:
  chamar "PyEval_InitThreads()" não faz nada e
  "PyEval_ThreadsInitialized()" sempre retorna diferente de zero.
  (Contribuição de Victor Stinner em gh-105182.)

* Remove as funções "PyEval_AcquireLock()" e "PyEval_ReleaseLock()",
  descontinuadas no Python 3.2. Eles não atualizavam o estado atual da
  thread. Elas podem ser substituídas por:

  * "PyEval_SaveThread()" e "PyEval_RestoreThread()";

  * "PyEval_AcquireThread()" e "PyEval_RestoreThread()" de baixo
    nível;

  * ou "PyGILState_Ensure()" e "PyGILState_Release()".

  (Contribuição de Victor Stinner em gh-105182.)

* Remove a função privada "_PyObject_FastCall()": use
  "PyObject_Vectorcall()", a qual está disponível desde Python 3.8
  (**PEP 590**). (Contribuição de Victor Stinner em gh-106023.)

* Remove o arquivo de cabeçalho "cpython/pytime.h": ele continha
  apenas funções privadas. (Contribuição de Victor Stinner em
  gh-106316.)

* Remove o apelido "_PyInterpreterState_Get()" de
  "PyInterpreterState_Get()" que era mantido para compatibilidade com
  versões anteriores do Python 3.8. O projeto pythoncapi-compat pode
  ser usado para obter "PyInterpreterState_Get()" no Python 3.8 e
  versões anteriores. (Contribuição de Victor Stinner em gh-106320.)

* A função "PyModule_AddObject()" agora está *suavemente
  descontinuado*: funções "PyModule_Add()" ou
  "PyModule_AddObjectRef()" devem ser usadas em seu lugar.
  (Contribuição de Serhiy Storchaka em gh-86493.)


APIs C descontinuadas
---------------------

* Descontinua os antigos tipos "Py_UNICODE" e "PY_UNICODE_TYPE": use
  diretamente o tipo "wchar_t". Desde o Python 3.3, "Py_UNICODE" e
  "PY_UNICODE_TYPE" são apenas apelidos para "wchar_t". (Contribuição
  de Victor Stinner em gh-105156.)

* Descontinua antigas funções de inicialização do Python

  * "PySys_ResetWarnOptions()": apague "sys.warnoptions" e
    "warnings.filters".

  * "Py_GetExecPrefix()": obtenha "sys.exec_prefix".

  * "Py_GetPath()": obtenha "sys.path".

  * "Py_GetPrefix()": obtenha "sys.prefix".

  * "Py_GetProgramFullPath()": obtenha "sys.executable".

  * "Py_GetProgramName()": obtenha "sys.executable".

  * "Py_GetPythonHome()": obtenha "PyConfig.home" ou a variável de
    ambiente "PYTHONHOME".

  Funções agendadas para remoção no Python 3.15. (Contribuição de
  Victor Stinner em gh-105145.)

* Descontinua a função "PyImport_ImportModuleNoBlock()" que é apenas
  um apelido para "PyImport_ImportModule()" desde o Python 3.3.
  Programado para remoção no Python 3.15. (Contribuição de Victor
  Stinner em gh-105396.)

* Descontinua as funções "PyWeakref_GetObject()" e
  "PyWeakref_GET_OBJECT()", que retornam uma *referência emprestada*:
  use a nova função "PyWeakref_GetRef()" em vez disso, ela retorna uma
  *referência forte*. O projeto pythoncapi-compat pode ser usado para
  obter "PyWeakref_GetRef()" no Python 3.12 e versões anteriores.
  (Contribuição de Victor Stinner em gh-105927.)

* Descontinua as funções "PyEval_GetBuiltins()", "PyEval_GetGlobals()"
  e "PyEval_GetLocals()", que retornam uma *referência emprestada*.
  Consulte os avisos de descontinuação em cada função para ver as
  substituições recomendadas. (Suavemente descontinuadas como parte da
  **PEP 667**.)


Remoção pendente no Python 3.14
-------------------------------

* A criação de tipos imutáveis ​​("Py_TPFLAGS_IMMUTABLETYPE") com
  bases mutáveis ​​usando a API C.

* Funções para configurar a inicialização do Python, descontinuadas no
  Python 3.11:

  * "PySys_SetArgvEx()": defina "PyConfig.argv".

  * "PySys_SetArgv()": defina "PyConfig.argv".

  * "Py_SetProgramName()": defina "PyConfig.program_name".

  * "Py_SetPythonHome()": defina "PyConfig.home".

  A API "Py_InitializeFromConfig()" deve ser usada com "PyConfig".

* Variáveis de configuração globais

  * "Py_DebugFlag": use "PyConfig.parser_debug"

  * "Py_VerboseFlag": use "PyConfig.verbose"

  * "Py_QuietFlag": use "PyConfig.quiet"

  * "Py_InteractiveFlag": use "PyConfig.interactive"

  * "Py_InspectFlag": use "PyConfig.inspect"

  * "Py_OptimizeFlag": use "PyConfig.optimization_level"

  * "Py_NoSiteFlag": use "PyConfig.site_import"

  * "Py_BytesWarningFlag": use "PyConfig.bytes_warning"

  * "Py_FrozenFlag": use "PyConfig.pathconfig_warnings"

  * "Py_IgnoreEnvironmentFlag": use "PyConfig.use_environment"

  * "Py_DontWriteBytecodeFlag": use "PyConfig.write_bytecode"

  * "Py_NoUserSiteDirectory": use "PyConfig.user_site_directory"

  * "Py_UnbufferedStdioFlag": use "PyConfig.buffered_stdio"

  * "Py_HashRandomizationFlag": use "PyConfig.use_hash_seed" and
    "PyConfig.hash_seed"

  * "Py_IsolatedFlag": use "PyConfig.isolated"

  * "Py_LegacyWindowsFSEncodingFlag": use
    "PyPreConfig.legacy_windows_fs_encoding"

  * "Py_LegacyWindowsStdioFlag": use "PyConfig.legacy_windows_stdio"

  * "Py_FileSystemDefaultEncoding": use "PyConfig.filesystem_encoding"

  * "Py_HasFileSystemDefaultEncoding": use
    "PyConfig.filesystem_encoding"

  * "Py_FileSystemDefaultEncodeErrors": use
    "PyConfig.filesystem_errors"

  * "Py_UTF8Mode": use "PyPreConfig.utf8_mode" (see
    "Py_PreInitialize()")

  A API "Py_InitializeFromConfig()" deve ser usada com "PyConfig".


Remoção pendente no Python 3.15
-------------------------------

* A cópia empacotada do "libmpdecimal".

* "PyImport_ImportModuleNoBlock()": use "PyImport_ImportModule()".

* "PyWeakref_GET_OBJECT()": use "PyWeakref_GetRef()".

* "PyWeakref_GetObject()": use "PyWeakref_GetRef()".

* O tipo "Py_UNICODE_WIDE": use "wchar_t".

* O tipo "Py_UNICODE": use "wchar_t".

* Funções de inicialização do Python

  * "PySys_ResetWarnOptions()": apague "sys.warnoptions" e
    "warnings.filters".

  * "Py_GetExecPrefix()": obtenha "sys.exec_prefix".

  * "Py_GetPath()": obtenha "sys.path".

  * "Py_GetPrefix()": obtenha "sys.prefix".

  * "Py_GetProgramFullPath()": obtenha "sys.executable".

  * "Py_GetProgramName()": obtenha "sys.executable".

  * "Py_GetPythonHome()": obtenha "PyConfig.home" ou a variável de
    ambiente "PYTHONHOME".


Remoção pendente em versões futuras
-----------------------------------

As APIs a seguir foram descontinuadas em versões anteriores do Python
e serão removidas, embora atualmente não haja uma data agendada para
sua remoção.

* "Py_TPFLAGS_HAVE_FINALIZE": desnecessário desde o Python 3.8.

* "PyErr_Fetch()": use "PyErr_GetRaisedException()".

* "PyErr_NormalizeException()": use "PyErr_GetRaisedException()".

* "PyErr_Restore()": use "PyErr_SetRaisedException()".

* "PyModule_GetFilename()": use "PyModule_GetFilenameObject()".

* "PyOS_AfterFork()": use "PyOS_AfterFork_Child()".

* "PySlice_GetIndicesEx()".

* "PyUnicode_AsDecodedObject()".

* "PyUnicode_AsDecodedUnicode()".

* "PyUnicode_AsEncodedObject()".

* "PyUnicode_AsEncodedUnicode()".

* "PyUnicode_READY()": desnecessário desde o Python 3.12.

* "_PyErr_ChainExceptions()".

* O membro "PyBytesObject.ob_shash": chame "PyObject_Hash()".

* O membro "PyDictObject.ma_version_tag".

* API TLS:

  * "PyThread_create_key()": use "PyThread_tss_alloc()".

  * "PyThread_delete_key()": use "PyThread_tss_free()".

  * "PyThread_set_key_value()": use "PyThread_tss_set()".

  * "PyThread_get_key_value()": use "PyThread_tss_get()".

  * "PyThread_delete_key_value()": use "PyThread_tss_delete()".

  * "PyThread_ReInitTLS()": não mais necessário.

* Remove a constante "PY_TIMEOUT_MAX" ​​não documentada da API C
  limitada. (Contribuição de Victor Stinner em gh-110014.)


Mudanças em teste de regressão
==============================

* Python construído com "--with-pydebug" do "configure" agora oferece
  suporte a uma opção de linha de comando "-X presite=pacote.módulo".
  Se usado, especifica um módulo que deve ser importado no início do
  ciclo de vida do interpretador, antes que "site.py" seja executado.
  (Contribuição de Łukasz Langa em gh-110769.)
