# Descontinuações

## Remoção pendente no Python 3.13

Módulos (veja PEP 594):

- `aifc`

- `audioop`

- `cgi`

- `cgitb`

- `chunk`

- `crypt`

- `imghdr`

- `mailcap`

- `msilib`

- `nis`

- `nntplib`

- `ossaudiodev`

- `pipes`

- `sndhdr`

- `spwd`

- `sunau`

- `telnetlib`

- `uu`

- `xdrlib`

Outros módulos:

- `lib2to3` e o programa 2to3 (gh-84540)

APIs:

- `configparser.LegacyInterpolation` (gh-90765)

- `locale.resetlocale()` (gh-90817)

- `turtle.RawTurtle.settiltangle()` (gh-50096)

- `unittest.findTestCases()` (gh-50096)

- `unittest.getTestCaseNames()` (gh-50096)

- `unittest.makeSuite()` (gh-50096)

- `unittest.TestProgram.usageExit()` (gh-67048)

- `webbrowser.MacOSX` (gh-86421)

- Encadeamento do descritor de `classmethod` (gh-89519)

- Métodos descontinuados de `importlib.resources`:

  - `contents()`

  - `is_resource()`

  - `open_binary()`

  - `open_text()`

  - `path()`

  - `read_binary()`

  - `read_text()`

  Use `importlib.resources.files()` em vez disso. Confira importlib-resources: Migrando do legado , em inglês (gh-106531)

## 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`

  Em vez disso, use `ast.Constant`. (Contribuição de Serhiy Storchaka em gh-90953.)

- `asyncio`:

  - As classes filhas dos observadores `MultiLoopChildWatcher`, `FastChildWatcher`, `AbstractChildWatcher` e `SafeChildWatcher` foram descontinuadas e serão removidas no Python 3.14. (Contribuição de Kumar Aditya em gh-94597.)

  - `asyncio.set_child_watcher()`, `asyncio.get_child_watcher()`, `asyncio.AbstractEventLoopPolicy.set_child_watcher()` e `asyncio.AbstractEventLoopPolicy.get_child_watcher()` foram descontinuados e serão removidos no Python 3.14. (Contribuição de Kumar Aditya em gh-94597.)

  - O método `get_event_loop()` da política de laço de eventos padrão agora emite um `DeprecationWarning` se não houver nenhum laço de eventos atual definido e decidir criar um. (Contribuição de Serhiy Storchaka e Guido van Rossum em gh-100160.)

- `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 de `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()`. (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` .

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

- `importlib`:

  - Método `load_module()`: use `exec_module()`.

- `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 programado para remoção no Python 3.15. Do Python 3.13 em diante, 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.)

- `sysconfig`:

  - O argumento check_home de `sysconfig.is_python_build()` foi descontinuado desde o Python 3.12.

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

- `types`:

  - `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.15. (Contribuição de Nikita Sobolev em gh-101866.)

- `typing`:

  - 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

- O sistema de importação:

  - A definição de `__loader__` em um módulo enquanto falha na definição de `__spec__.loader` está descontinuado. No Python 3.16, `__loader__` deixará de ser definido ou levado em consideração pelo sistema de importação ou pela biblioteca padrão.

- `array`: `array.array`: tipo `'u'` (`wchar_t`): use o tipo `'w'` (`Py_UCS4`).

- `builtins`: `~bool`, inversão bit a bit em booleanos.

- `symtable`: Descontinua `symtable.Class.get_methods()` por falta de interesse. (Contribuição de Bénédikt Tran em gh-119698.)

## 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 descontinuados.

- código de formatação `'u'` do `array` (gh-57281)

- `builtins`:

  - `bool(NotImplemented)`.

  - Geradores: a assinatura `throw(type, exc, tb)` e `athrow(type, exc, tb)` está descontinuada: use `throw(exc)` e `athrow(exc)`, a assinatura com um único argumento.

  - 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__()`.

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

- `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: 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, 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`

- 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()`.

## Descontinuações na API C

### Remoção pendente no Python 3.14

- O campo `ma_version_tag` em `PyDictObject` para módulos de extensão ( PEP 699; gh-101193).

- A criação de `tipos imutáveis` com bases mutáveis (gh-95388).

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

  Em vez disso, 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` e `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`. (veja `Py_PreInitialize()`)

  Em vez disso, 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_GetObject()` e `PyWeakref_GET_OBJECT()`: use `PyWeakref_GetRef()`.

- O tipo `Py_UNICODE` e a macro `Py_UNICODE_WIDE`: use `wchar_t`.

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

  - `PySys_ResetWarnOptions()`: apague `sys.warnoptions` e `warnings.filters`.

  - `Py_GetExecPrefix()`: leia `sys.exec_prefix`.

  - `Py_GetPath()`: leia `sys.path`.

  - `Py_GetPrefix()`: leia `sys.prefix`.

  - `Py_GetProgramFullPath()`: leia `sys.executable`.

  - `Py_GetProgramName()`: leia `sys.executable`.

  - `Py_GetPythonHome()`: leia `PyConfig.home` ou a variável de ambiente `PYTHONHOME`.

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

- `Py_TPFLAGS_HAVE_FINALIZE`: desnecessária 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()`: use `PySlice_Unpack()` e `PySlice_AdjustIndices()`.

- `PyUnicode_AsDecodedObject()`: use `PyCodec_Decode()`.

- `PyUnicode_AsDecodedUnicode()`: use `PyCodec_Decode()`.

- `PyUnicode_AsEncodedObject()`: use `PyCodec_Encode()`.

- `PyUnicode_AsEncodedUnicode()`: use `PyCodec_Encode()`.

- `PyUnicode_READY()`: desnecessário desde o Python 3.12

- `PyErr_Display()`: use `PyErr_DisplayException()`.

- `_PyErr_ChainExceptions()`: use `_PyErr_ChainExceptions1()`.

- O membro `PyBytesObject.ob_shash`: chame `PyObject_Hash()`.

- O membro `PyDictObject.ma_version_tag`.

- API do Thread Local Storage (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()`: desnecessário desde o Python 3.7.