Desusos
*******


Eliminación pendiente en Python 3.14
====================================

* "argparse": Los parámetros *type*, *choices* y *metavar* de
  "argparse.BooleanOptionalAction" están obsoletos y se eliminarán en
  la versión 3.14. (Contribuido por Nikita Sobolev en gh-92248.)

* "ast": Las siguientes funciones han quedado obsoletas en la
  documentación desde Python 3.8, ahora hacen que se emita un
  "DeprecationWarning" en tiempo de ejecución cuando se accede a ellas
  o se las utiliza, y se eliminarán en Python 3.14:

  * "ast.Num"

  * "ast.Str"

  * "ast.Bytes"

  * "ast.NameConstant"

  * "ast.Ellipsis"

  Utilice "ast.Constant" en su lugar. (Contribuido por Serhiy
  Storchaka en gh-90953.)

* "asyncio":

  * Las clases de supervisión secundaria "MultiLoopChildWatcher",
    "FastChildWatcher", "AbstractChildWatcher" y "SafeChildWatcher"
    están obsoletas y se eliminarán en Python 3.14. (Contribuido por
    Kumar Aditya en gh-94597.)

  * "asyncio.set_child_watcher()", "asyncio.get_child_watcher()",
    "asyncio.AbstractEventLoopPolicy.set_child_watcher()" y
    "asyncio.AbstractEventLoopPolicy.get_child_watcher()" están
    obsoletos y se eliminarán en Python 3.14. (Contribuido por Kumar
    Aditya en gh-94597.)

  * El método "get_event_loop()" de la política de bucle de eventos
    predeterminada ahora emite un "DeprecationWarning" si no hay
    ningún bucle de eventos definido actualmente y decide crear uno.
    (Contribuido por Serhiy Storchaka y Guido van Rossum en
    gh-100160.)

* "collections.abc": "ByteString" obsoleto. Se prefiere "Sequence" o
  "Buffer". Para uso en tipificación, se prefiere una unión, como
  "bytes | bytearray" o "collections.abc.Buffer". (Contribuido por
  Shantanu Jain en gh-91896.)

* "email": Se ha descontinuado el parámetro *isdst* en
  "email.utils.localtime()". (Contribuido por Alan Williams en
  gh-72346.)

* Clases obsoletas de "importlib.abc":

  * "importlib.abc.ResourceReader"

  * "importlib.abc.Traversable"

  * "importlib.abc.TraversableResources"

  Utilice clases "importlib.resources.abc" en su lugar:

  * "importlib.resources.abc.Traversable"

  * "importlib.resources.abc.TraversableResources"

  (Contribuido por Jason R. Coombs y Hugo van Kemenade en gh-93963.)

* "itertools" tenía un soporte indocumentado, ineficiente,
  históricamente lleno de errores e inconsistente para operaciones de
  copia, copia profunda y pickle. Esto se eliminará en la versión 3.14
  para lograr una reducción significativa en el volumen de código y la
  carga de mantenimiento. (Contribuido por Raymond Hettinger en
  gh-101588.)

* "multiprocessing": El método de inicio predeterminado cambiará a uno
  más seguro en Linux, BSD y otras plataformas POSIX que no sean macOS
  donde "'fork'" es actualmente el predeterminado (gh-84559). Agregar
  una advertencia de tiempo de ejecución sobre esto se consideró
  demasiado disruptivo ya que no se espera que la mayoría del código
  tenga en cuenta esto. Use las API "get_context()" o
  "set_start_method()" para especificar explícitamente cuándo su
  código *requires* "'fork'". Consulte Contextos y métodos de inicio.

* "pathlib": "is_relative_to()" y "relative_to()": pasar argumentos
  adicionales está obsoleto.

* "pkgutil": "find_loader()" y "get_loader()" ahora generan
  "DeprecationWarning"; utilice "importlib.util.find_spec()" en su
  lugar. (Contribuido por Nikita Sobolev en gh-97850.)

* "pty":

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

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

* "sqlite3":

  * "version" y "version_info".

  * "execute()" y "executemany()" si se utilizan named placeholders y
    *parameters* es una secuencia en lugar de "dict".

* "typing": "ByteString", obsoleto desde Python 3.9, ahora hace que se
  emita un "DeprecationWarning" cuando se utiliza.

* "urllib": "urllib.parse.Quoter" está obsoleto: no estaba previsto
  que fuera una API pública. (Contribuido por Gregory P. Smith en
  gh-88168.)


Eliminación pendiente en Python 3.15
====================================

* The import system:

  * Setting "__cached__" on a module while failing to set
    "__spec__.cached" is deprecated. In Python 3.15, "__cached__" will
    cease to be set or take into consideration by the import system or
    standard library. (gh-97879)

  * Setting "__package__" on a module while failing to set
    "__spec__.parent" is deprecated. In Python 3.15, "__package__"
    will cease to be set or take into consideration by the import
    system or standard library. (gh-97879)

* "ctypes":

  * La función "ctypes.SetPointerType()" no documentada ha quedado
    obsoleta desde Python 3.13.

* "http.server":

  * El obsoleto y poco utilizado "CGIHTTPRequestHandler" ha quedado
    obsoleto desde Python 3.13. No existe un reemplazo directo.
    *Anything* es mejor que CGI para interconectar un servidor web con
    un controlador de solicitudes.

  * La bandera "--cgi" de la interfaz de línea de comandos **python -m
    http.server** ha quedado obsoleta desde Python 3.13.

* "importlib":

  * Método "load_module()": utilice "exec_module()" en su lugar.

* "locale":

  * La función "getdefaultlocale()" ha quedado obsoleta desde Python
    3.11. Su eliminación se había planeado originalmente para Python
    3.13 (gh-90817), pero se pospuso hasta Python 3.15. Utilice
    "getlocale()", "setlocale()" y "getencoding()" en su lugar.
    (Contribuido por Hugo van Kemenade en gh-111187.)

* "pathlib":

  * "PurePath.is_reserved()" ha quedado obsoleto desde Python 3.13.
    Utilice "os.path.isreserved()" para detectar rutas reservadas en
    Windows.

* "platform":

  * "java_ver()" ha quedado obsoleto desde Python 3.13. Esta función
    solo es útil para la compatibilidad con Jython, tiene una API
    confusa y, en gran medida, no se ha probado.

* "sysconfig":

  * The *check_home* argument of "sysconfig.is_python_build()" has
    been deprecated since Python 3.12.

* "threading":

  * "RLock()" no acepta argumentos en Python 3.15. El paso de
    cualquier argumento ha quedado obsoleto desde Python 3.14, ya que
    la versión de Python no permite ningún argumento, pero la versión
    de C permite cualquier cantidad de argumentos posicionales o de
    palabras clave, ignorando todos los argumentos.

* "types":

  * "types.CodeType": Accessing "co_lnotab" was deprecated in **PEP
    626** since 3.10 and was planned to be removed in 3.12, but it
    only got a proper "DeprecationWarning" in 3.12. May be removed in
    3.15. (Contributed by Nikita Sobolev in gh-101866.)

* "typing":

  * La sintaxis de argumentos de palabras clave no documentada para
    crear clases "NamedTuple" (p. ej., "Point = NamedTuple("Point",
    x=int, y=int)") ha quedado obsoleta desde Python 3.13. En su
    lugar, utilice la sintaxis basada en clases o la sintaxis
    funcional.

  * La función decoradora "typing.no_type_check_decorator()" ha
    quedado obsoleta desde Python 3.13. Después de ocho años en el
    módulo "typing", todavía no ha sido compatible con ningún
    verificador de tipos importante.

* "wave":

  * Los métodos "getmark()", "setmark()" y "getmarkers()" de las
    clases "Wave_read" y "Wave_write" han quedado obsoletos desde
    Python 3.13.


Pending removal in Python 3.16
==============================

* The import system:

  * Setting "__loader__" on a module while failing to set
    "__spec__.loader" is deprecated. In Python 3.16, "__loader__" will
    cease to be set or taken into consideration by the import system
    or the standard library.

* "array":

  * El código de formato "'u'" ("wchar_t") ha quedado obsoleto en la
    documentación desde Python 3.3 y en el entorno de ejecución desde
    Python 3.13. Utilice el código de formato "'w'" ("Py_UCS4") para
    caracteres Unicode.

* "asyncio":

  * "asyncio.iscoroutinefunction()" is deprecated and will be removed
    in Python 3.16, use "inspect.iscoroutinefunction()" instead.
    (Contributed by Jiahao Li and Kumar Aditya in gh-122875.)

* "builtins":

  * La inversión bit a bit en tipos booleanos, "~True" o "~False", ha
    quedado obsoleta desde Python 3.12, ya que produce resultados
    sorprendentes y poco intuitivos ("-2" y "-1"). En su lugar,
    utilice "not x" para la negación lógica de un valor booleano. En
    el caso poco frecuente de que necesite la inversión bit a bit del
    entero subyacente, convierta a "int" explícitamente ("~int(x)").

* "shutil":

  * La excepción "ExecError" ha quedado obsoleta desde Python 3.14. No
    ha sido utilizada por ninguna función en "shutil" desde Python 3.4
    y ahora es un alias de "RuntimeError".

* "symtable":

  * El método "Class.get_methods" ha quedado obsoleto desde Python
    3.14.

* "sys":

  * La función "_enablelegacywindowsfsencoding()" ha quedado obsoleta
    desde Python 3.13. En su lugar, utilice la variable de entorno
    "PYTHONLEGACYWINDOWSFSENCODING".

* "tarfile":

  * El atributo "TarFile.tarfile", no documentado ni utilizado, ha
    quedado obsoleto desde Python 3.13.


Pendiente de eliminación en futuras versiones
=============================================

Las siguientes API se eliminarán en el futuro, aunque actualmente no
hay una fecha programada para su eliminación.

* "argparse": Los grupos de argumentos anidados y los grupos
  mutuamente excluyentes anidados están obsoletos.

* Código de formato "array" de "'u'" (gh-57281)

* "builtins":

  * "bool(NotImplemented)".

  * Generadores: las firmas "throw(type, exc, tb)" y "athrow(type,
    exc, tb)" están obsoletas: utilice "throw(exc)" y "athrow(exc)" en
    su lugar, la firma de argumento único.

  * Actualmente, Python acepta literales numéricos seguidos
    inmediatamente de palabras clave, por ejemplo, "0in x", "1or x",
    "0if 1else 2". Permite expresiones confusas y ambiguas como
    "[0x1for x in y]" (que se puede interpretar como "[0x1 for x in
    y]" o "[0x1f or x in y]"). Se genera una advertencia de sintaxis
    si el literal numérico va seguido inmediatamente de una de las
    palabras clave "and", "else", "for", "if", "in", "is" y "or". En
    una versión futura, se cambiará a un error de sintaxis. (gh-87999)

  * Compatibilidad con los métodos "__index__()" y "__int__()" que
    devuelven un tipo que no es int: estos métodos serán necesarios
    para devolver una instancia de una subclase estricta de "int".

  * Compatibilidad con el método "__float__()" que devuelve una
    subclase estricta de "float": estos métodos serán necesarios para
    devolver una instancia de "float".

  * Compatibilidad con el método "__complex__()" que devuelve una
    subclase estricta de "complex": estos métodos serán necesarios
    para devolver una instancia de "complex".

  * Delegación del método "int()" al "__trunc__()".

  * Ahora está obsoleto el paso de un número complejo como argumento
    *real* o *imag* en el constructor "complex()"; solo debe pasarse
    como un único argumento posicional. (Contribuido por Serhiy
    Storchaka en gh-109218.)

* "calendar": Las constantes "calendar.January" y "calendar.February"
  han quedado obsoletas y han sido reemplazadas por "calendar.JANUARY"
  y "calendar.FEBRUARY". (Contribuido por Prince Roshan en gh-103636.)

* "codeobject.co_lnotab": utilice el método "codeobject.co_lines()" en
  su lugar.

* "datetime":

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

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

* "gettext": El valor plural debe ser un número entero.

* "importlib":

  * "cache_from_source()" El parámetro *debug_override* está obsoleto:
    utilice el parámetro *optimization* en su lugar.

* "importlib.metadata":

  * Interfaz de tupla "EntryPoints".

  * "None" implícito en los valores de retorno.

* "logging": el método "warn()" ha quedado obsoleto desde Python 3.3,
  utilice "warning()" en su lugar.

* "mailbox": El uso del modo de entrada y texto StringIO está
  obsoleto; en su lugar, utilice BytesIO y el modo binario.

* "os": Llamada a "os.register_at_fork()" en un proceso multiproceso.

* "pydoc.ErrorDuringImport": Un valor de tupla para el parámetro
  *exc_info* está obsoleto, utilice una instancia de excepción.

* "re": Ahora se aplican reglas más estrictas para las referencias
  numéricas de grupos y los nombres de grupos en expresiones
  regulares. Ahora solo se aceptan secuencias de dígitos ASCII como
  referencia numérica. El nombre de grupo en patrones de bytes y
  cadenas de reemplazo ahora solo puede contener letras y dígitos
  ASCII y guiones bajos. (Contribuido por Serhiy Storchaka en
  gh-91760.)

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

* "shutil": El parámetro *onerror* de "rmtree()" está obsoleto en
  Python 3.12; utilice el parámetro *onexc* en su lugar.

* Opciones y protocolos "ssl":

  * "ssl.SSLContext" sin argumento de protocolo está obsoleto.

  * "ssl.SSLContext": "set_npn_protocols()" y
    "selected_npn_protocol()" están obsoletos: utilice ALPN en su
    lugar.

  * Opciones de "ssl.OP_NO_SSL*"

  * Opciones 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 "threading":

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

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

  * "threading.Thread.isDaemon()", "threading.Thread.setDaemon()":
    utilice el atributo "threading.Thread.daemon".

  * "threading.Thread.getName()", "threading.Thread.setName()":
    utilice el atributo "threading.Thread.name".

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

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

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

* "unittest.IsolatedAsyncioTestCase": está obsoleto devolver un valor
  que no sea "None" de un caso de prueba.

* Funciones obsoletas de "urllib.parse": "urlparse()" en su lugar

  * "splitattr()"

  * "splithost()"

  * "splitnport()"

  * "splitpasswd()"

  * "splitport()"

  * "splitquery()"

  * "splittag()"

  * "splittype()"

  * "splituser()"

  * "splitvalue()"

  * "to_bytes()"

* "urllib.request": el estilo "URLopener" y "FancyURLopener" de
  invocar solicitudes está obsoleto. Utilice las funciones y métodos
  "urlopen()" más nuevos.

* "wsgiref": "SimpleHandler.stdout.write()" no debería realizar
  escrituras parciales.

* "xml.etree.ElementTree": La prueba del valor de verdad de un
  "Element" está obsoleta. En una versión futura, siempre devolverá
  "True". En su lugar, es preferible realizar pruebas explícitas
  "len(elem)" o "elem is not None".

* "zipimport.zipimporter.load_module()" está obsoleto: utilice
  "exec_module()" en su lugar.


Desuso de la API C
==================


Eliminación pendiente en Python 3.14
------------------------------------

* El campo "ma_version_tag" en "PyDictObject" para módulos de
  extensión (**PEP 699**; gh-101193).

* Creando "immutable types" con bases mutables (gh-95388).

* Funciones para configurar la inicialización de Python, obsoletas en
  Python 3.11:

  * "PySys_SetArgvEx()": Establezca "PyConfig.argv" en su lugar.

  * "PySys_SetArgv()": Establezca "PyConfig.argv" en su lugar.

  * "Py_SetProgramName()": Establezca "PyConfig.program_name" en su
    lugar.

  * "Py_SetPythonHome()": Establezca "PyConfig.home" en su lugar.

  La API "Py_InitializeFromConfig()" debe utilizarse con "PyConfig".

* Variables de configuración global:

  * "Py_DebugFlag": Utilice "PyConfig.parser_debug" en su lugar.

  * "Py_VerboseFlag": Utilice "PyConfig.verbose" en su lugar.

  * "Py_QuietFlag": Utilice "PyConfig.quiet" en su lugar.

  * "Py_InteractiveFlag": Utilice "PyConfig.interactive" en su lugar.

  * "Py_InspectFlag": Utilice "PyConfig.inspect" en su lugar.

  * "Py_OptimizeFlag": Utilice "PyConfig.optimization_level" en su
    lugar.

  * "Py_NoSiteFlag": Utilice "PyConfig.site_import" en su lugar.

  * "Py_BytesWarningFlag": Utilice "PyConfig.bytes_warning" en su
    lugar.

  * "Py_FrozenFlag": Utilice "PyConfig.pathconfig_warnings" en su
    lugar.

  * "Py_IgnoreEnvironmentFlag": Utilice "PyConfig.use_environment" en
    su lugar.

  * "Py_DontWriteBytecodeFlag": Utilice "PyConfig.write_bytecode" en
    su lugar.

  * "Py_NoUserSiteDirectory": Utilice "PyConfig.user_site_directory"
    en su lugar.

  * "Py_UnbufferedStdioFlag": Utilice "PyConfig.buffered_stdio" en su
    lugar.

  * "Py_HashRandomizationFlag": Utilice "PyConfig.use_hash_seed" y
    "PyConfig.hash_seed" en su lugar.

  * "Py_IsolatedFlag": Utilice "PyConfig.isolated" en su lugar.

  * "Py_LegacyWindowsFSEncodingFlag": Utilice
    "PyPreConfig.legacy_windows_fs_encoding" en su lugar.

  * "Py_LegacyWindowsStdioFlag": Utilice
    "PyConfig.legacy_windows_stdio" en su lugar.

  * "Py_FileSystemDefaultEncoding": Utilice
    "PyConfig.filesystem_encoding" en su lugar.

  * "Py_HasFileSystemDefaultEncoding": Utilice
    "PyConfig.filesystem_encoding" en su lugar.

  * "Py_FileSystemDefaultEncodeErrors": Utilice
    "PyConfig.filesystem_errors" en su lugar.

  * "Py_UTF8Mode": Utilice "PyPreConfig.utf8_mode" en su lugar. (ver
    "Py_PreInitialize()")

  La API "Py_InitializeFromConfig()" debe utilizarse con "PyConfig".


Eliminación pendiente en Python 3.15
------------------------------------

* La copia incluida de "libmpdecimal".

* "PyImport_ImportModuleNoBlock()": utilice "PyImport_ImportModule()"
  en su lugar.

* "PyWeakref_GetObject()" y "PyWeakref_GET_OBJECT()": utilice
  "PyWeakref_GetRef()" en su lugar.

* Tipo "Py_UNICODE" y macro "Py_UNICODE_WIDE": utilice "wchar_t" en su
  lugar.

* Funciones de inicialización de Python:

  * "PySys_ResetWarnOptions()": borre "sys.warnoptions" y
    "warnings.filters" en su lugar.

  * "Py_GetExecPrefix()": Get "sys.base_exec_prefix" and
    "sys.exec_prefix" instead.

  * "Py_GetPath()": Obtenga "sys.path" en su lugar.

  * "Py_GetPrefix()": Get "sys.base_prefix" and "sys.prefix" instead.

  * "Py_GetProgramFullPath()": Obtenga "sys.executable" en su lugar.

  * "Py_GetProgramName()": Obtenga "sys.executable" en su lugar.

  * "Py_GetPythonHome()": Obtenga la variable de entorno
    "PyConfig.home" o "PYTHONHOME" en su lugar.


Pendiente de eliminación en futuras versiones
---------------------------------------------

Las siguientes API están obsoletas y se eliminarán, aunque actualmente
no hay una fecha programada para su eliminación.

* "Py_TPFLAGS_HAVE_FINALIZE": Innecesario desde Python 3.8.

* "PyErr_Fetch()": Utilice "PyErr_GetRaisedException()" en su lugar.

* "PyErr_NormalizeException()": Utilice "PyErr_GetRaisedException()"
  en su lugar.

* "PyErr_Restore()": Utilice "PyErr_SetRaisedException()" en su lugar.

* "PyModule_GetFilename()": Utilice "PyModule_GetFilenameObject()" en
  su lugar.

* "PyOS_AfterFork()": Utilice "PyOS_AfterFork_Child()" en su lugar.

* "PySlice_GetIndicesEx()": Utilice "PySlice_Unpack()" y
  "PySlice_AdjustIndices()" en su lugar.

* "PyUnicode_AsDecodedObject()": Utilice "PyCodec_Decode()" en su
  lugar.

* "PyUnicode_AsDecodedUnicode()": Utilice "PyCodec_Decode()" en su
  lugar.

* "PyUnicode_AsEncodedObject()": Utilice "PyCodec_Encode()" en su
  lugar.

* "PyUnicode_AsEncodedUnicode()": Utilice "PyCodec_Encode()" en su
  lugar.

* "PyUnicode_READY()": Innecesario desde Python 3.12

* "PyErr_Display()": Utilice "PyErr_DisplayException()" en su lugar.

* "_PyErr_ChainExceptions()": Utilice "_PyErr_ChainExceptions1()" en
  su lugar.

* Miembro de "PyBytesObject.ob_shash": llame a "PyObject_Hash()" en su
  lugar.

* Miembro de "PyDictObject.ma_version_tag".

* API de almacenamiento local de subprocesos (TLS):

  * "PyThread_create_key()": Utilice "PyThread_tss_alloc()" en su
    lugar.

  * "PyThread_delete_key()": Utilice "PyThread_tss_free()" en su
    lugar.

  * "PyThread_set_key_value()": Utilice "PyThread_tss_set()" en su
    lugar.

  * "PyThread_get_key_value()": Utilice "PyThread_tss_get()" en su
    lugar.

  * "PyThread_delete_key_value()": Utilice "PyThread_tss_delete()" en
    su lugar.

  * "PyThread_ReInitTLS()": Innecesario desde Python 3.7.
