Descontinuações

Remoção pendente no Python 3.17

  • datetime:

    • strptime() chama usando uma string de formato contendo %e (dia do mês) sem um ano. Isso está descontinuado desde Python 3.15. (Contribuição de Stan Ulbrych em gh-70647.)

  • collections.abc:

    • collections.abc.ByteString está agendado para remoção no Python 3.17.

      Use isinstance(obj, collections.abc.Buffer) para testar se obj implementa o protocolo de buffer em tempo de execução. Para uso em anotações de tipo, use Buffer ou uma união que especifique explicitamente os tipos suportados pelo seu código (por exemplo, bytes | bytearray | memoryview).

      ByteString foi originalmente concebido para ser uma classe abstrata que serviria como um supertipo de bytes e bytearray. No entanto, como o ABC nunca teve métodos, saber que um objeto era uma instância de ByteString nunca lhe dizia nada de útil sobre o objeto. Outros tipos comuns de buffer, como memoryview, também nunca foram entendidos como subtipos de ByteString (seja em tempo de execução ou por verificadores de tipo estáticos).

      Veja PEP 688 para mais detalhes. (Contribuição de Shantanu Jain em gh-91896.)

  • encodings:

    • Passar nomes de codificação não ASCII para encodings.normalize_encoding() está descontinuado e sua remoção está prevista para o Python 3.17. (Contribuição de Stan Ulbrych em gh-136702.)

  • profile:

    • O módulo profile está descontinuado e será removido no Python 3.17. Em vez disso, utilize profiling.tracing, que oferece uma API compatível. Consulte a PEP 799 para obter detalhes. (Contribuição de Pablo Galindo e László Kiss Kollár em gh-138122.)

  • webbrowser:

    • webbrowser.MacOSXOSAScript está descontinuado em favor de webbrowser.MacOS. (gh-137586)

  • typing:

    • Antes do Python 3.14, as uniões antigas eram implementadas usando a classe privada typing._UnionGenericAlias. Essa classe não é mais necessária para a implementação, mas foi mantida para compatibilidade com versões anteriores, com remoção prevista para o Python 3.17. Os usuários devem usar auxiliares de introspecção documentados, como typing.get_origin() e typing.get_args(), em vez de depender de detalhes de implementação privada.

    • typing.ByteString, obsoleto desde o Python 3.9, está programado para ser removido no Python 3.17.

      Use isinstance(obj, collections.abc.Buffer) para testar se obj implementa o protocolo de buffer em tempo de execução. Para uso em anotações de tipo, use Buffer ou uma união que especifique explicitamente os tipos suportados pelo seu código (por exemplo, bytes | bytearray | memoryview).

      ByteString foi originalmente concebido para ser uma classe abstrata que serviria como um supertipo de bytes e bytearray. No entanto, como o ABC nunca teve métodos, saber que um objeto era uma instância de ByteString nunca lhe dizia nada de útil sobre o objeto. Outros tipos comuns de buffer, como memoryview, também nunca foram entendidos como subtipos de ByteString (seja em tempo de execução ou por verificadores de tipo estáticos).

      Veja PEP 688 para mais detalhes. (Contribuição de Shantanu Jain em gh-91896.)

  • tkinter:

    • Os métodos trace_variable(), trace() (um apelido de trace_variable()), trace_vdelete() e trace_vinfo() da classe tkinter.Variable, descontinuados desde o Python 3.14, têm remoção prevista para o Python 3.17. Em vez deles, utilize trace_add(), trace_remove() e trace_info(). (Contribuição de Serhiy Storchaka em gh-120220.)

Remoção pendente no Python 3.18

  • Não aceita mais um valor booleano quando um descritor de arquivo é esperado. (Contribuição de Serhiy Storchaka em gh-82626.)

  • decimal:

    • O especificador de formato de Decimal não padrão e não documentado 'N', que só é suportado na implementação C do módulo decimal, foi descontinuada desde o Python 3.13. (Contribuição de Serhiy Storchaka em gh-89902.)

  • Descontinuações definidas por PEP 829:

    • Linhas de import em arquivos name.pth são silenciosamente ignoradas.

    (Contribuição de Barry Warsaw em gh-148641.)

Remoção pendente no Python 3.19

  • ctypes:

    • Troca implícita para o layout de estrutura compatível com MSVC definindo _pack_, mas não _layout_ em plataformas não Windows.

  • hashlib:

    • Em construtores de funções de hash, como new(), ou nos construtores nomeados diretamente pelo algoritmo de hash, como md5() e sha256(), o parâmetro opcional de dados iniciais também podia ser passado como um argumento nomeado data= ou string= em várias implementações do hashlib.

      O suporte ao nome do argumento nomeado string está agora descontinuado e previsto para ser removido no Python 3.19.

      Antes do Python 3.13, o parâmetro nomeado string não era suportado corretamente, dependendo da implementação de funções de hash do backend. Dê preferência a passar os dados iniciais como um argumento posicional para garantir a máxima compatibilidade com versões anteriores.

  • http.cookies:

  • imaplib:

    • A alteração de IMAP4.file agora está descontinuado e programado para remoção no Python 3.19. Esta propriedade agora não é utilizada e alterar seu valor não fecha automaticamente o arquivo atual.

      Antes do Python 3.14, essa propriedade era usada para implementar os métodos read() e readline() correspondentes para IMAP4, mas isso não ocorre mais desde então.

  • tkinter:

Remoção pendente no Python 3.20

Pending removal in Python 3.21

Remoção pendente em versões futuras

As APIs a seguir serão removidas no futuro, 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 descontinuado.

    • A passagem do argumento nomeado não documentado prefix_chars para add_argument_group() agora está descontinuado.

    • O conversor de tipo argparse.FileType está descontinuado.

  • builtins:

    • 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.

    • Passar um número complexo como argumento real ou imag no construtor complex() agora está descontinuado; deve ser passado apenas como um único argumento posicional. (Contribuição de Serhiy Storchaka em gh-109218.)

  • 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.)

  • codecs: use open() em vez de codecs.open(). (gh-133038)

  • 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:

    • 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.

  • logging: o método warn() foi descontinuado desde o Python 3.3, use warning().

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

  • os: chame os.register_at_fork() em um processo multithread.

  • os.path: os.path.commonprefix() está descontinuada; use os.path.commonpath() para prefixos de caminho. A função os.path.commonprefix() está sendo descontinuada por possuir nome e módulo enganosos. O uso dessa função não é seguro para prefixos de caminho, apesar de ela estar incluída em um módulo voltado à manipulação de caminhos; isso significa que é fácil introduzir acidentalmente vulnerabilidades de path traversal (travessia de diretórios) em programas Python ao utilizá-la.

  • 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.)

  • 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

  • Métodos de threading:

  • typing.Text (gh-92332).

  • A classe interna typing._UnionGenericAlias não é mais usada para implementar typing.Union. Para preservar a compatibilidade com usuários que utilizam esta classe privada, uma correção de compatibilidade será fornecida pelo menos até a versão 3.17 do Python. (Contribuição de Jelle Zijlstra em gh-105499.)

  • 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()

  • 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.

  • sys._clear_type_cache() está descontinuada: use sys._clear_internal_caches().

descontinuações suave

Não há planos para remover APIs suavemente descontinuadas

  • re.match() e re.Pattern.match() estão agora suavemente descontinuados em favor das novas APIs re.prefixmatch() e re.Pattern.prefixmatch(), adicionadas como nomes alternativos e mais explícitos. Elas visam reduzir a confusão sobre o significado de match, seguindo o princípio do Zen do Python: “Explícito é melhor que implícito”. A maioria das bibliotecas de expressões regulares de outras linguagens utiliza uma API chamada match para a funcionalidade que o Python sempre chamou de search.

    Não planejamos remover o nome mais antigo match(), pois ele tem sido utilizado no código há mais de 30 anos. Códigos que oferecem suporte a versões mais antigas do Python devem continuar utilizando match(), enquanto novos códigos devem dar preferência a prefixmatch(). Veja prefixmatch() vs. match().

    (Contribuição de Gregory P. Smith em gh-86519 e Hugo van Kemenade em gh-148100.)

Descontinuações na API C

Remoção pendente no Python 3.18

Remoção pendente no Python 3.19

  • PEP 456 suporte para incorporadores à definição do esquema de hashing de strings.

Remoção pendente no Python 3.20

Remoção pendente em versões futuras

As APIs a seguir foram descontinuadas e serão removidas, embora atualmente não haja uma data agendada para sua remoção.