Novedades de Python 3.12¶
- Editor:
Adam Turner
Este artículo explica las nuevas características de Python 3.12, en comparación con 3.11. Python 3.12 se lanzó el 2 de octubre de 2023. Para obtener detalles completos, consulte changelog.
Ver también
PEP 693 - Calendario de lanzamiento de Python 3.12
Resumen: aspectos destacados de la versión¶
Python 3.12 is a stable release of the Python programming language,
with a mix of changes to the language and the standard library.
The library changes focus on cleaning up deprecated APIs, usability, and correctness.
Of note, the distutils package has been removed from the standard library.
Filesystem support in os and pathlib has seen a number of improvements,
and several modules have better performance.
Los cambios de idioma se centran en la usabilidad, ya que a f-strings se le han eliminado muchas limitaciones y las sugerencias «¿Quiso decir…» continúan mejorando. La nueva declaración type parameter syntax y type mejora la ergonomía para usar generic types y type aliases con controladores de tipo estático.
Este artículo no intenta proporcionar una especificación completa de todas las características nuevas, sino que brinda una descripción general conveniente. Para obtener detalles completos, debe consultar la documentación, como Library Reference y Language Reference. Si desea comprender la implementación completa y la justificación del diseño de un cambio, consulte el PEP para conocer una característica nueva en particular; pero tenga en cuenta que los PEP generalmente no se mantienen actualizados una vez que una característica se ha implementado por completo.
Nuevas características de sintaxis:
Nuevas características gramaticales:
Mejoras del intérprete:
PEP 669, monitorización de bajo impacto
Improved “Did you mean …” suggestions para excepciones
NameError,ImportErrorySyntaxError
Mejoras en el modelo de datos de Python:
PEP 688, usando buffer protocol de Python
Mejoras significativas en la biblioteca estándar:
La clase
pathlib.Pathahora admite subclasesEl módulo
osrecibió varias mejoras para el soporte de WindowsSe ha agregado un command-line interface al módulo
sqlite3Los controles
isinstance()frente aruntime-checkable protocolsbenefician de una aceleración de entre dos y 20 vecesEl paquete
asyncioha tenido una serie de mejoras de rendimiento, y algunos puntos de referencia muestran una aceleración del 75 %.Se ha agregado un command-line interface al módulo
uuidDue to the changes in PEP 701, producing tokens via the
tokenizemodule is up to 64% faster.
Mejoras de seguridad:
Reemplaza las implementaciones
hashlibintegradas de SHA1, SHA3, SHA2-384, SHA2-512 y MD5 con código verificado formalmente del proyecto HACL*. Estas implementaciones integradas permanecen como alternativas que solo se utilizan cuando OpenSSL no las proporciona.
Mejoras de la API C:
Mejoras en la implementación de CPython:
PEP 709, comprensión en línea
CPython support para el perfilador Linux
perfImplementar protección contra desbordamiento de pila en plataformas compatibles
Nuevas funciones de tipado:
PEP 698, decorador
typing.override()
Depreciaciones, eliminaciones o restricciones importantes:
PEP 623: elimina
wstrde los objetos Unicode en la API C de Python, reduciendo el tamaño de cada objetostren al menos 8 bytes.PEP 632: Remove the
distutilspackage. See the migration guide for advice replacing the APIs it provided. The third-party Setuptools package continues to providedistutils, if you still require it in Python 3.12 and beyond.gh-95299: No preinstala
setuptoolsen entornos virtuales creados convenv. Esto significa quedistutils,setuptools,pkg_resourcesyeasy_installya no estarán disponibles de forma predeterminada; para acceder a ellos, ejecutepip install setuptoolsen el entorno virtual activated.Se han eliminado los módulos
asynchat,asyncoreyimp, junto con variosunittest.TestCasemethod aliases.
Nuevas características¶
PEP 695: Sintaxis de parámetro de tipo¶
Las clases y funciones genéricas en PEP 484 se declararon utilizando una sintaxis detallada que dejaba el alcance de los parámetros de tipo poco claro y requería declaraciones explícitas de variación.
PEP 695 presenta una forma nueva, más compacta y explícita de crear generic classes y functions:
def max[T](args: Iterable[T]) -> T:
...
class list[T]:
def __getitem__(self, index: int, /) -> T:
...
def append(self, element: T) -> None:
...
Además, el PEP introduce una nueva forma de declarar type aliases utilizando la declaración type, que crea una instancia de TypeAliasType:
type Point = tuple[float, float]
Los alias de tipo también pueden ser generic:
type Point[T] = tuple[T, T]
La nueva sintaxis permite declarar los parámetros TypeVarTuple y ParamSpec, así como los parámetros TypeVar con límites o restricciones:
type IntFunc[**P] = Callable[P, int] # ParamSpec
type LabeledTuple[*Ts] = tuple[str, *Ts] # TypeVarTuple
type HashableSequence[T: Hashable] = Sequence[T] # TypeVar with bound
type IntOrStrSequence[T: (int, str)] = Sequence[T] # TypeVar with constraints
El valor de los alias de tipo y los límites y restricciones de las variables de tipo creadas mediante esta sintaxis se evalúan solo según demanda (consulte lazy evaluation). Esto significa que los alias de tipo pueden hacer referencia a otros tipos definidos más adelante en el archivo.
Los parámetros de tipo declarados a través de una lista de parámetros de tipo son visibles dentro del alcance de la declaración y de cualquier alcance anidado, pero no en el alcance externo. Por ejemplo, se pueden utilizar en las anotaciones de tipo de los métodos de una clase genérica o en el cuerpo de la clase. Sin embargo, no se pueden utilizar en el alcance del módulo una vez definida la clase. Consulte Listas de tipo parámetro para obtener una descripción detallada de la semántica de tiempo de ejecución de los parámetros de tipo.
Para respaldar esta semántica de alcance, se introduce un nuevo tipo de alcance, el annotation scope. Los ámbitos de anotación se comportan en su mayor parte como ámbitos de función, pero interactúan de manera diferente con los ámbitos de clase adjuntos. En Python 3.13, annotations también se evaluará en ámbitos de anotación.
Consulte PEP 695 para obtener más detalles.
(PEP escrito por Eric Traut. Implementación por Jelle Zijlstra, Eric Traut y otros en gh-103764.)
PEP 701: Formalización sintáctica de cadenas f¶
PEP 701 elimina algunas restricciones sobre el uso de f-strings. Los componentes de expresión dentro de cadenas f ahora pueden ser cualquier expresión Python válida, incluidas cadenas que reutilizan la misma comilla que la cadena f que las contiene, expresiones de varias líneas, comentarios, barras invertidas y secuencias de escape Unicode. Cubramos estos en detalle:
Reutilización de comillas: en Python 3.11, reutilizar las mismas comillas que la cadena f adjunta genera un
SyntaxError, lo que obliga al usuario a usar otras comillas disponibles (como usar comillas dobles o triples si la cadena f usa comillas simples). En Python 3.12, ahora puedes hacer cosas como esta:>>> songs = ['Take me back to Eden', 'Alkaline', 'Ascensionism'] >>> f"This is the playlist: {", ".join(songs)}" 'This is the playlist: Take me back to Eden, Alkaline, Ascensionism'
Tenga en cuenta que antes de este cambio no había un límite explícito en cómo se pueden anidar las cadenas f, pero el hecho de que las comillas de cadena no se pueden reutilizar dentro del componente de expresión de las cadenas f hacía imposible anidar cadenas f arbitrariamente. De hecho, esta es la cadena f más anidada que podría escribirse:
>>> f"""{f'''{f'{f"{1+1}"}'}'''}""" '2'
Como ahora las cadenas f pueden contener cualquier expresión Python válida dentro de los componentes de expresión, ahora es posible anidar cadenas f de forma arbitraria:
>>> f"{f"{f"{f"{f"{f"{1+1}"}"}"}"}"}" '2'
Expresiones y comentarios de varias líneas: en Python 3.11, las expresiones de cadena f deben definirse en una sola línea, incluso si la expresión dentro de la cadena f normalmente podría abarcar varias líneas (como listas literales que se definen en varias líneas), lo que las hace más difícil de leer. En Python 3.12 ahora puedes definir cadenas f que abarquen varias líneas y agregar comentarios en línea:
>>> f"This is the playlist: {", ".join([ ... 'Take me back to Eden', # My, my, those eyes like fire ... 'Alkaline', # Not acid nor alkaline ... 'Ascensionism' # Take to the broken skies at last ... ])}" 'This is the playlist: Take me back to Eden, Alkaline, Ascensionism'Barras invertidas y caracteres Unicode: antes de Python 3.12, las expresiones de cadena f no podían contener ningún carácter
\. Esto también afectó a Unicode escape sequences (como\N{snowman}), ya que contienen la parte\Nque anteriormente no podía ser parte de los componentes de expresión de f-strings. Ahora puedes definir expresiones como esta:>>> print(f"This is the playlist: {"\n".join(songs)}") This is the playlist: Take me back to Eden Alkaline Ascensionism >>> print(f"This is the playlist: {"\N{BLACK HEART SUIT}".join(songs)}") This is the playlist: Take me back to Eden♥Alkaline♥Ascensionism
Consulte PEP 701 para obtener más detalles.
As a positive side-effect of how this feature has been implemented (by parsing f-strings
with the PEG parser), now error messages for f-strings are more precise
and include the exact location of the error. For example, in Python 3.11, the following
f-string raises a SyntaxError:
>>> my_string = f"{x z y}" + f"{1 + 1}"
File "<stdin>", line 1
(x z y)
^^^
SyntaxError: f-string: invalid syntax. Perhaps you forgot a comma?
pero el mensaje de error no incluye la ubicación exacta del error dentro de la línea y también tiene la expresión artificialmente entre paréntesis. En Python 3.12, a medida que las cadenas f se analizan con el analizador PEG, los mensajes de error pueden ser más precisos y mostrar la línea completa:
>>> my_string = f"{x z y}" + f"{1 + 1}"
File "<stdin>", line 1
my_string = f"{x z y}" + f"{1 + 1}"
^^^
SyntaxError: invalid syntax. Perhaps you forgot a comma?
(Aportado por Pablo Galindo, Batuhan Taskaya, Lysandros Nikolaou, Cristián Maureira-Fredes y Marta Gómez en gh-102856. PEP escrito por Pablo Galindo, Batuhan Taskaya, Lysandros Nikolaou y Marta Gómez).
PEP 684: un GIL por intérprete¶
PEP 684 introduce un GIL por intérprete, de modo que ahora se pueden crear subintérpretes con un GIL único por intérprete. Esto permite que los programas Python aprovechen al máximo múltiples núcleos de CPU. Actualmente, esto solo está disponible a través de C-API, aunque una API de Python es anticipada para 3.13.
Use the new Py_NewInterpreterFromConfig() function to
create an interpreter with its own GIL:
PyInterpreterConfig config = {
.check_multi_interp_extensions = 1,
.gil = PyInterpreterConfig_OWN_GIL,
};
PyThreadState *tstate = NULL;
PyStatus status = Py_NewInterpreterFromConfig(&tstate, &config);
if (PyStatus_Exception(status)) {
return -1;
}
/* The new interpreter is now active in the current thread. */
For further examples how to use the C-API for sub-interpreters with a
per-interpreter GIL, see Modules/_xxsubinterpretersmodule.c.
(Aportado por Eric Snow en gh-104210, etc.)
PEP 669: Monitoreo de bajo impacto para CPython¶
PEP 669 define un nuevo API para perfiladores, depuradores y otras herramientas para monitorear eventos en CPython. Cubre una amplia gama de eventos, incluidas llamadas, devoluciones, líneas, excepciones, saltos y más. Esto significa que solo paga por lo que usa, brindando soporte para depuradores generales y herramientas de cobertura casi nulos. Consulte sys.monitoring para obtener más detalles.
(Aportado por Mark Shannon en gh-103082.)
PEP 688: Hacer accesible el protocolo de búfer en Python¶
PEP 688 presenta una forma de utilizar buffer protocol desde el código Python. Las clases que implementan el método __buffer__() ahora se pueden utilizar como tipos de búfer.
El nuevo collections.abc.Buffer ABC proporciona una forma estándar de representar objetos de búfer, por ejemplo en anotaciones de tipo. La nueva enumeración inspect.BufferFlags representa los indicadores que se pueden usar para personalizar la creación del búfer. (Aportado por Jelle Zijlstra en gh-102500.)
PEP 709: Integración de la comprensión¶
Las comprensiones de diccionario, lista y conjunto ahora están integradas, en lugar de crear un nuevo objeto de función de un solo uso para cada ejecución de la comprensión. Esto acelera la ejecución de una comprensión hasta dos veces. Consulte PEP 709 para obtener más detalles.
Las variables de iteración de comprensión permanecen aisladas y no sobrescriben una variable del mismo nombre en el alcance externo, ni son visibles después de la comprensión. La incorporación da como resultado algunos cambios de comportamiento visibles:
Ya no hay un marco separado para la comprensión en los rastreos, y el rastreo/elaboración de perfiles ya no muestra la comprensión como una llamada a función.
El módulo
symtableya no producirá tablas de símbolos secundarios para cada comprensión; en cambio, los locales de comprensión se incluirán en la tabla de símbolos de la función principal.Llamar a
locals()dentro de una comprensión ahora incluye variables externas a la comprensión y ya no incluye la variable sintética.0para el «argumento» de comprensión.Una comprensión que itera directamente sobre
locals()(por ejemplo,[k for k in locals()]) puede ver «RuntimeError: el diccionario cambió de tamaño durante la iteración» cuando se ejecuta bajo seguimiento (por ejemplo, medición de cobertura de código). Este es el mismo comportamiento que ya se ha visto, por ejemplo, enfor k in locals():. Para evitar el error, primero cree una lista de claves para iterar:keys = list(locals()); [k for k in keys].
(Aportado por Carl Meyer y Vladimir Matveev en PEP 709.)
Mensajes de error mejorados¶
Ahora se sugieren potencialmente módulos de la biblioteca estándar como parte de los mensajes de error que muestra el intérprete cuando un
NameErrorse eleva al nivel superior. (Aportado por Pablo Galindo en gh-98254.)>>> sys.version_info Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'sys' is not defined. Did you forget to import 'sys'?
Mejora la sugerencia de error para excepciones
NameErrorpara instancias. Ahora, si se genera unNameErroren un método y la instancia tiene un atributo que es exactamente igual al nombre en la excepción, la sugerencia incluiráself.<NAME>en lugar de la coincidencia más cercana en el alcance del método. (Aportado por Pablo Galindo en gh-99139.)>>> class A: ... def __init__(self): ... self.blech = 1 ... ... def foo(self): ... somethin = blech ... >>> A().foo() Traceback (most recent call last): File "<stdin>", line 1 somethin = blech ^^^^^ NameError: name 'blech' is not defined. Did you mean: 'self.blech'?
Mejora el mensaje de error
SyntaxErrorcuando el usuario escribeimport x from yen lugar defrom y import x. (Aportado por Pablo Galindo en gh-98931.)>>> import a.y.z from b.y.z Traceback (most recent call last): File "<stdin>", line 1 import a.y.z from b.y.z ^^^^^^^^^^^^^^^^^^^^^^^ SyntaxError: Did you mean to use 'from ... import ...' instead?
Las excepciones
ImportErrorgeneradas por sentenciasfrom <module> import <name>fallidas ahora incluyen sugerencias para el valor de<name>según los nombres disponibles en<module>. (Aportado por Pablo Galindo en gh-91058.)>>> from collections import chainmap Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: cannot import name 'chainmap' from 'collections'. Did you mean: 'ChainMap'?
Otros cambios del lenguaje¶
El analizador ahora genera
SyntaxErroral analizar el código fuente que contiene bytes nulos. (Aportado por Pablo Galindo en gh-96670.)Un par de caracteres de barra invertida que no es una secuencia de escape válida ahora genera un
SyntaxWarning, en lugar deDeprecationWarning. Por ejemplo,re.compile("\d+\.\d+")ahora emite unSyntaxWarning("\d"es una secuencia de escape no válida; utilice cadenas sin formato para la expresión regular:re.compile(r"\d+\.\d+")). En una versión futura de Python, eventualmente se generaráSyntaxError, en lugar deSyntaxWarning. (Aportado por Victor Stinner en gh-98401.)Los escapes octales con un valor mayor que
0o377(por ejemplo,"\477"), obsoletos en Python 3.11, ahora producen unSyntaxWarning, en lugar deDeprecationWarning. En una futura versión de Python, eventualmente serán unSyntaxError. (Aportado por Victor Stinner en gh-98401.)Las variables utilizadas en la parte de destino de las comprensiones que no están almacenadas ahora se pueden usar en expresiones de asignación (
:=). Por ejemplo, en[(b := 1) for a, b.prop in some_iter], ahora se permite la asignación ab. Tenga en cuenta que la asignación de variables almacenadas en la parte de destino de las comprensiones (comoa) todavía no está permitida, según PEP 572. (Aportado por Nikita Sobolev en gh-100581.)Las excepciones generadas en el método
__set_name__de una clase o tipo ya no están incluidas en unRuntimeError. La información de contexto se agrega a la excepción como una nota PEP 678. (Aportado por Irit Katriel en gh-77757.)Cuando una construcción
try-except*maneja todo elExceptionGroupy genera otra excepción, esa excepción ya no está incluida en unExceptionGroup. También cambió en la versión 3.11.4. (Aportado por Irit Katriel en gh-103590.)El recolector de basura ahora se ejecuta solo en el mecanismo de interrupción de evaluación del ciclo de evaluación del código de bytes de Python en lugar de en las asignaciones de objetos. El GC también se puede ejecutar cuando se llama a
PyErr_CheckSignals(), por lo que las extensiones C que necesitan ejecutarse durante un período prolongado sin ejecutar ningún código Python también tienen la posibilidad de ejecutar el GC periódicamente. (Aportado por Pablo Galindo en gh-97922.)Todos los invocables integrados y de extensión que esperan parámetros booleanos ahora aceptan argumentos de cualquier tipo en lugar de solo
boolyint. (Contribución de Serhiy Storchaka en gh-60203.)memoryviewahora admite el tipo medio flotante (el código de formato «e»). (Contribución de Donghee Na y Antoine Pitrou en gh-90751.)Los objetos
sliceahora son hasheables, lo que permite usarlos como claves de dictado y elementos de configuración. (Contribución de Will Bradshaw, Furkan Onder y Raymond Hettinger en gh-101264.)sum()ahora utiliza la suma de Neumaier para mejorar la precisión y la conmutatividad al sumar flotantes o enteros y flotantes mixtos. (Aportado por Raymond Hettinger en gh-100425.)ast.parse()ahora generaSyntaxErroren lugar deValueErroral analizar el código fuente que contiene bytes nulos. (Aportado por Pablo Galindo en gh-96670.)Los métodos de extracción en
tarfileyshutil.unpack_archive()tienen un nuevo argumento, filter, que permite limitar funciones tar que puedan resultar sorprendentes o peligrosas, como la creación de archivos fuera del directorio de destino. Consulte tarfile extraction filters para obtener más detalles. En Python 3.14, el valor predeterminado cambiará a'data'. (Aportado por Petr Viktorin en PEP 706.)Las instancias
types.MappingProxyTypeahora son hasheables si el mapeo subyacente es hasheable. (Contribución de Serhiy Storchaka en gh-87995.)Agregado support for the perf profiler a través de la nueva variable de entorno
PYTHONPERFSUPPORTy la opción de línea de comandos-X perf, así como las nuevas funcionessys.activate_stack_trampoline(),sys.deactivate_stack_trampoline()ysys.is_stack_trampoline_active(). (Diseño de Pablo Galindo. Contribución de Pablo Galindo y Christian Heimes con contribuciones de Gregory P. Smith [Google] y Mark Shannon en gh-96123.)
Nuevos módulos¶
Ninguno.
Módulos mejorados¶
array¶
La clase
array.arrayahora admite subíndices, lo que la convierte en generic type. (Aportado por Jelle Zijlstra en gh-98658.)
asincio¶
Se ha mejorado significativamente el rendimiento de escritura en sockets en
asyncio.asyncioahora evita copias innecesarias al escribir en sockets y usasendmsg()si la plataforma lo admite. (Aportado por Kumar Aditya en gh-91166.)Agregado las funciones
asyncio.eager_task_factory()yasyncio.create_eager_task_factory()para permitir la opción de un bucle de eventos para la ejecución de tareas entusiastas, lo que hace que algunos casos de uso sean de 2 a 5 veces más rápidos. (Contribución de Jacob Bower e Itamar Oren en gh-102853, gh-104140 y gh-104138)On Linux,
asynciousesasyncio.PidfdChildWatcherby default ifos.pidfd_open()is available and functional instead ofasyncio.ThreadedChildWatcher. (Contributed by Kumar Aditya in gh-98024.)The event loop now uses the best available child watcher for each platform (
asyncio.PidfdChildWatcherif supported andasyncio.ThreadedChildWatcherotherwise), so manually configuring a child watcher is not recommended. (Contributed by Kumar Aditya in gh-94597.)Agregado el parámetro loop_factory a
asyncio.run()para permitir especificar una fábrica de bucle de eventos personalizada. (Aportado por Kumar Aditya en gh-99388.)Agregado la implementación C de
asyncio.current_task()para una aceleración de 4x-6x. (Aportado por Itamar Oren y Pranav Thulasiram Bhat en gh-100344.)asyncio.iscoroutine()ahora devuelveFalsepara generadores, ya queasynciono admite rutinas heredadas basadas en generadores. (Aportado por Kumar Aditya en gh-102748.)asyncio.wait()yasyncio.as_completed()ahora aceptan generadores que generan tareas. (Aportado por Kumar Aditya en gh-78530.)
calendar¶
Agregado las enumeraciones
calendar.Monthycalendar.Dayque definen los meses del año y los días de la semana. (Aportado por el Príncipe Roshan en gh-103636.)
csv¶
Add
csv.QUOTE_NOTNULLandcsv.QUOTE_STRINGSflags to provide finer grained control ofNoneand empty strings byreaderandwriterobjects.
dis¶
Los códigos de operación de pseudoinstrucción (que son utilizados por el compilador pero que no aparecen en el código de bytes ejecutable) ahora están expuestos en el módulo
dis.HAVE_ARGUMENTsigue siendo relevante para códigos de operación reales, pero no es útil para pseudoinstrucciones. Utilice la nueva coleccióndis.hasargen su lugar. (Aportado por Irit Katriel en gh-94216.)Agregado la colección
dis.hasexcpara indicar instrucciones que establecen un controlador de excepciones. (Aportado por Irit Katriel en gh-94216.)
fractions¶
Los objetos de tipo
fractions.Fractionahora admiten formato de estilo flotante. (Aportado por Mark Dickinson en gh-100161.)
importlib.resources¶
importlib.resources.as_file()ahora admite directorios de recursos. (Aportado por Jason R. Coombs en gh-97930.)Rename first parameter of
importlib.resources.files()to anchor. (Contributed by Jason R. Coombs in gh-100598.)
inspect¶
Add
inspect.markcoroutinefunction()to mark sync functions that return a coroutine for use withinspect.iscoroutinefunction(). (Contributed by Carlton Gibson in gh-99247.)Agregado
inspect.getasyncgenstate()yinspect.getasyncgenlocals()para determinar el estado actual de los generadores asíncronos. (Aportado por Thomas Krennwallner en gh-79940.)The performance of
inspect.getattr_static()has been considerably improved. Most calls to the function should be at least 2x faster than they were in Python 3.11. (Contributed by Alex Waygood in gh-103193.)
itertools¶
Add
itertools.batched()for collecting into even-sized tuples where the last batch may be shorter than the rest. (Contributed by Raymond Hettinger in gh-98363.)
math¶
Agregado
math.sumprod()para calcular una suma de productos. (Aportado por Raymond Hettinger en gh-100485.)Extend
math.nextafter()to include a steps argument for moving up or down multiple steps at a time. (Contributed by Matthias Goergens, Mark Dickinson, and Raymond Hettinger in gh-94906.)
os¶
Agregado
os.PIDFD_NONBLOCKpara abrir un descriptor de archivo para un proceso conos.pidfd_open()en modo sin bloqueo. (Aportado por Kumar Aditya en gh-93312.)os.DirEntryahora incluye un métodoos.DirEntry.is_junction()para verificar si la entrada es un cruce. (Aportado por Charles Machalow en gh-99547.)Agregado funciones
os.listdrives(),os.listvolumes()yos.listmounts()en Windows para enumerar unidades, volúmenes y puntos de montaje. (Aportado por Steve Dower en gh-102519.)os.stat()yos.lstat()ahora son más precisos en Windows. El campost_birthtimeahora se completará con la hora de creación del archivo, yst_ctimeestá obsoleto pero aún contiene la hora de creación (pero en el futuro devolverá el último cambio de metadatos, para mantener la coherencia con otras plataformas).st_devpuede tener hasta 64 bits yst_inohasta 128 bits dependiendo de su sistema de archivos, yst_rdevsiempre está configurado en cero en lugar de valores incorrectos. Ambas funciones pueden ser significativamente más rápidas en las versiones más recientes de Windows. (Aportado por Steve Dower en gh-99726.)
os.path¶
Agregado
os.path.isjunction()para verificar si una ruta determinada es un cruce. (Aportado por Charles Machalow en gh-99547.)Agregado
os.path.splitroot()para dividir una ruta en una tríada(drive, root, tail). (Aportado por Barney Gale en gh-101000.)
pathlib¶
Agregado soporte para subclasificar
pathlib.PurePathypathlib.Path, además de sus variantes específicas de Posix y Windows. Las subclases pueden anular el métodopathlib.PurePath.with_segments()para pasar información entre instancias de ruta.Agregado
pathlib.Path.walk()para recorrer los árboles de directorios y generar todos los nombres de archivos o directorios dentro de ellos, similar aos.walk(). (Aportado por Stanislav Zmiev en gh-90385.)Agregado el parámetro opcional walk_up a
pathlib.PurePath.relative_to()para permitir la inserción de entradas..en el resultado; este comportamiento es más consistente conos.path.relpath(). (Aportado por Domenico Ragusa en gh-84538.)Agregado
pathlib.Path.is_junction()como proxy aos.path.isjunction(). (Aportado por Charles Machalow en gh-99547.)Agregado el parámetro opcional case_sensitive a
pathlib.Path.glob(),pathlib.Path.rglob()ypathlib.PurePath.match()para hacer coincidir la distinción entre mayúsculas y minúsculas de la ruta, lo que permite un control más preciso sobre el proceso de coincidencia.
platform¶
Add support for detecting Windows 11 and Windows Server releases past 2012. Previously, lookups on Windows Server platforms newer than Windows Server 2012 and on Windows 11 would return
Windows-10. (Contributed by Steve Dower in gh-89545.)
pbd¶
Agregado variables convenientes para mantener valores temporalmente para la sesión de depuración y proporcionar acceso rápido a valores como el marco actual o el valor de retorno. (Aportado por Tian Gao en gh-103693.)
random¶
Agregado
random.binomialvariate(). (Aportado por Raymond Hettinger en gh-81620.)Agregado un valor predeterminado de
lambd=1.0arandom.expovariate(). (Aportado por Raymond Hettinger en gh-100234.)
shutil¶
shutil.make_archive()ahora pasa el argumento root_dir a archivadores personalizados que lo admiten. En este caso, ya no cambia temporalmente el directorio de trabajo actual del proceso a root_dir para realizar el archivado. (Aportado por Serhiy Storchaka en gh-74696.)shutil.rmtree()now accepts a new argument onexc which is an error handler like onerror but which expects an exception instance rather than a (typ, val, tb) triplet. onerror is deprecated. (Contributed by Irit Katriel in gh-102828.)shutil.which()ahora consulta la variable de entorno PATHEXT para encontrar coincidencias dentro de PATH en Windows incluso cuando el cmd dado incluye un componente de directorio. (Aportado por Charles Machalow en gh-103179.)shutil.which()llamará aNeedCurrentDirectoryForExePathWcuando solicite ejecutables en Windows para determinar si el directorio de trabajo actual debe anteponerse a la ruta de búsqueda. (Aportado por Charles Machalow en gh-103179.)shutil.which()devolverá una ruta que coincida con cmd con un componente dePATHEXTantes de una coincidencia directa en otra parte de la ruta de búsqueda en Windows. (Aportado por Charles Machalow en gh-103179.)
sqlite3¶
Agregado un command-line interface. (Aportado por Erlend E. Aasland en gh-77617.)
Agregado el atributo
sqlite3.Connection.autocommitasqlite3.Connectiony el parámetro autocommit asqlite3.connect()para controlar transaction handling compatible con PEP 249. (Aportado por Erlend E. Aasland en gh-83638.)Agregado el parámetro de solo palabra clave entrypoint a
sqlite3.Connection.load_extension(), para anular el punto de entrada de la extensión SQLite. (Aportado por Erlend E. Aasland en gh-103015.)Agregado
sqlite3.Connection.getconfig()ysqlite3.Connection.setconfig()asqlite3.Connectionpara realizar cambios de configuración en una conexión de base de datos. (Aportado por Erlend E. Aasland en gh-103489.)
statistics¶
Se extendió
statistics.correlation()para incluirlo como métodorankedpara calcular la correlación de Spearman de datos clasificados. (Aportado por Raymond Hettinger en gh-95861.)
sys¶
Agregado el espacio de nombres
sys.monitoringpara exponer la nueva API de supervisión PEP 669. (Aportado por Mark Shannon en gh-103082.)Agregado
sys.activate_stack_trampoline()ysys.deactivate_stack_trampoline()para activar y desactivar los trampolines del perfilador de pila, ysys.is_stack_trampoline_active()para consultar si los trampolines del perfilador de pila están activos. (Contribuido por Pablo Galindo y Christian Heimes con contribuciones de Gregory P. Smith [Google] y Mark Shannon en gh-96123.)Agregado
sys.last_excque contiene la última excepción no controlada que se generó (para casos de uso de depuración post-mortem). Deje obsoletos los tres campos que tienen la misma información en su formato heredado:sys.last_type,sys.last_valueysys.last_traceback. (Aportado por Irit Katriel en gh-102778.)sys._current_exceptions()ahora devuelve una asignación de thread-id a una instancia de excepción, en lugar de a una tupla(typ, exc, tb). (Aportado por Irit Katriel en gh-103176.)sys.setrecursionlimit()ysys.getrecursionlimit(). El límite de recursividad ahora se aplica sólo al código Python. Las funciones integradas no utilizan el límite de recursividad, pero están protegidas por un mecanismo diferente que evita que la recursividad provoque un fallo de la máquina virtual.
tempfile¶
La función
tempfile.NamedTemporaryFiletiene un nuevo parámetro opcional delete_on_close (Aportado por Evgeny Zorin en gh-58451.)tempfile.mkdtemp()ahora siempre devuelve una ruta absoluta, incluso si el argumento proporcionado al parámetro dir es una ruta relativa.
threading¶
Agregado
threading.settrace_all_threads()ythreading.setprofile_all_threads()que permiten configurar funciones de seguimiento y creación de perfiles en todos los hilos en ejecución además del que realiza la llamada. (Aportado por Pablo Galindo en gh-93503.)
tkinter¶
tkinter.Canvas.coords()ahora aplana sus argumentos. Ahora acepta no sólo coordenadas como argumentos separados (x1, y1, x2, y2, ...) y una secuencia de coordenadas ([x1, y1, x2, y2, ...]), sino también coordenadas agrupadas en pares ((x1, y1), (x2, y2), ...y[(x1, y1), (x2, y2), ...]), como los métodoscreate_*(). (Aportado por Serhiy Storchaka en gh-94473.)
tokenize¶
El módulo
tokenizeincluye los cambios introducidos en PEP 701. (Aportado por Marta Gómez Macías y Pablo Galindo en gh-102856.) Consulte Portar a Python 3.12 para obtener más información sobre los cambios en el módulotokenize.
types¶
Agregado
types.get_original_bases()para permitir una mayor introspección de Tipos genéricos definidos por el usuario cuando esté subclasificado. (Contribución de James Hilton-Balfe y Alex Waygood en gh-101827.)
typing¶
Las comprobaciones de
isinstance()conruntime-checkable protocolsahora usaninspect.getattr_static()en lugar dehasattr()para buscar si existen atributos. Esto significa que los descriptores y los métodos__getattr__()ya no se evalúan inesperadamente durante las comprobaciones deisinstance()con protocolos verificables en tiempo de ejecución. Sin embargo, también puede significar que algunos objetos que solían considerarse instancias de un protocolo verificable en tiempo de ejecución ya no se consideran instancias de ese protocolo en Python 3.12+, y viceversa. Es poco probable que la mayoría de los usuarios se vean afectados por este cambio. (Contribuido por Alex Waygood en gh-102433.)Los miembros de un protocolo verificable en tiempo de ejecución ahora se consideran «congelados» en tiempo de ejecución tan pronto como se crea la clase. La aplicación de parches de atributos en un protocolo verificable en tiempo de ejecución seguirá funcionando, pero no tendrá ningún impacto en las comprobaciones
isinstance()que comparan objetos con el protocolo. Por ejemplo:>>> from typing import Protocol, runtime_checkable >>> @runtime_checkable ... class HasX(Protocol): ... x = 1 ... >>> class Foo: ... ... >>> f = Foo() >>> isinstance(f, HasX) False >>> f.x = 1 >>> isinstance(f, HasX) True >>> HasX.y = 2 >>> isinstance(f, HasX) # unchanged, even though HasX now also has a "y" attribute True
Este cambio se realizó para acelerar las comprobaciones de
isinstance()en protocolos verificables en tiempo de ejecución.The performance profile of
isinstance()checks againstruntime-checkable protocolshas changed significantly. Mostisinstance()checks against protocols with only a few members should be at least 2x faster than in 3.11, and some may be 20x faster or more. However,isinstance()checks against protocols with many members may be slower than in Python 3.11. (Contributed by Alex Waygood in gh-74690 and gh-103193.)Todas las clases
typing.TypedDictytyping.NamedTupleahora tienen el atributo__orig_bases__. (Aportado por Adrián García Badaracco en gh-103699.)Agregado el parámetro
frozen_defaultatyping.dataclass_transform(). (Aportado por Erik De Bonte en gh-99957.)
unicodedata¶
La base de datos Unicode se ha actualizado a la versión 15.0.0. (Aportado por Benjamin Peterson en gh-96734).
unittest¶
Agregado una opción de línea de comando --durations, que muestra los N casos de prueba más lentos:
python3 -m unittest --durations=3 lib.tests.test_threading
.....
Slowest test durations
----------------------------------------------------------------------
1.210s test_timeout (Lib.test.test_threading.BarrierTests)
1.003s test_default_timeout (Lib.test.test_threading.BarrierTests)
0.518s test_timeout (Lib.test.test_threading.EventTests)
(0.000 durations hidden. Use -v to show these durations.)
----------------------------------------------------------------------
Ran 158 tests in 9.869s
OK (skipped=3)
(Aportado por Giampaolo Rodola en gh-48330)
uuid¶
Agregado un command-line interface. (Aportado por Adam Chhina en gh-88597.)
Optimizaciones¶
Elimine los miembros
wstrywstr_lengthde los objetos Unicode. Reduce el tamaño del objeto en 8 o 16 bytes en una plataforma de 64 bits. (PEP 623) (Aportado por Inada Naoki en gh-92536.)Agregado soporte experimental para usar el optimizador binario BOLT en el proceso de compilación, lo que mejora el rendimiento entre un 1% y un 5%. (Contribuido por Kevin Modzelewski en gh-90536 y sintonizado por Donghee Na en gh-101525)
Acelere la sustitución de expresiones regulares (funciones
re.sub()yre.subn()y los métodosre.Patterncorrespondientes) para cadenas de reemplazo que contienen referencias de grupo entre 2 y 3 veces. (Aportado por Serhiy Storchaka en gh-91524.)Acelere la creación de
asyncio.Taskaplazando el costoso formato de cadenas. (Aportado por Itamar Oren en gh-103793.)Las funciones
tokenize.tokenize()ytokenize.generate_tokens()son hasta un 64 % más rápidas como efecto secundario de los cambios necesarios para cubrir PEP 701 en el módulotokenize. (Aportado por Marta Gómez Macías y Pablo Galindo en gh-102856.)Acelere las llamadas al método
super()y las cargas de atributos mediante la nueva instrucciónLOAD_SUPER_ATTR. (Contribución de Carl Meyer y Vladimir Matveev en gh-103497.)
Cambios en el código de bytes de CPython¶
Elimine la instrucción
LOAD_METHOD. Se ha fusionado conLOAD_ATTR.LOAD_ATTRahora se comportará como la antigua instrucciónLOAD_METHODsi el bit bajo de su oparg está configurado. (Contribuido por Ken Jin en gh-93429.)Elimine las instrucciones
JUMP_IF_FALSE_OR_POPyJUMP_IF_TRUE_OR_POP. (Aportado por Irit Katriel en gh-102859.)Elimine la instrucción
PRECALL. (Aportado por Mark Shannon en gh-92925.)Agregado las instrucciones
BINARY_SLICEySTORE_SLICE. (Aportado por Mark Shannon en gh-94163.)Agregado las instrucciones
CALL_INTRINSIC_1. (Aportado por Mark Shannon en gh-99005.)Agregado la instrucción
CALL_INTRINSIC_2. (Aportado por Irit Katriel en gh-101799.)Agregado la instrucción
CLEANUP_THROW. (Aportado por Brandt Bucher en gh-90997.)Agregado la instrucción
END_SEND. (Aportado por Mark Shannon en gh-103082.)Agregada la instrucción
LOAD_FAST_AND_CLEARcomo parte de la implementación de PEP 709. (Aportado por Carl Meyer en gh-101441.)Agregado la instrucción
LOAD_FAST_CHECK. (Aportado por Dennis Sweeney en gh-93143.)Agregado los códigos de operación
LOAD_FROM_DICT_OR_DEREF,LOAD_FROM_DICT_OR_GLOBALSyLOAD_LOCALScomo parte de la implementación de PEP 695. Elimine el código de operaciónLOAD_CLASSDEREF, que se puede reemplazar conLOAD_LOCALSmásLOAD_FROM_DICT_OR_DEREF. (Aportado por Jelle Zijlstra en gh-103764.)Agregado la instrucción
LOAD_SUPER_ATTR. (Contribución de Carl Meyer y Vladimir Matveev en gh-103497.)Add the
RETURN_CONSTinstruction. (Contributed by Wenyang Wang in gh-101632.)
Demostraciones y herramientas¶
Elimine el directorio
Tools/demo/que contenía scripts de demostración antiguos. Se puede encontrar una copia en el old-demos project. (Aportado por Victor Stinner en gh-97681.)Elimine los scripts de ejemplo obsoletos del directorio
Tools/scripts/. Se puede encontrar una copia en el old-demos project. (Aportado por Victor Stinner en gh-97669.)
Obsoleto¶
argparse: Los parámetros type, choices y metavar deargparse.BooleanOptionalActionestán obsoletos y se eliminarán en 3.14. (Contribución de Nikita Sobolev en gh-92248.)ast: las siguientes características deasthan quedado obsoletas en la documentación desde Python 3.8, ahora provocan que se emita unDeprecationWarningen tiempo de ejecución cuando se accede a ellas o se usan, y se eliminarán en Python 3.14:ast.Numast.Strast.Bytesast.NameConstantast.Ellipsis
Utilice
ast.Constanten su lugar. (Aportado por Serhiy Storchaka en gh-90953.)-
The child watcher classes
asyncio.MultiLoopChildWatcher,asyncio.FastChildWatcher,asyncio.AbstractChildWatcherandasyncio.SafeChildWatcherare deprecated and will be removed in Python 3.14. (Contributed by Kumar Aditya in gh-94597.)asyncio.set_child_watcher(),asyncio.get_child_watcher(),asyncio.AbstractEventLoopPolicy.set_child_watcher()andasyncio.AbstractEventLoopPolicy.get_child_watcher()are deprecated and will be removed in Python 3.14. (Contributed by Kumar Aditya in gh-94597.)El método
get_event_loop()de la política de bucle de eventos predeterminada ahora emite unDeprecationWarningsi no hay ningún bucle de eventos establecido y decide crear uno. (Contribución de Serhiy Storchaka y Guido van Rossum en gh-100160.)
calendar: las constantescalendar.Januaryycalendar.Februaryestán obsoletas y reemplazadas porcalendar.JANUARYycalendar.FEBRUARY. (Aportado por el Príncipe Roshan en gh-103636.)collections.abc: Deprecatedcollections.abc.ByteString.Use
isinstance(obj, collections.abc.Buffer)to test ifobjimplements the buffer protocol at runtime. For use in type annotations, either useBufferor a union that explicitly specifies the types your code supports (e.g.,bytes | bytearray | memoryview).ByteStringwas originally intended to be an abstract class that would serve as a supertype of bothbytesandbytearray. However, since the ABC never had any methods, knowing that an object was an instance ofByteStringnever actually told you anything useful about the object. Other common buffer types such asmemoryviewwere also never understood as subtypes ofByteString(either at runtime or by static type checkers).See PEP 688 for more details. (Contributed by Shantanu Jain in gh-91896.)
datetime:utcnow()yutcfromtimestamp()dedatetime.datetimeestán en desuso y se eliminarán en una versión futura. En su lugar, utilice objetos que tengan en cuenta la zona horaria para representar las fechas y horas en UTC: respectivamente, llame anow()yfromtimestamp()con el parámetro tz establecido endatetime.UTC. (Aportado por Paul Ganssle en gh-103857.)email: obsoleto el parámetro isdst enemail.utils.localtime(). (Aportado por Alan Williams en gh-72346.)importlib.abc: Obsoletas las siguientes clases, cuya eliminación está programada en Python 3.14:importlib.abc.ResourceReaderimportlib.abc.Traversableimportlib.abc.TraversableResources
Utilice clases
importlib.resources.abcen su lugar:(Contribución de Jason R. Coombs y Hugo van Kemenade en gh-93963.)
itertools: obsoleta la compatibilidad con operaciones de copia, copia profunda y pickle, que no está documentada, es ineficiente, históricamente tiene errores e inconsistente. Esto se eliminará en 3.14 para lograr una reducción significativa en el volumen de código y la carga de mantenimiento. (Aportado por Raymond Hettinger en gh-101588.)multiprocessing: en Python 3.14, el método de inicio predeterminado demultiprocessingcambiará 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 perjudicial ya que se espera que a la mayoría del código no le importe. Utilice las APIget_context()oset_start_method()para especificar explícitamente cuándo su código requires'fork'. Ver contexts and start methods.pkgutil:pkgutil.find_loader()andpkgutil.get_loader()are deprecated and will be removed in Python 3.14; useimportlib.util.find_spec()instead. (Contributed by Nikita Sobolev in gh-97850.)pty: el módulo tiene dos funcionesmaster_open()yslave_open()no documentadas que han quedado obsoletas desde Python 2 pero que solo obtuvieron unDeprecationWarningadecuado en 3.12. Elimínelos en 3.14. (Aportado por Soumendra Ganguly y Gregory P. Smith en gh-85984.)os:Los campos
st_ctimedevueltos poros.stat()yos.lstat()en Windows están en desuso. En una versión futura, contendrán la hora del último cambio de metadatos, de forma coherente con otras plataformas. Por ahora, todavía contienen la hora de creación, que también está disponible en el nuevo campost_birthtime. (Aportado por Steve Dower en gh-99726.)On POSIX platforms,
os.fork()can now raise aDeprecationWarningwhen it can detect being called from a multithreaded process. There has always been a fundamental incompatibility with the POSIX platform when doing so. Even if such code appeared to work. We added the warning to raise awareness as issues encountered by code doing this are becoming more frequent. See theos.fork()documentation for more details along with this discussion on fork being incompatible with threads for why we’re now surfacing this longstanding platform compatibility problem to developers.
Cuando aparece esta advertencia debido al uso de
multiprocessingoconcurrent.futures, la solución es utilizar un método de inicio demultiprocessingdiferente, como"spawn"o"forkserver".shutil: The onerror argument ofshutil.rmtree()is deprecated; use onexc instead. (Contributed by Irit Katriel in gh-102828.)-
default adapters and converters ahora están en desuso. En su lugar, utilice el Ejemplos para adaptadores y convertidores y adáptelo a sus necesidades. (Aportado por Erlend E. Aasland en gh-90016.)
En
execute(),DeprecationWarningahora se emite cuando named placeholders se utiliza junto con los parámetros proporcionados como sequence en lugar de comodict. A partir de Python 3.14, el uso de marcadores de posición con nombre con parámetros proporcionados como una secuencia generará unProgrammingError. (Aportado por Erlend E. Aasland en gh-101698.)
sys: los campossys.last_type,sys.last_valueysys.last_tracebackestán en desuso. Utilicesys.last_excen su lugar. (Aportado por Irit Katriel en gh-102778.)tarfile: la extracción de archivos tar sin especificar filter está en desuso hasta Python 3.14, cuando el filtro'data'se convertirá en el predeterminado. Consulte Extraction filters para obtener más detalles.-
typing.Hashableandtyping.Sized, aliases forcollections.abc.Hashableandcollections.abc.Sizedrespectively, are deprecated. (gh-94309.)typing.ByteString, en desuso desde Python 3.9, ahora provoca que se emita unDeprecationWarningcuando se utiliza. (Aportado por Alex Waygood en gh-91896.)
xml.etree.ElementTree: el módulo ahora emiteDeprecationWarningal probar el valor de verdad de unxml.etree.ElementTree.Element. Antes, la implementación de Python emitíaFutureWarningy la implementación de C no emitía nada. (Aportado por Jacob Walls en gh-83122.)Las firmas de 3 argumentos (tipo, valor, rastreo) de
coroutine throw(),generator throw()yasync generator throw()están en desuso y es posible que se eliminen en una versión futura de Python. Utilice en su lugar las versiones de un solo argumento de estas funciones. (Aportado por Ofey Chan en gh-89874.)DeprecationWarningis now raised when__package__on a module differs from__spec__.parent(previously it wasImportWarning). (Contributed by Brett Cannon in gh-65961.)Setting
__package__or__cached__on a module is deprecated, and will cease to be set or taken into consideration by the import system in Python 3.14. (Contributed by Brett Cannon in gh-65961.)The bitwise inversion operator (
~) on bool is deprecated. It will throw an error in Python 3.16. Usenotfor logical negation of bools instead. In the rare case that you really need the bitwise inversion of the underlyingint, convert to int explicitly:~int(x). (Contributed by Tim Hoffmann in gh-103487.)Accessing
co_lnotabon code objects was deprecated in Python 3.10 via PEP 626, but it only got a properDeprecationWarningin 3.12. May be removed in 3.15. (Contributed by Nikita Sobolev in gh-101866.)
Pending removal in Python 3.13¶
Módulos (ver PEP 594):
aifcaudioopcgicgitbchunkcryptimghdrmailcapmsilibnisnntplibossaudiodevpipessndhdrspwdsunautelnetlibuuxdrlib
Otros módulos:
lib2to3y el 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)Encadenamiento de descriptores
classmethod(gh-89519)importlib.resourcesdeprecated methods:contents()is_resource()open_binary()open_text()path()read_binary()read_text()
Use
importlib.resources.files()instead. Refer to importlib-resources: Migrating from Legacy (gh-106531)
Pending removal in Python 3.14¶
argparse: Los parámetros type, choices y metavar deargparse.BooleanOptionalActionestán obsoletos y se eliminarán en 3.14. (Contribución de Nikita Sobolev en gh-92248.)ast: The following features have been deprecated in documentation since Python 3.8, now cause aDeprecationWarningto be emitted at runtime when they are accessed or used, and will be removed in Python 3.14:ast.Numast.Strast.Bytesast.NameConstantast.Ellipsis
Utilice
ast.Constanten su lugar. (Aportado por Serhiy Storchaka en gh-90953.)-
The child watcher classes
asyncio.MultiLoopChildWatcher,asyncio.FastChildWatcher,asyncio.AbstractChildWatcherandasyncio.SafeChildWatcherare deprecated and will be removed in Python 3.14. (Contributed by Kumar Aditya in gh-94597.)asyncio.set_child_watcher(),asyncio.get_child_watcher(),asyncio.AbstractEventLoopPolicy.set_child_watcher()andasyncio.AbstractEventLoopPolicy.get_child_watcher()are deprecated and will be removed in Python 3.14. (Contributed by Kumar Aditya in gh-94597.)El método
get_event_loop()de la política de bucle de eventos predeterminada ahora emite unDeprecationWarningsi no hay ningún bucle de eventos establecido y decide crear uno. (Contribución de Serhiy Storchaka y Guido van Rossum en gh-100160.)
email: Deprecated the isdst parameter inemail.utils.localtime(). (Contributed by Alan Williams in gh-72346.)importlib.abcdeprecated classes:importlib.abc.ResourceReaderimportlib.abc.Traversableimportlib.abc.TraversableResources
Utilice clases
importlib.resources.abcen su lugar:(Contribución de Jason R. Coombs y Hugo van Kemenade en gh-93963.)
itertoolshad undocumented, inefficient, historically buggy, and inconsistent support for copy, deepcopy, and pickle operations. This will be removed in 3.14 for a significant reduction in code volume and maintenance burden. (Contributed by Raymond Hettinger in gh-101588.)multiprocessing: The default start method will change to a safer one on Linux, BSDs, and other non-macOS POSIX platforms where'fork'is currently the default (gh-84559). Adding a runtime warning about this was deemed too disruptive as the majority of code is not expected to care. Use theget_context()orset_start_method()APIs to explicitly specify when your code requires'fork'. See Contextos y métodos de inicio.pathlib:is_relative_to()andrelative_to(): passing additional arguments is deprecated.pkgutil:pkgutil.find_loader()andpkgutil.get_loader()now raiseDeprecationWarning; useimportlib.util.find_spec()instead. (Contributed by Nikita Sobolev in gh-97850.)pty:master_open(): usepty.openpty().slave_open(): usepty.openpty().
-
versionandversion_info.execute()andexecutemany()if named placeholders are used and parameters is a sequence instead of adict.
urllib:urllib.parse.Quoteris deprecated: it was not intended to be a public API. (Contributed by Gregory P. Smith in gh-88168.)
Pending removal in Python 3.15¶
The import system:
Setting
__cached__on a module while failing to set__spec__.cachedis 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__.parentis deprecated. In Python 3.15,__package__will cease to be set or take into consideration by the import system or standard library. (gh-97879)
-
The undocumented
ctypes.SetPointerType()function has been deprecated since Python 3.13.
-
The obsolete and rarely used
CGIHTTPRequestHandlerhas been deprecated since Python 3.13. No direct replacement exists. Anything is better than CGI to interface a web server with a request handler.The
--cgiflag to the python -m http.server command-line interface has been deprecated since Python 3.13.
-
load_module()method: useexec_module()instead.
-
The
getdefaultlocale()function has been deprecated since Python 3.11. Its removal was originally planned for Python 3.13 (gh-90817), but has been postponed to Python 3.15. Usegetlocale(),setlocale(), andgetencoding()instead. (Contributed by Hugo van Kemenade in gh-111187.)
-
PurePath.is_reserved()has been deprecated since Python 3.13. Useos.path.isreserved()to detect reserved paths on Windows.
-
java_ver()has been deprecated since Python 3.13. This function is only useful for Jython support, has a confusing API, and is largely untested.
-
The check_home argument of
sysconfig.is_python_build()has been deprecated since Python 3.12.
-
RLock()will take no arguments in Python 3.15. Passing any arguments has been deprecated since Python 3.14, as the Python version does not permit any arguments, but the C version allows any number of positional or keyword arguments, ignoring every argument.
-
types.CodeType: Accessingco_lnotabwas deprecated in PEP 626 since 3.10 and was planned to be removed in 3.12, but it only got a properDeprecationWarningin 3.12. May be removed in 3.15. (Contributed by Nikita Sobolev in gh-101866.)
-
The undocumented keyword argument syntax for creating
NamedTupleclasses (for example,Point = NamedTuple("Point", x=int, y=int)) has been deprecated since Python 3.13. Use the class-based syntax or the functional syntax instead.When using the functional syntax of
TypedDicts, failing to pass a value to the fields parameter (TD = TypedDict("TD")) or passingNone(TD = TypedDict("TD", None)) has been deprecated since Python 3.13. Useclass TD(TypedDict): passorTD = TypedDict("TD", {})to create a TypedDict with zero field.The
typing.no_type_check_decorator()decorator function has been deprecated since Python 3.13. After eight years in thetypingmodule, it has yet to be supported by any major type checker.
wave:The
getmark(),setmark(), andgetmarkers()methods of theWave_readandWave_writeclasses have been deprecated since Python 3.13.
-
load_module()has been deprecated since Python 3.10. Useexec_module()instead. (Contributed by Jiahao Li in gh-125746.)
Pending removal in Python 3.16¶
The import system:
Setting
__loader__on a module while failing to set__spec__.loaderis deprecated. In Python 3.16,__loader__will cease to be set or taken into consideration by the import system or the standard library.
-
The
'u'format code (wchar_t) has been deprecated in documentation since Python 3.3 and at runtime since Python 3.13. Use the'w'format code (Py_UCS4) for Unicode characters instead.
-
asyncio.iscoroutinefunction()is deprecated and will be removed in Python 3.16; useinspect.iscoroutinefunction()instead. (Contributed by Jiahao Li and Kumar Aditya in gh-122875.)asynciopolicy system is deprecated and will be removed in Python 3.16. In particular, the following classes and functions are deprecated:Users should use
asyncio.run()orasyncio.Runnerwith loop_factory to use the desired event loop implementation.For example, to use
asyncio.SelectorEventLoopon Windows:import asyncio async def main(): ... asyncio.run(main(), loop_factory=asyncio.SelectorEventLoop)
(Contributed by Kumar Aditya in gh-127949.)
-
Bitwise inversion on boolean types,
~Trueor~Falsehas been deprecated since Python 3.12, as it produces surprising and unintuitive results (-2and-1). Usenot xinstead for the logical negation of a Boolean. In the rare case that you need the bitwise inversion of the underlying integer, convert tointexplicitly (~int(x)).
-
Calling the Python implementation of
functools.reduce()with function or sequence as keyword arguments has been deprecated since Python 3.14.
-
Support for custom logging handlers with the strm argument is deprecated and scheduled for removal in Python 3.16. Define handlers with the stream argument instead. (Contributed by Mariusz Felisiak in gh-115032.)
-
Valid extensions start with a “.” or are empty for
mimetypes.MimeTypes.add_type(). Undotted extensions are deprecated and will raise aValueErrorin Python 3.16. (Contributed by Hugo van Kemenade in gh-75223.)
-
The
ExecErrorexception has been deprecated since Python 3.14. It has not been used by any function inshutilsince Python 3.4, and is now an alias ofRuntimeError.
-
The
Class.get_methodsmethod has been deprecated since Python 3.14.
sys:The
_enablelegacywindowsfsencoding()function has been deprecated since Python 3.13. Use thePYTHONLEGACYWINDOWSFSENCODINGenvironment variable instead.
-
The
sysconfig.expand_makefile_vars()function has been deprecated since Python 3.14. Use thevarsargument ofsysconfig.get_paths()instead.
-
The undocumented and unused
TarFile.tarfileattribute has been deprecated since Python 3.13.
Pending removal in Python 3.17¶
-
collections.abc.ByteStringis scheduled for removal in Python 3.17.Use
isinstance(obj, collections.abc.Buffer)to test ifobjimplements the buffer protocol at runtime. For use in type annotations, either useBufferor a union that explicitly specifies the types your code supports (e.g.,bytes | bytearray | memoryview).ByteStringwas originally intended to be an abstract class that would serve as a supertype of bothbytesandbytearray. However, since the ABC never had any methods, knowing that an object was an instance ofByteStringnever actually told you anything useful about the object. Other common buffer types such asmemoryviewwere also never understood as subtypes ofByteString(either at runtime or by static type checkers).See PEP 688 for more details. (Contributed by Shantanu Jain in gh-91896.)
-
Before Python 3.14, old-style unions were implemented using the private class
typing._UnionGenericAlias. This class is no longer needed for the implementation, but it has been retained for backward compatibility, with removal scheduled for Python 3.17. Users should use documented introspection helpers liketyping.get_origin()andtyping.get_args()instead of relying on private implementation details.typing.ByteString, deprecated since Python 3.9, is scheduled for removal in Python 3.17.Use
isinstance(obj, collections.abc.Buffer)to test ifobjimplements the buffer protocol at runtime. For use in type annotations, either useBufferor a union that explicitly specifies the types your code supports (e.g.,bytes | bytearray | memoryview).ByteStringwas originally intended to be an abstract class that would serve as a supertype of bothbytesandbytearray. However, since the ABC never had any methods, knowing that an object was an instance ofByteStringnever actually told you anything useful about the object. Other common buffer types such asmemoryviewwere also never understood as subtypes ofByteString(either at runtime or by static type checkers).See PEP 688 for more details. (Contributed by Shantanu Jain in gh-91896.)
Pending removal in future versions¶
The following APIs will be removed in the future, although there is currently no date scheduled for their removal.
-
Nesting argument groups and nesting mutually exclusive groups are deprecated.
Passing the undocumented keyword argument prefix_chars to
add_argument_group()is now deprecated.The
argparse.FileTypetype converter is deprecated.
-
Generators:
throw(type, exc, tb)andathrow(type, exc, tb)signature is deprecated: usethrow(exc)andathrow(exc)instead, the single argument signature.Currently Python accepts numeric literals immediately followed by keywords, for example
0in x,1or x,0if 1else 2. It allows confusing and ambiguous expressions like[0x1for x in y](which can be interpreted as[0x1 for x in y]or[0x1f or x in y]). A syntax warning is raised if the numeric literal is immediately followed by one of keywordsand,else,for,if,in,isandor. In a future release it will be changed to a syntax error. (gh-87999)Support for
__index__()and__int__()method returning non-int type: these methods will be required to return an instance of a strict subclass ofint.Support for
__float__()method returning a strict subclass offloat: these methods will be required to return an instance offloat.Support for
__complex__()method returning a strict subclass ofcomplex: these methods will be required to return an instance ofcomplex.Delegation of
int()to__trunc__()method.Passing a complex number as the real or imag argument in the
complex()constructor is now deprecated; it should only be passed as a single positional argument. (Contributed by Serhiy Storchaka in gh-109218.)
calendar: las constantescalendar.Januaryycalendar.Februaryestán obsoletas y reemplazadas porcalendar.JANUARYycalendar.FEBRUARY. (Aportado por el Príncipe Roshan en gh-103636.)codecs: useopen()instead ofcodecs.open(). (gh-133038)codeobject.co_lnotab: use thecodeobject.co_lines()method instead.-
utcnow(): usedatetime.datetime.now(tz=datetime.UTC).utcfromtimestamp(): usedatetime.datetime.fromtimestamp(timestamp, tz=datetime.UTC).
gettext: Plural value must be an integer.-
cache_from_source()debug_override parameter is deprecated: use the optimization parameter instead.
-
EntryPointstuple interface.Implicit
Noneon return values.
logging: thewarn()method has been deprecated since Python 3.3, usewarning()instead.mailbox: Use of StringIO input and text mode is deprecated, use BytesIO and binary mode instead.os: Callingos.register_at_fork()in multi-threaded process.pydoc.ErrorDuringImport: A tuple value for exc_info parameter is deprecated, use an exception instance.re: More strict rules are now applied for numerical group references and group names in regular expressions. Only sequence of ASCII digits is now accepted as a numerical reference. The group name in bytes patterns and replacement strings can now only contain ASCII letters and digits and underscore. (Contributed by Serhiy Storchaka in gh-91760.)sre_compile,sre_constantsandsre_parsemodules.shutil:rmtree()”s onerror parameter is deprecated in Python 3.12; use the onexc parameter instead.ssloptions and protocols:ssl.SSLContextwithout protocol argument is deprecated.ssl.SSLContext:set_npn_protocols()andselected_npn_protocol()are deprecated: use ALPN instead.ssl.OP_NO_SSL*optionsssl.OP_NO_TLS*optionsssl.PROTOCOL_SSLv3ssl.PROTOCOL_TLSssl.PROTOCOL_TLSv1ssl.PROTOCOL_TLSv1_1ssl.PROTOCOL_TLSv1_2ssl.TLSVersion.SSLv3ssl.TLSVersion.TLSv1ssl.TLSVersion.TLSv1_1
threadingmethods:threading.Condition.notifyAll(): usenotify_all().threading.Event.isSet(): useis_set().threading.Thread.isDaemon(),threading.Thread.setDaemon(): usethreading.Thread.daemonattribute.threading.Thread.getName(),threading.Thread.setName(): usethreading.Thread.nameattribute.threading.currentThread(): usethreading.current_thread().threading.activeCount(): usethreading.active_count().
The internal class
typing._UnionGenericAliasis no longer used to implementtyping.Union. To preserve compatibility with users using this private class, a compatibility shim will be provided until at least Python 3.17. (Contributed by Jelle Zijlstra in gh-105499.)unittest.IsolatedAsyncioTestCase: it is deprecated to return a value that is notNonefrom a test case.urllib.parsedeprecated functions:urlparse()insteadsplitattr()splithost()splitnport()splitpasswd()splitport()splitquery()splittag()splittype()splituser()splitvalue()to_bytes()
wsgiref:SimpleHandler.stdout.write()should not do partial writes.xml.etree.ElementTree: Testing the truth value of anElementis deprecated. In a future release it will always returnTrue. Prefer explicitlen(elem)orelem is not Nonetests instead.sys._clear_type_cache()is deprecated: usesys._clear_internal_caches()instead.
Eliminado¶
asynchat y asyncore¶
configparser¶
Varios nombres obsoletos en
configparseren 3.2 se han eliminado según gh-89336:configparser.ParsingErrorya no tiene un atributo o argumentofilename. Utilice el atributo y el argumentosourceen su lugar.configparserya no tiene una claseSafeConfigParser. Utilice en su lugar el nombreConfigParsermás corto.configparser.ConfigParserya no tiene un métodoreadfp. Utiliceread_file()en su lugar.
distutils¶
ensurepip¶
Retire la rueda de herramientas de configuración incluida en
ensurepipy deje de instalar herramientas de configuración en entornos creados porvenv.pip (>= 22.1)no requiere la instalación de herramientas de configuración en el entorno. Los paquetes basados ensetuptools(ydistutils) aún se pueden usar conpip install, ya que pip proporcionarásetuptoolsen el entorno de compilación que utiliza para crear un paquete.easy_install,pkg_resources,setuptoolsydistutilsya no se proporcionan de forma predeterminada en entornos creados convenvo arrancados conensurepip, ya que forman parte del paquetesetuptools. Para proyectos que dependen de estos en tiempo de ejecución, el proyectosetuptoolsdebe declararse como una dependencia e instalarse por separado (generalmente, usando pip).(Aportado por Pradyun Gedam en gh-95299.)
enum¶
ftplib¶
gzip¶
Elimine el atributo
filenamedelgzip.GzipFiledegzip, en desuso desde Python 2.6; utilice el atributonameen su lugar. En modo de escritura, el atributofilenameagregaba la extensión de archivo'.gz'si no estaba presente. (Aportado por Victor Stinner en gh-94196.)
hashlib¶
Remove the pure Python implementation of
hashlib’shashlib.pbkdf2_hmac(), deprecated in Python 3.10. Python 3.10 and newer requires OpenSSL 1.1.1 (PEP 644): this OpenSSL version provides a C implementation ofpbkdf2_hmac()which is faster. (Contributed by Victor Stinner in gh-94199.)
importlib¶
Muchas limpiezas anteriormente obsoletas en
importlibahora se han completado:References to, and support for
module_repr()has been removed. (Contributed by Barry Warsaw in gh-97850.)Se han eliminado
importlib.util.set_package,importlib.util.set_loaderyimportlib.util.module_for_loader. (Contribución de Brett Cannon y Nikita Sobolev en gh-65961 y gh-97850.)Se eliminó la compatibilidad con las API
find_loader()yfind_module(). (Aportado por Barry Varsovia en gh-98040.)Se han eliminado
importlib.abc.Finder,pkgutil.ImpImporterypkgutil.ImpLoader. (Aportado por Barry Varsovia en gh-98040.)
imp¶
Se ha eliminado el módulo
imp. (Aportado por Barry Varsovia en gh-98040.)Para migrar consulte la siguiente tabla de correspondencias:
imp
importlib
imp.NullImporterInserta
Noneensys.path_importer_cacheimp.cache_from_source()imp.find_module()imp.get_magic()imp.get_suffixes()importlib.machinery.SOURCE_SUFFIXES,importlib.machinery.EXTENSION_SUFFIXES, andimportlib.machinery.BYTECODE_SUFFIXESimp.get_tag()imp.load_module()imp.new_module(name)types.ModuleType(name)imp.reload()imp.source_from_cache()imp.load_source()Ver abajo
Reemplace
imp.load_source()con:import importlib.util import importlib.machinery def load_source(modname, filename): loader = importlib.machinery.SourceFileLoader(modname, filename) spec = importlib.util.spec_from_file_location(modname, filename, loader=loader) module = importlib.util.module_from_spec(spec) # The module is always executed and not cached in sys.modules. # Uncomment the following line to cache the module. # sys.modules[module.__name__] = module loader.exec_module(module) return module
Elimine las funciones y atributos de
impsin reemplazos:Funciones no documentadas:
imp.init_builtin()imp.load_compiled()imp.load_dynamic()imp.load_package()
imp.lock_held(),imp.acquire_lock(),imp.release_lock(): el esquema de bloqueo ha cambiado en Python 3.3 a bloqueos por módulo.Constantes
imp.find_module():SEARCH_ERROR,PY_SOURCE,PY_COMPILED,C_EXTENSION,PY_RESOURCE,PKG_DIRECTORY,C_BUILTIN,PY_FROZEN,PY_CODERESOURCE,IMP_HOOK.
io¶
locale¶
Elimine la función
locale.format()delocale, obsoleta en Python 3.7: uselocale.format_string()en su lugar. (Aportado por Victor Stinner en gh-94226.)
smtpd¶
sqlite3¶
Las siguientes características
sqlite3no documentadas, obsoletas en Python 3.10, ahora se eliminan:sqlite3.enable_shared_cache()sqlite3.OptimizedUnicode
Si se debe utilizar una caché compartida, abra la base de datos en modo URI utilizando el parámetro de consulta
cache=shared.La fábrica de textos
sqlite3.OptimizedUnicodeha sido un alias parastrdesde Python 3.3. El código que previamente configuró la fábrica de texto enOptimizedUnicodepuede usarstrexplícitamente o confiar en el valor predeterminado que también esstr.(Aportado por Erlend E. Aasland en gh-92548.)
ssl¶
Elimine la función
ssl.RAND_pseudo_bytes()dessl, obsoleta en Python 3.6: useos.urandom()ossl.RAND_bytes()en su lugar. (Aportado por Victor Stinner en gh-94199.)Elimine la función
ssl.match_hostname(). Quedó obsoleto en Python 3.7. OpenSSL realiza coincidencias de nombres de host desde Python 3.7, Python ya no usa la funciónssl.match_hostname(). (Aportado por Victor Stinner en gh-94199.)Remove the
ssl.wrap_socket()function, deprecated in Python 3.7: instead, create assl.SSLContextobject and call itsssl.SSLContext.wrap_socketmethod. Any package that still usesssl.wrap_socket()is broken and insecure. The function neither sends a SNI TLS extension nor validates the server hostname. Code is subject to CWE 295 (Improper Certificate Validation). (Contributed by Victor Stinner in gh-94199.)
unittest¶
Elimine muchas características de
unittestque están en desuso desde hace mucho tiempo:Varios alias del método
TestCase:Alias obsoleto
Nombre del método
En desuso en
failUnless3.1
failIf3.1
failUnlessEqual3.1
failIfEqual3.1
failUnlessAlmostEqual3.1
failIfAlmostEqual3.1
failUnlessRaises3.1
assert_3.2
assertEquals3.2
assertNotEquals3.2
assertAlmostEquals3.2
assertNotAlmostEquals3.2
assertRegexpMatches3.2
assertRaisesRegexp3.2
assertNotRegexpMatches3.5
Puede utilizar https://github.com/isidentical/teyit para modernizar automáticamente sus pruebas unitarias.
Método
assertDictContainsSubsetdeTestCaseindocumentado y roto (obsoleto en Python 3.2).Undocumented
TestLoader.loadTestsFromModuleparameter use_load_tests (deprecated and ignored since Python 3.5).Un alias de la clase
TextTestResult:_TextTestResult(obsoleto en Python 3.2).
(Contribución de Serhiy Storchaka en gh-89325.)
webbrowser¶
Elimina la compatibilidad con navegadores obsoletos de
webbrowser. Los navegadores eliminados incluyen: Grail, Mosaic, Netscape, Galeon, Skipstone, Iceape, Firebird y Firefox versiones 35 e inferiores (gh-102871).
xml.etree.ElementTree¶
Elimine el método
ElementTree.Element.copy()de la implementación pura de Python, obsoleto en Python 3.10, use la funcióncopy.copy()en su lugar. La implementación C dexml.etree.ElementTreeno tiene ningún métodocopy(), solo un método__copy__(). (Aportado por Victor Stinner en gh-94383.)
zipimport¶
Otros¶
Elimine la regla
suspiciousde la documentaciónMakefileyDoc/tools/rstlint.py, ambas a favor de sphinx-lint. (Contribución de Julien Palard en gh-98179.)Elimine los parámetros keyfile y certfile de los módulos
ftplib,imaplib,poplibysmtplib, y los parámetros key_file, cert_file y check_hostname del módulohttp.client, todos obsoletos desde Python 3.6. Utilice el parámetro context (ssl_context enimaplib) en su lugar. (Aportado por Victor Stinner en gh-94172.)Elimine los trucos de compatibilidad
Jythonde varios módulos y pruebas stdlib. (Aportado por Nikita Sobolev en gh-99482.)Elimine el indicador
_use_broken_old_ctypes_structure_semantics_del móduloctypes. (Aportado por Nikita Sobolev en gh-99285.)
Portar a Python 3.12¶
Esta sección enumera los cambios descritos anteriormente y otras correcciones de errores que pueden requerir cambios en su código.
Cambios en la API de Python¶
Ahora se aplican reglas más estrictas para las referencias numéricas de grupos y los nombres de grupos en expresiones regulares. Ahora sólo se acepta como referencia numérica la secuencia de dígitos ASCII. El nombre del grupo en patrones de bytes y cadenas de reemplazo ahora solo puede contener letras y dígitos ASCII y guiones bajos. (Contribución de Serhiy Storchaka en gh-91760.)
Elimine la funcionalidad
randrange()en desuso desde Python 3.10. Anteriormente,randrange(10.0)se convertía sin pérdidas arandrange(10). Ahora, genera unTypeError. Además, la excepción planteada para valores no enteros comorandrange(10.5)orandrange('10')se cambió deValueErroraTypeError. Esto también evita errores en los querandrange(1e25)seleccionaría silenciosamente de un rango mayor querandrange(10**25). (Originalmente sugerido por Serhiy Storchaka gh-86388.)argparse.ArgumentParsercambió la codificación y el controlador de errores para leer argumentos de un archivo (por ejemplo, la opciónfromfile_prefix_chars) de la codificación de texto predeterminada (por ejemplo,locale.getpreferredencoding(False)) a filesystem encoding and error handler. Los archivos de argumentos deben codificarse en UTF-8 en lugar de en la página de códigos ANSI en Windows.Remove the
asyncore-basedsmtpdmodule deprecated in Python 3.4.7 and 3.5.4. A recommended replacement is theasyncio-based aiosmtpd PyPI module.shlex.split(): PasarNonepor el argumento s ahora genera una excepción, en lugar de leersys.stdin. La característica quedó obsoleta en Python 3.9. (Aportado por Victor Stinner en gh-94352.)El módulo
osya no acepta rutas tipo bytes, como los tiposbytearrayymemoryview: solo se acepta el tipo exactobytespara cadenas de bytes. (Aportado por Victor Stinner en gh-98393.)syslog.openlog()ysyslog.closelog()ahora fallan si se usan en subintérpretes.syslog.syslog()aún se puede usar en subintérpretes, pero ahora solo sisyslog.openlog()ya ha sido llamado en el intérprete principal. Estas nuevas restricciones no se aplican al intérprete principal, por lo que sólo un conjunto muy pequeño de usuarios podría verse afectado. Este cambio ayuda con el aislamiento del intérprete. Además,sysloges un contenedor de recursos globales de procesos, que se administran mejor desde el intérprete principal. (Aportado por Donghee Na en gh-99127.)Se elimina el comportamiento de bloqueo no documentado de
cached_property(), porque bloqueaba todas las instancias de la clase, lo que generaba una alta contención de bloqueo. Esto significa que una función de obtención de propiedades almacenadas en caché ahora podría ejecutarse más de una vez para una sola instancia, si dos subprocesos se ejecutan. Para la mayoría de las propiedades almacenadas en caché simples (por ejemplo, aquellas que son idempotentes y simplemente calculan un valor en función de otros atributos de la instancia), esto estará bien. Si se necesita sincronización, implemente el bloqueo dentro de la función de obtención de propiedades en caché o alrededor de puntos de acceso de subprocesos múltiples.sys._current_exceptions()ahora devuelve una asignación de thread-id a una instancia de excepción, en lugar de a una tupla(typ, exc, tb). (Aportado por Irit Katriel en gh-103176.)Al extraer archivos tar usando
tarfileoshutil.unpack_archive(), pase el argumento filter para limitar las funciones que pueden resultar sorprendentes o peligrosas. Consulte Extraction filters para obtener más detalles.La salida de las funciones
tokenize.tokenize()ytokenize.generate_tokens()ahora cambia debido a los cambios introducidos en PEP 701. Esto significa que los tokensSTRINGya no se emiten para cadenas f y los tokens descritos en PEP 701 ahora se producen en su lugar:FSTRING_START,FSTRING_MIDDLEyFSTRING_ENDahora se emiten para partes de «cadena» de cadena f además de los tokens apropiados para la tokenización. en los componentes de la expresión. Por ejemplo, para la cadena ff"start {1+1} end", la versión anterior del tokenizador emitió:1,0-1,18: STRING 'f"start {1+1} end"'
mientras que la nueva versión emite:
1,0-1,2: FSTRING_START 'f"' 1,2-1,8: FSTRING_MIDDLE 'start ' 1,8-1,9: OP '{' 1,9-1,10: NUMBER '1' 1,10-1,11: OP '+' 1,11-1,12: NUMBER '1' 1,12-1,13: OP '}' 1,13-1,17: FSTRING_MIDDLE ' end' 1,17-1,18: FSTRING_END '"'
Además, puede haber algunos cambios de comportamiento menores como consecuencia de los cambios necesarios para admitir PEP 701. Algunos de estos cambios incluyen:
El atributo
typede los tokens emitidos al tokenizar algunos caracteres de Python no válidos, como!, ha cambiado deERRORTOKENaOP.Las cadenas incompletas de una sola línea ahora también generan
tokenize.TokenErrorcomo lo hacen las cadenas incompletas de varias líneas.Algún código Python incompleto o no válido ahora genera
tokenize.TokenErroren lugar de devolver tokensERRORTOKENarbitrarios al tokenizarlo.Ya no se admite la combinación de tabulaciones y espacios como sangría en el mismo archivo y generará un
TabError.
The
threadingmodule now expects the_threadmodule to have an_is_main_interpreterattribute. It is a function with no arguments that returnsTrueif the current interpreter is the main interpreter.Any library or application that provides a custom
_threadmodule should provide_is_main_interpreter(). (See gh-112826.)
Cambios de compilación¶
Python ya no usa
setup.pypara crear módulos de extensión C compartidos. Los parámetros de compilación, como encabezados y bibliotecas, se detectan en el scriptconfigure. Las extensiones están construidas porMakefile. La mayoría de las extensiones usanpkg-configy recurren a la detección manual. (Aportado por Christian Heimes en gh-93939.)Ahora se requiere
va_start()con dos parámetros, comova_start(args, format),, para compilar Python.va_start()ya no se llama con un solo parámetro. (Aportado por Kumar Aditya en gh-93207.)CPython ahora usa la opción ThinLTO como política predeterminada de optimización del tiempo de enlace si el compilador Clang acepta la marca. (Aportado por Donghee Na en gh-89536.)
Agregado la variable
COMPILEALL_OPTSenMakefilepara anular las opciones decompileall(predeterminada:-j0) enmake install. También fusionó los 3 comandoscompileallen un solo comando para crear archivos .pyc para todos los niveles de optimización (0, 1, 2) a la vez. (Aportado por Victor Stinner en gh-99289.)Agregado tripletes de plataforma para LoongArch de 64 bits:
loongarch64-linux-gnusf
loongarch64-linux-gnuf32
loongarch64-linux-gnu
(Aportado por Zhang Na en gh-90656.)
PYTHON_FOR_REGENahora requiere Python 3.10 o posterior.Autoconf 2.71 and aclocal 1.16.4 is now required to regenerate
configure. (Contributed by Christian Heimes in gh-89886.)Las compilaciones de Windows y los instaladores de macOS de python.org ahora usan OpenSSL 3.0.
Cambios en la API de C¶
Nuevas características¶
PEP 697: presente Unstable C API tier, destinado a herramientas de bajo nivel como depuradores y compiladores JIT. Esta API puede cambiar en cada versión menor de CPython sin advertencias de obsolescencia. Su contenido está marcado con el prefijo
PyUnstable_en los nombres.Constructores de objetos de código:
PyUnstable_Code_New()(renombrado dePyCode_New)PyUnstable_Code_NewWithPosOnlyArgs()(renombrado dePyCode_NewWithPosOnlyArgs)
Almacenamiento adicional para objetos de código (PEP 523):
PyUnstable_Eval_RequestCodeExtraIndex()(renombrado de_PyEval_RequestCodeExtraIndex)PyUnstable_Code_GetExtra()(renombrado de_PyCode_GetExtra)PyUnstable_Code_SetExtra()(renombrado de_PyCode_SetExtra)
Los nombres originales seguirán estando disponibles hasta que cambie la API respectiva.
(Aportado por Petr Viktorin en gh-101101.)
PEP 697: agregue una API para extender tipos cuyo diseño de memoria de instancia es opaco:
PyType_Spec.basicsizepuede ser cero o negativo para especificar heredar o ampliar el tamaño de la clase base.Se agregaron
PyObject_GetTypeData()yPyType_GetTypeDataSize()para permitir el acceso a datos de instancia específicos de subclase.Se agregaron
Py_TPFLAGS_ITEMS_AT_ENDyPyObject_GetItemData()para permitir extender de forma segura ciertos tipos de tamaño variable, incluidoPyType_Type.Se agregó
Py_RELATIVE_OFFSETpara permitir definirmembersen términos de una estructura específica de subclase.
(Aportado por Petr Viktorin en gh-103509.)
Agregado la nueva función limited C API
PyType_FromMetaclass(), que generaliza elPyType_FromModuleAndSpec()existente utilizando un argumento de metaclase adicional. (Aportado por Wenzel Jakob en gh-93012.)Se agregó API para crear objetos que se pueden llamar usando the vectorcall protocol a Limited API:
El indicador
Py_TPFLAGS_HAVE_VECTORCALLahora se elimina de una clase cuando se reasigna el método__call__()de la clase. Esto hace que vectorcall sea seguro de usar con tipos mutables (es decir, tipos de montón sin el indicador inmutable,Py_TPFLAGS_IMMUTABLETYPE). Los tipos mutables que no anulantp_callahora heredan el indicadorPy_TPFLAGS_HAVE_VECTORCALL. (Aportado por Petr Viktorin en gh-93274.)The
Py_TPFLAGS_MANAGED_DICTandPy_TPFLAGS_MANAGED_WEAKREFflags have been added. This allows extensions classes to support object__dict__and weakrefs with less bookkeeping, using less memory and with faster access.Se agregó API para realizar llamadas usando the vectorcall protocol a Limited API:
Esto significa que tanto el extremo entrante como el saliente del protocolo de llamada vectorial ahora están disponibles en el Limited API. (Aportado por Wenzel Jakob en gh-98586.)
Agregado dos nuevas funciones públicas,
PyEval_SetProfileAllThreads()yPyEval_SetTraceAllThreads(), que permiten configurar funciones de seguimiento y creación de perfiles en todos los subprocesos en ejecución además del que realiza la llamada. (Aportado por Pablo Galindo en gh-93503.)Agregado la nueva función
PyFunction_SetVectorcall()a la API de C que establece el campo de llamada vectorial de unPyFunctionObjectdeterminado. (Aportado por Andrew Frost en gh-92257.)La API de C ahora permite registrar devoluciones de llamada a través de
PyDict_AddWatcher(),PyDict_Watch()y API relacionadas para ser llamadas cada vez que se modifica un diccionario. Está pensado para optimizar intérpretes, compiladores JIT o depuradores. (Aportado por Carl Meyer en gh-91052.)Agregado las API
PyType_AddWatcher()yPyType_Watch()para registrar devoluciones de llamadas y recibir notificaciones sobre cambios en un tipo. (Aportado por Carl Meyer en gh-91051.)Agregado las API
PyCode_AddWatcher()yPyCode_ClearWatcher()para registrar devoluciones de llamadas y recibir notificaciones sobre la creación y destrucción de objetos de código. (Aportado por Itamar Oren en gh-91054.)Agregado las funciones
PyFrame_GetVar()yPyFrame_GetVarString()para obtener una variable de marco por su nombre. (Aportado por Victor Stinner en gh-91248.)Agregado
PyErr_GetRaisedException()yPyErr_SetRaisedException()para guardar y restaurar la excepción actual. Estas funciones devuelven y aceptan un único objeto de excepción, en lugar de los argumentos triples de los ahora obsoletosPyErr_Fetch()yPyErr_Restore(). Esto es menos propenso a errores y un poco más eficiente. (Aportado por Mark Shannon en gh-101578.)Agregado
_PyErr_ChainExceptions1, que toma una instancia de excepción, para reemplazar la API heredada_PyErr_ChainExceptions, que ahora está en desuso. (Aportado por Mark Shannon en gh-101578.)Agregado
PyException_GetArgs()yPyException_SetArgs()como funciones convenientes para recuperar y modificar elargspasado al constructor de la excepción. (Aportado por Mark Shannon en gh-101578.)Agregado
PyErr_DisplayException(), que toma una instancia de excepción, para reemplazar la API heredadaPyErr_Display(). (Aportado por Irit Katriel en gh-102755).
PEP 683: presente Immortal Objects, que permite que los objetos omitan los recuentos de referencias y los cambios relacionados en C-API:
_Py_IMMORTAL_REFCNT: el recuento de referencias que define un objetocomo inmortal.
_Py_IsImmortalComprueba si un objeto tiene el recuento de referencia inmortal.PyObject_HEAD_INITEsto ahora inicializará el recuento de referencias_Py_IMMORTAL_REFCNTcuando se utiliza conPy_BUILD_CORE.
SSTATE_INTERNED_IMMORTALUn identificador para objetos Unicode internosque son inmortales.
SSTATE_INTERNED_IMMORTAL_STATICUn identificador para Unicode internoObjetos inmortales y estáticos.
sys.getunicodeinternedsizeEsto devuelve el número total de Unicodeobjetos que han sido internados. Esto ahora es necesario para que
refleak.pyrastree correctamente los recuentos de referencia y los bloques asignados.
(Contribuido por Eddie Elizondo en gh-84436.)
PEP 684: agregue la nueva función
Py_NewInterpreterFromConfig()yPyInterpreterConfig, que pueden usarse para crear subintérpretes con sus propios GIL. (Consulte PEP 684: un GIL por intérprete para obtener más información). (Contribución de Eric Snow en gh-104110.)En la versión limitada de C API 3.12, las funciones
Py_INCREF()yPy_DECREF()ahora se implementan como llamadas de función opacas para ocultar los detalles de implementación. (Aportado por Victor Stinner en gh-105387.)
Portar a Python 3.12¶
Se han eliminado las API Unicode heredadas basadas en la representación
Py_UNICODE*. Migre a API basadas en UTF-8 owchar_t*.Las funciones de análisis de argumentos como
PyArg_ParseTuple()ya no admiten el formato basado enPy_UNICODE*(por ejemplo,u,Z). Migre a otros formatos para Unicode comos,z,esyU.tp_weaklistpara todos los tipos integrados estáticos siempre esNULL. Este es un campo solo interno enPyTypeObject, pero señalamos el cambio en caso de que alguien acceda al campo directamente de todos modos. Para evitar roturas, considere utilizar la C-API pública existente o, si es necesario, la macro_PyObject_GET_WEAKREFS_LISTPTR()(solo interna).Es posible que este
PyTypeObject.tp_subclassessolo interno ya no sea un puntero de objeto válido. Su tipo se cambió a void* para reflejar esto. Mencionamos esto en caso de que alguien acceda directamente al campo interno.To get a list of subclasses, call the Python method
__subclasses__()(usingPyObject_CallMethod(), for example).Agregado soporte para más opciones de formato (alineación a la izquierda, octales, hexadecimales en mayúsculas, cadenas
intmax_t,ptrdiff_t,wchar_tC, ancho variable y precisión) enPyUnicode_FromFormat()yPyUnicode_FromFormatV(). (Aportado por Serhiy Storchaka en gh-98836.)Un carácter de formato no reconocido en
PyUnicode_FromFormat()yPyUnicode_FromFormatV()ahora establece unSystemError. En versiones anteriores, provocaba que el resto de la cadena de formato se copiara tal cual en la cadena de resultado y se descartaran los argumentos adicionales. (Aportado por Serhiy Storchaka en gh-95781.)Se corrigió la ubicación incorrecta de los letreros en
PyUnicode_FromFormat()yPyUnicode_FromFormatV(). (Aportado por Philip Georgi en gh-95504.)Extension classes wanting to add a
__dict__or weak reference slot should usePy_TPFLAGS_MANAGED_DICTandPy_TPFLAGS_MANAGED_WEAKREFinstead oftp_dictoffsetandtp_weaklistoffset, respectively. The use oftp_dictoffsetandtp_weaklistoffsetis still supported, but does not fully support multiple inheritance (gh-95589), and performance may be worse. Classes declaringPy_TPFLAGS_MANAGED_DICTmust call_PyObject_VisitManagedDict()and_PyObject_ClearManagedDict()to traverse and clear their instance’s dictionaries. To clear weakrefs, callPyObject_ClearWeakRefs(), as before.La función
PyUnicode_FSDecoder()ya no acepta rutas de tipo bytes, como los tiposbytearrayymemoryview: solo se acepta el tipobytesexacto para cadenas de bytes. (Aportado por Victor Stinner en gh-98393.)Las macros
Py_CLEAR,Py_SETREFyPy_XSETREFahora solo evalúan sus argumentos una vez. Si un argumento tiene efectos secundarios, estos efectos secundarios ya no se duplican. (Aportado por Victor Stinner en gh-98724.)El indicador de error del intérprete ahora siempre está normalizado. Esto significa que
PyErr_SetObject(),PyErr_SetString()y las otras funciones que configuran el indicador de error ahora normalizan la excepción antes de almacenarla. (Aportado por Mark Shannon en gh-101578.)_Py_RefTotalya no tiene autoridad y solo se conserva por compatibilidad con ABI. Tenga en cuenta que es un global interno y solo está disponible en compilaciones de depuración. Si lo está utilizando, deberá comenzar a utilizar_Py_GetGlobalRefTotal().Las siguientes funciones ahora seleccionan una metaclase apropiada para el tipo recién creado:
La creación de clases cuya metaclase anule
tp_newestá en desuso y en Python 3.14+ no estará permitida. Tenga en cuenta que estas funciones ignorantp_newde la metaclase, lo que posiblemente permita una inicialización incompleta.Tenga en cuenta que
PyType_FromMetaclass()(agregado en Python 3.12) ya no permite la creación de clases cuya metaclase anuletp_new(__new__()en Python).Dado que
tp_newanula casi todo lo que hacen las funcionesPyType_From*, las dos son incompatibles entre sí. El comportamiento existente (ignorar la metaclase durante varios pasos de la creación de tipos) no es seguro en general, ya que las (meta)clases suponen que se llamó atp_new. No existe una solución general sencilla. Uno de los siguientes puede funcionar para usted:Si controlas la metaclase, evita usar
tp_newen ella:Si se puede omitir la inicialización, se puede realizar en
tp_init.Si no es necesario crear una instancia de la metaclase desde Python, configure su
tp_newenNULLusando el indicadorPy_TPFLAGS_DISALLOW_INSTANTIATION. Esto lo hace aceptable para funcionesPyType_From*.
Evite las funciones
PyType_From*: si no necesita funciones específicas de C (ranuras o configuración del tamaño de la instancia), cree tipos mediante la metaclase calling.Si know puede omitir
tp_newde forma segura, filtre la advertencia de obsolescencia usandowarnings.catch_warnings()de Python.
PyOS_InputHookyPyOS_ReadlineFunctionPointerya no se llaman en subinterpreters. Esto se debe a que los clientes generalmente dependen del estado global de todo el proceso (ya que estas devoluciones de llamada no tienen forma de recuperar el estado del módulo de extensión).Esto también evita situaciones en las que las extensiones pueden encontrarse ejecutándose en un subintérprete que no admiten (o que aún no se han cargado). Consulte gh-104668 para obtener más información.
PyLongObjectha tenido cambios internos para un mejor rendimiento. Aunque las partes internas dePyLongObjectson privadas, algunos módulos de extensión las utilizan. Ya no se debe acceder directamente a los campos internos, sino que se deben utilizar las funciones API que comienzan conPyLong_.... Se proporcionan dos nuevas funciones API unstable para un acceso eficiente al valor dePyLongObjects que cabe en una sola palabra de máquina:Ahora se requiere que los asignadores personalizados, configurados a través de
PyMem_SetAllocator(), sean seguros para subprocesos, independientemente del dominio de memoria. Los asignadores que no tienen su propio estado, incluidos los «ganchos», no se ven afectados. Si su asignador personalizado aún no es seguro para subprocesos y necesita orientación, cree una nueva incidencia en GitHub y CC@ericsnowcurrently.
Obsoleto¶
De acuerdo con PEP 699, el campo
ma_version_tagenPyDictObjectestá obsoleto para los módulos de extensión. Acceder a este campo generará una advertencia del compilador en el momento de la compilación. Este campo se eliminará en Python 3.14. (Contribución de Ramvikrams y Kumar Aditya en gh-101193. PEP de Ken Jin.)Variable de configuración global obsoleta:
Py_HashRandomizationFlag: usePyConfig.use_hash_seedyPyConfig.hash_seedPy_LegacyWindowsFSEncodingFlag: usePyPreConfig.legacy_windows_fs_encodingPy_LegacyWindowsStdioFlag: usePyConfig.legacy_windows_stdioPy_FileSystemDefaultEncoding: usePyConfig.filesystem_encodingPy_HasFileSystemDefaultEncoding: usePyConfig.filesystem_encodingPy_FileSystemDefaultEncodeErrors: usePyConfig.filesystem_errorsPy_UTF8Mode: usePyPreConfig.utf8_mode(verPy_PreInitialize())
La API
Py_InitializeFromConfig()debe usarse conPyConfigen su lugar. (Aportado por Victor Stinner en gh-77782.)La creación de
immutable typescon bases mutables está obsoleta y se deshabilitará en Python 3.14. (gh-95388)El encabezado
structmember.hestá en desuso, aunque sigue estando disponible y no hay planes para eliminarlo.Su contenido ahora está disponible simplemente incluyendo
Python.h, con un prefijoPyagregado si faltara:Escriba macros como
Py_T_INT,Py_T_DOUBLE, etc. (anteriormenteT_INT,T_DOUBLE, etc.)Las banderas
Py_READONLY(anteriormenteREADONLY) yPy_AUDIT_READ(anteriormente todas en mayúsculas)
Varios elementos no están expuestos desde
Python.h:T_OBJECT(usePy_T_OBJECT_EX)T_NONE(anteriormente indocumentado y bastante peculiar)La macro
WRITE_RESTRICTEDque no hace nada.Las macros
RESTRICTEDyREAD_RESTRICTED, equivalentes aPy_AUDIT_READ.En algunas configuraciones,
<stddef.h>no se incluye enPython.h. Debe incluirse manualmente cuando se utilizaoffsetof().
El encabezado obsoleto continúa proporcionando su contenido original con los nombres originales. Su código antiguo puede permanecer sin cambios, a menos que las macros de inclusión y sin espacio de nombres adicionales le molesten mucho.
(Contribuido en gh-47146 por Petr Viktorin, basado en trabajos anteriores de Alexander Belopolsky y Matthias Braun.)
PyErr_Fetch()yPyErr_Restore()están en desuso. UtilicePyErr_GetRaisedException()yPyErr_SetRaisedException()en su lugar. (Aportado por Mark Shannon en gh-101578.)PyErr_Display()está en desuso. UtilicePyErr_DisplayException()en su lugar. (Aportado por Irit Katriel en gh-102755)._PyErr_ChainExceptionsestá en desuso. Utilice_PyErr_ChainExceptions1en su lugar. (Aportado por Irit Katriel en gh-102192.)El uso de
PyType_FromSpec(),PyType_FromSpecWithBases()oPyType_FromModuleAndSpec()para crear una clase cuya metaclase anulatp_newestá en desuso. En su lugar, llame a la metaclase.
Pending removal in Python 3.14¶
El campo
ma_version_tagenPyDictObjectpara módulos de extensión (PEP 699; gh-101193).Creando
immutable typescon bases mutables (gh-95388).
Pending removal in Python 3.15¶
The
PyImport_ImportModuleNoBlock(): UsePyImport_ImportModule()instead.PyWeakref_GetObject()andPyWeakref_GET_OBJECT(): UsePyWeakref_GetRef()instead. The pythoncapi-compat project can be used to getPyWeakref_GetRef()on Python 3.12 and older.Py_UNICODEtype and thePy_UNICODE_WIDEmacro: Usewchar_tinstead.PyUnicode_AsDecodedObject(): UsePyCodec_Decode()instead.PyUnicode_AsDecodedUnicode(): UsePyCodec_Decode()instead; Note that some codecs (for example, «base64») may return a type other thanstr, such asbytes.PyUnicode_AsEncodedObject(): UsePyCodec_Encode()instead.PyUnicode_AsEncodedUnicode(): UsePyCodec_Encode()instead; Note that some codecs (for example, «base64») may return a type other thanbytes, such asstr.Python initialization functions, deprecated in Python 3.13:
Py_GetPath(): UsePyConfig_Get("module_search_paths")(sys.path) instead.Py_GetPrefix(): UsePyConfig_Get("base_prefix")(sys.base_prefix) instead. UsePyConfig_Get("prefix")(sys.prefix) if virtual environments need to be handled.Py_GetExecPrefix(): UsePyConfig_Get("base_exec_prefix")(sys.base_exec_prefix) instead. UsePyConfig_Get("exec_prefix")(sys.exec_prefix) if virtual environments need to be handled.Py_GetProgramFullPath(): UsePyConfig_Get("executable")(sys.executable) instead.Py_GetProgramName(): UsePyConfig_Get("executable")(sys.executable) instead.Py_GetPythonHome(): UsePyConfig_Get("home")or thePYTHONHOMEenvironment variable instead.
The pythoncapi-compat project can be used to get
PyConfig_Get()on Python 3.13 and older.Functions to configure Python’s initialization, deprecated in Python 3.11:
PySys_SetArgvEx(): SetPyConfig.argvinstead.PySys_SetArgv(): SetPyConfig.argvinstead.Py_SetProgramName(): SetPyConfig.program_nameinstead.Py_SetPythonHome(): SetPyConfig.homeinstead.PySys_ResetWarnOptions(): Clearsys.warnoptionsandwarnings.filtersinstead.
La API
Py_InitializeFromConfig()debe usarse conPyConfigen su lugar.Variables de configuración globales:
Py_DebugFlag: UsePyConfig.parser_debugorPyConfig_Get("parser_debug")instead.Py_VerboseFlag: UsePyConfig.verboseorPyConfig_Get("verbose")instead.Py_QuietFlag: UsePyConfig.quietorPyConfig_Get("quiet")instead.Py_InteractiveFlag: UsePyConfig.interactiveorPyConfig_Get("interactive")instead.Py_InspectFlag: UsePyConfig.inspectorPyConfig_Get("inspect")instead.Py_OptimizeFlag: UsePyConfig.optimization_levelorPyConfig_Get("optimization_level")instead.Py_NoSiteFlag: UsePyConfig.site_importorPyConfig_Get("site_import")instead.Py_BytesWarningFlag: UsePyConfig.bytes_warningorPyConfig_Get("bytes_warning")instead.Py_FrozenFlag: UsePyConfig.pathconfig_warningsorPyConfig_Get("pathconfig_warnings")instead.Py_IgnoreEnvironmentFlag: UsePyConfig.use_environmentorPyConfig_Get("use_environment")instead.Py_DontWriteBytecodeFlag: UsePyConfig.write_bytecodeorPyConfig_Get("write_bytecode")instead.Py_NoUserSiteDirectory: UsePyConfig.user_site_directoryorPyConfig_Get("user_site_directory")instead.Py_UnbufferedStdioFlag: UsePyConfig.buffered_stdioorPyConfig_Get("buffered_stdio")instead.Py_HashRandomizationFlag: UsePyConfig.use_hash_seedandPyConfig.hash_seedorPyConfig_Get("hash_seed")instead.Py_IsolatedFlag: UsePyConfig.isolatedorPyConfig_Get("isolated")instead.Py_LegacyWindowsFSEncodingFlag: UsePyPreConfig.legacy_windows_fs_encodingorPyConfig_Get("legacy_windows_fs_encoding")instead.Py_LegacyWindowsStdioFlag: UsePyConfig.legacy_windows_stdioorPyConfig_Get("legacy_windows_stdio")instead.Py_FileSystemDefaultEncoding,Py_HasFileSystemDefaultEncoding: UsePyConfig.filesystem_encodingorPyConfig_Get("filesystem_encoding")instead.Py_FileSystemDefaultEncodeErrors: UsePyConfig.filesystem_errorsorPyConfig_Get("filesystem_errors")instead.Py_UTF8Mode: UsePyPreConfig.utf8_modeorPyConfig_Get("utf8_mode")instead. (seePy_PreInitialize())
The
Py_InitializeFromConfig()API should be used withPyConfigto set these options. OrPyConfig_Get()can be used to get these options at runtime.
Pending removal in Python 3.16¶
The bundled copy of
libmpdec.
Pending removal in future versions¶
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: Unneeded since Python 3.8.PyErr_Fetch(): UsePyErr_GetRaisedException()instead.PyErr_NormalizeException(): UsePyErr_GetRaisedException()instead.PyErr_Restore(): UsePyErr_SetRaisedException()instead.PyModule_GetFilename(): UsePyModule_GetFilenameObject()instead.PyOS_AfterFork(): UsePyOS_AfterFork_Child()instead.PySlice_GetIndicesEx(): UsePySlice_Unpack()andPySlice_AdjustIndices()instead.PyUnicode_READY(): Unneeded since Python 3.12PyErr_Display(): UsePyErr_DisplayException()instead._PyErr_ChainExceptions(): Use_PyErr_ChainExceptions1()instead.PyBytesObject.ob_shashmember: callPyObject_Hash()instead.API de almacenamiento local de subprocesos (TLS):
PyThread_create_key(): UsePyThread_tss_alloc()instead.PyThread_delete_key(): UsePyThread_tss_free()instead.PyThread_set_key_value(): UsePyThread_tss_set()instead.PyThread_get_key_value(): UsePyThread_tss_get()instead.PyThread_delete_key_value(): UsePyThread_tss_delete()instead.PyThread_ReInitTLS(): Unneeded since Python 3.7.
Eliminado¶
Elimine el archivo de encabezado
token.h. Nunca hubo ninguna API C de tokenizador público. El archivo de encabezadotoken.hsolo fue diseñado para ser utilizado por componentes internos de Python. (Aportado por Victor Stinner en gh-92651.)Se han eliminado las API Unicode heredadas. Consulte PEP 623 para obtener más detalles.
PyUnicode_WCHAR_KINDPyUnicode_AS_UNICODE()PyUnicode_AsUnicode()PyUnicode_AsUnicodeAndSize()PyUnicode_AS_DATA()PyUnicode_FromUnicode()PyUnicode_GET_SIZE()PyUnicode_GetSize()PyUnicode_GET_DATA_SIZE()
Elimine la macro de función
PyUnicode_InternImmortal(). (Aportado por Victor Stinner en gh-85858.)