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

  * 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; em vez disso, use BytesIO e o modo binário.

* "os": chame "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".

* The "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.
