Novità in Python 3.12¶
- Editor:
Adam Turner
Questo articolo spiega le nuove funzionalità in Python 3.12, rispetto alla versione 3.11. Python 3.12 è stato rilasciato il 2 ottobre 2023. Per i dettagli completi, consultare il changelog.
Vedi anche
PEP 693 – Programma di rilascio di Python 3.12
Sommario – Punti salienti del rilascio¶
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.
Le modifiche al linguaggio si concentrano sull’usabilità, in quanto molte limitazioni dei f-strings sono state rimosse e i suggerimenti “Intendevi dire …” continuano a migliorare. La nuova sintassi dei parametri di tipo e l’istruzione type
migliorano l’ergonomia per l’utilizzo di tipi generici e alias di tipo con i checker di tipo statico.
Questo articolo non tenta di fornire una specifica completa di tutte le nuove funzionalità, ma offre invece una panoramica. Per i dettagli completi, dovresti fare riferimento alla documentazione, come il Library Reference e il Language Reference. Se vuoi comprendere l’implementazione completa e la motivazione dietro una modifica, fai riferimento al PEP per una particolare nuova funzionalità; ma tieni presente che i PEP di solito non vengono aggiornati una volta che una funzionalità è stata completamente implementata.
Nuove funzionalità sintattiche:
Nuove funzionalità grammaticali:
Miglioramenti dell’interprete:
PEP 669, monitoraggio a basso impatto
Suggerimenti migliorati “Intendevi dire …” per eccezioni
NameError
,ImportError
, eSyntaxError
Miglioramenti al modello di dati di Python:
PEP 688, usando il protocollo del buffer da Python
Miglioramenti significativi nella libreria standard:
La classe
pathlib.Path
ora supporta la sottoclassificazioneIl modulo
os
ha ricevuto diversi miglioramenti per il supporto di WindowsUn’interfaccia a riga di comando interface è stata aggiunta al modulo
sqlite3
I controlli
isinstance()
contro i protocolliruntime-checkable
godono di un’accelerazione tra due e 20 volteIl pacchetto
asyncio
ha avuto numerosi miglioramenti di performance, con alcuni benchmark che mostrano un’accelerazione del 75%.Un’interfaccia a riga di comando interface è stata aggiunta al modulo
uuid
A causa delle modifiche nel PEP 701, la produzione di token tramite il modulo
tokenize
è fino al 64% più veloce.
Miglioramenti alla sicurezza:
Sostituire le implementazioni integrate del modulo
hashlib
di SHA1, SHA3, SHA2-384, SHA2-512 e MD5 con codice formalmente verificato dal progetto HACL*. Queste implementazioni integrate rimangono come fallback che vengono utilizzate solo quando OpenSSL non le fornisce.
Miglioramenti all’API C:
Miglioramenti all’implementazione di CPython:
PEP 709, inlining delle comprensioni
Supporto CPython per il profiler
perf
su LinuxImplementare la protezione da overflow dello stack su piattaforme supportate
Nuove funzionalità di typing:
PEP 698, decoratore
typing.override()
Deprecazioni, rimozioni o restrizioni importanti:
PEP 623: Rimuovere
wstr
dagli oggetti Unicode nell’API C di Python, riducendo la dimensione di ogni oggettostr
di almeno 8 byte.PEP 632: Remove the
distutils
package. 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: Non preinstallare
setuptools
negli ambienti virtuali creati convenv
. Ciò significa chedistutils
,setuptools
,pkg_resources
eeasy_install
non saranno più disponibili di default; per accedervi eseguirepip install setuptools
nell’ambiente virtuale attivato.I moduli
asynchat
,asyncore
eimp
sono stati rimossi, insieme a diversi alias di metodo diunittest.TestCase
.
Nuove Funzionalità¶
PEP 695: Sintassi dei Parametri di Tipo¶
Le classi generiche e le funzioni sotto PEP 484 erano dichiarate utilizzando una sintassi verbosa che lasciava poco chiaro l’ambito dei parametri di tipo e richiedeva dichiarazioni esplicite di varianza.
PEP 695 introduce un nuovo modo, più compatto ed esplicito, per creare classi generiche e funzioni:
def max[T](args: Iterable[T]) -> T:
...
class list[T]:
def __getitem__(self, index: int, /) -> T:
...
def append(self, element: T) -> None:
...
Inoltre, il PEP introduce un nuovo modo di dichiarare alias di tipo utilizzando l’istruzione type
, che crea un’istanza di TypeAliasType
:
type Point = tuple[float, float]
Gli alias di tipo possono anche essere generici:
type Point[T] = tuple[T, T]
La nuova sintassi consente di dichiarare parametri TypeVarTuple
e ParamSpec
, nonché parametri TypeVar
con limiti o vincoli:
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
Il valore degli alias di tipo e i limiti e vincoli delle variabili di tipo creati con questa sintassi sono valutati solo su richiesta (vedi lazy evaluation). Ciò significa che gli alias di tipo possono riferirsi ad altri tipi definiti successivamente nel file.
I parametri di tipo dichiarati attraverso una lista di parametri di tipo sono visibili all’interno dell’ambito della dichiarazione e in qualsiasi ambito annidato, ma non nell’ambito esterno. Ad esempio, possono essere utilizzati nelle annotazioni di tipo per i metodi di una classe generica o nel corpo della classe. Tuttavia, non possono essere utilizzati nell’ambito del modulo dopo che la classe è stata definita. Vedi Type parameter lists per una descrizione dettagliata della semantica di runtime dei parametri di tipo.
Per supportare questa semantica di ambito, è stato introdotto un nuovo tipo di ambito, l”annotation scope. Gli ambiti di annotazione si comportano per lo più come gli ambiti delle funzioni, ma interagiscono in modo diverso con gli ambiti della classe che li contengono. In Python 3.13, le annotazioni saranno valutate negli ambiti di annotazione.
Vedi PEP 695 per ulteriori dettagli.
(PEP scritto da Eric Traut. Implementazione di Jelle Zijlstra, Eric Traut e altri in gh-103764.)
PEP 701: Formalizzazione sintattica delle f-string¶
PEP 701 rimuove alcune restrizioni sull’uso delle f-string. Gli elementi dell’espressione all’interno delle f-string possono ora essere qualsiasi espressione Python valida, incluse stringhe che riutilizzano la stessa virgoletta della f-string contenente, espressioni multilinea, commenti, backslash e sequenze di escape unicode. Approfondiamo questi aspetti in dettaglio:
Riutilizzo delle virgolette: in Python 3.11, riutilizzare le stesse virgolette della f-string contenente genera un’eccezione
SyntaxError
, costringendo l’utente a utilizzare altre virgolette disponibili (come l’uso delle virgolette doppie o delle virgolette triple se la f-string usa virgolette singole). In Python 3.12, è ora possibile fare cose come questa:>>> 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'
Prima di questa modifica non esisteva un limite esplicito su come le f-string potessero essere annidate, ma il fatto che le virgolette delle stringhe non potessero essere riutilizzate all’interno dell’elemento di espressione delle f-string rendeva impossibile annidare le f-string arbitrariamente. Infatti, questa è l’f-string più annidata che poteva essere scritta:
>>> f"""{f'''{f'{f"{1+1}"}'}'''}""" '2'
Poiché ora le f-string possono contenere qualsiasi espressione Python valida all’interno degli elementi di espressione, è ora possibile annidare le f-string arbitrariamente:
>>> f"{f"{f"{f"{f"{f"{1+1}"}"}"}"}"}" '2'
Espressioni multilinea e commenti: in Python 3.11, le espressioni all’interno delle f-string devono essere definite in una singola riga, anche se l’espressione all’interno della f-string potrebbe normalmente estendersi su più righe (come le liste letterali definite su più righe), rendendole più difficili da leggere. In Python 3.12 è ora possibile definire f-string che si estendono su più righe e aggiungere commenti in linea:
>>> 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'
Backslash e caratteri unicode: prima di Python 3.12, le espressioni f-string non potevano contenere alcun carattere
\
. Questo influenzava anche le sequenze di escape unicode (come\N{snowman}
) poiché contengono la parte\N
che prima non poteva far parte degli elementi di espressione delle f-string. Ora puoi definire espressioni come questa:>>> 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
Vedi PEP 701 per ulteriori dettagli.
Come effetto collaterale positivo di come questa funzione è stata implementata (parsing delle f-string con il PEG parser), ora i messaggi di errore per le f-string sono più precisi e includono l’esatta posizione dell’errore. Ad esempio, in Python 3.11, la seguente f-string genera un’eccezione 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?
ma il messaggio di errore non include l’esatta posizione dell’errore all’interno della riga e ha anche l’espressione circondata artificialmente da parentesi. In Python 3.12, poiché le f-string sono parse con il PEG parser, i messaggi di errore possono essere più precisi e mostrare l’intera riga:
>>> 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?
(Contributi da Pablo Galindo, Batuhan Taskaya, Lysandros Nikolaou, Cristián Maureira-Fredes e Marta Gómez in gh-102856. PEP scritto da Pablo Galindo, Batuhan Taskaya, Lysandros Nikolaou e Marta Gómez).
PEP 684: Un GIL per interprete¶
PEP 684 introduce un GIL per interprete, in modo che gli interpreti secondari possano ora essere creati con un GIL unico per interprete. Questo consente ai programmi Python di sfruttare appieno i core della CPU multipli. Attualmente è disponibile solo tramite la C-API, sebbene si preveda una API Python per la versione 3.13.
Usa la nuova funzione Py_NewInterpreterFromConfig()
per creare un interprete con il proprio 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
.
(Contributi da Eric Snow in gh-104210, ecc.)
PEP 669: Monitoraggio a basso impatto per CPython¶
PEP 669 definisce una nuova API
per profiler, debugger e altri strumenti per monitorare eventi in CPython. Copre una vasta gamma di eventi, inclusi chiamate, ritorni, righe, eccezioni, salti e altro. Questo significa che paghi solo per quello che usi, fornendo supporto per strumenti di debug e copertura a quasi zero overhead. Vedi sys.monitoring
per i dettagli.
(Contributi da Mark Shannon in gh-103082.)
PEP 688: Rendere accessibile il protocollo buffer in Python¶
PEP 688 introduce un modo per utilizzare il protocollo buffer dal codice Python. Le classi che implementano il metodo __buffer__()
sono ora utilizzabili come tipi di buffer.
Il nuovo ABC collections.abc.Buffer
fornisce un modo standard per rappresentare oggetti buffer, ad esempio nelle annotazioni di tipo. Il nuovo enumerativo inspect.BufferFlags
rappresenta i flag che possono essere utilizzati per personalizzare la creazione del buffer. (Contributo di Jelle Zijlstra in gh-102500.)
PEP 709: Inlining delle comprehension¶
Le comprehension di dizionari, liste e set sono ora inlined, piuttosto che creare un nuovo oggetto funzione monouso per ogni esecuzione della comprehension. Questo accelera l’esecuzione di una comprehension fino a due volte. Vedi PEP 709 per ulteriori dettagli.
Le variabili di iterazione delle comprehension rimangono isolate e non sovrascrivono una variabile con lo stesso nome nell’ambito esterno, né sono visibili dopo la comprehension. L’inlining comporta alcuni cambiamenti di comportamento visibili:
Nei traceback non c’è più un frame separato per la comprehension, e il tracciamento/profiling non mostra più la comprehension come una chiamata di funzione.
Il modulo
symtable
non produrrà più tabelle simbolo figlie per ogni comprehension; invece, le variabili locali della comprehension saranno incluse nella tabella simbolo della funzione principale.Chiamando
locals()
all’interno di una comprehension ora include variabili dall’esterno della comprehension e non include più la variabile sintetica.0
per «l’argomento» della comprehension.Una comprehension che itera direttamente su
locals()
(ad es.[k for k in locals()]
) potrebbe vedere «RuntimeError: dimensione del dizionario cambiata durante l’iterazione» quando eseguita sotto tracciamento (ad es. misurazione della copertura del codice). Questo è lo stesso comportamento già visto, ad es.for k in locals():
. Per evitare l’errore, prima crea una lista di chiavi da iterare:keys = list(locals()); [k for k in keys]
.
(Contributi di Carl Meyer e Vladimir Matveev in PEP 709.)
Messaggi di errore migliorati¶
I moduli della libreria standard sono ora potenzialmente suggeriti come parte dei messaggi di errore visualizzati dall’interprete quando un’eccezione
NameError
viene sollevata a livello superiore. (Contributi da Pablo Galindo in 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'?
Migliora il suggerimento di errore per le eccezioni
NameError
per le istanze. Ora, se un’eccezioneNameError
viene sollevata in un metodo e l’istanza ha un attributo esattamente uguale al nome nell’eccezione, il suggerimento includeràself.<NAME>
invece della corrispondenza più vicina nell’ambito del metodo. (Contributi da Pablo Galindo in 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'?
Migliora il messaggio di errore
SyntaxError
quando l’utente digitaimport x from y
invece difrom y import x
. (Contributi da Pablo Galindo in 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?
Le eccezioni
ImportError
sollevate da dichiarazioni difrom <module> import <name>
fallite includono ora suggerimenti per il valore di<name>
basati sui nomi disponibili in<module>
. (Contributi da Pablo Galindo in 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'?
Altre modifiche al Linguaggio¶
Il parser ora solleva
SyntaxError
quando analizza il codice sorgente contenente byte nulli. (Contributo di Pablo Galindo in gh-96670.)Una coppia carattere-barra rovesciata che non è una sequenza di escape valida ora genera un
SyntaxWarning
, invece di unDeprecationWarning
. Ad esempio,re.compile("\d+\.\d+")
ora emette unSyntaxWarning
("\d"
è una sequenza di escape non valida, utilizzare stringhe raw per le espressioni regolari:re.compile(r"\d+\.\d+")
). In una futura versione di Python, verrà infine sollevato unSyntaxError
, invece di unSyntaxWarning
. (Contributo di Victor Stinner in gh-98401.)Le sequenze di escape ottali con valore maggiore di
0o377
(es:"\477"
), deprecate in Python 3.11, ora producono unSyntaxWarning
, invece di unDeprecationWarning
. In una futura versione di Python, diventeranno infine unSyntaxError
. (Contributo di Victor Stinner in gh-98401.)Le variabili utilizzate nella parte target delle comprensioni che non vengono memorizzate possono ora essere utilizzate nelle espressioni di assegnazione (
:=
). Ad esempio, in[(b := 1) for a, b.prop in some_iter]
, l’assegnazione ab
è ora consentita. Si noti che l’assegnazione a variabili memorizzate nella parte target delle comprensioni (comea
) è ancora vietata, come per PEP 572. (Contributo di Nikita Sobolev in gh-100581.)Le eccezioni sollevate nel metodo
__set_name__
di una classe o di un tipo non vengono più avvolte da unRuntimeError
. Le informazioni di contesto vengono aggiunte all’eccezione come nota PEP 678. (Contributo di Irit Katriel in gh-77757.)Quando una costruzione
try-except*
gestisce l’interoExceptionGroup
e solleva un’altra eccezione, quella eccezione non è più avvolta in unExceptionGroup
. Anche modificato nella versione 3.11.4. (Contributo di Irit Katriel in gh-103590.)Il Garbage Collector ora viene eseguito solo sul meccanismo eval breaker del ciclo di valutazione del bytecode Python invece delle allocazioni di oggetti. Il GC può anche essere eseguito quando viene chiamato
PyErr_CheckSignals()
in modo che le estensioni C che devono essere eseguite per lungo tempo senza eseguire alcun codice Python abbiano anche la possibilità di eseguire periodicamente il GC. (Contributo di Pablo Galindo in gh-97922.)Tutti i callable builtin e delle estensioni che si aspettano parametri booleani ora accettano argomenti di qualsiasi tipo invece di soli
bool
eint
. (Contributo di Serhiy Storchaka in gh-60203.)memoryview
supporta ora il tipo half-float (il codice di formato «e»). (Contributo di Donghee Na e Antoine Pitrou in gh-90751.)Gli oggetti
slice
sono ora hashabili, consentendo loro di essere utilizzati come chiavi di dizionari e elementi di insiemi. (Contributo di Will Bradshaw, Furkan Onder e Raymond Hettinger in gh-101264.)sum()
utilizza ora la sommatoria Neumaier per migliorare la precisione e la commutatività quando si sommano float o mix di int e float. (Contributo di Raymond Hettinger in gh-100425.)ast.parse()
solleva oraSyntaxError
invece diValueError
quando analizza il codice sorgente contenente byte nulli. (Contributo di Pablo Galindo in gh-96670.)I metodi di estrazione in
tarfile
, eshutil.unpack_archive()
, hanno un nuovo argomento filter che consente di limitare le funzionalità tar che possono essere sorprendenti o pericolose, come la creazione di file al di fuori della directory di destinazione. Vedere tarfile extraction filters per ulteriori dettagli. In Python 3.14, il valore predefinito passerà a'data'
. (Contributo di Petr Viktorin in PEP 706.)Le istanze di
types.MappingProxyType
sono ora hashabili se la mappa sottostante è hashabile. (Contributo di Serhiy Storchaka in gh-87995.)Aggiungo supporto per il profiler perf attraverso la nuova variabile di ambiente
PYTHONPERFSUPPORT
e l’opzione da riga di comando-X perf
, così come le nuove funzionisys.activate_stack_trampoline()
,sys.deactivate_stack_trampoline()
esys.is_stack_trampoline_active()
. (Progettazione di Pablo Galindo. Contributo di Pablo Galindo e Christian Heimes con contributi di Gregory P. Smith [Google] e Mark Shannon in gh-96123.)
Nuovi Moduli¶
Nessuno.
Moduli Migliorati¶
array¶
La classe
array.array
ora supporta il subscript, rendendola un generic type. (Contributo di Jelle Zijlstra in gh-98658.)
asyncio¶
Le prestazioni della scrittura sui socket in
asyncio
sono state notevolmente migliorate.asyncio
ora evita copie non necessarie durante la scrittura sui socket e utilizzasendmsg()
se la piattaforma lo supporta. (Contributo di Kumar Aditya in gh-91166.)Aggiungo le funzioni
asyncio.eager_task_factory()
easyncio.create_eager_task_factory()
per permettere a un event loop di optare per l’esecuzione rapida dei task, rendendo alcuni casi d’uso 2x a 5x più veloci. (Contributo di Jacob Bower & Itamar Oren in gh-102853, gh-104140 e gh-104138)Su Linux,
asyncio
utilizzaasyncio.PidfdChildWatcher
di default seos.pidfd_open()
è disponibile e funzionale invece diasyncio.ThreadedChildWatcher
. (Contributo di Kumar Aditya in gh-98024.)L’event loop ora utilizza il miglior watcher per figli disponibile per ogni piattaforma (
asyncio.PidfdChildWatcher
se supportato easyncio.ThreadedChildWatcher
altrimenti), quindi configurare manualmente un watcher per figli non è consigliato. (Contributo di Kumar Aditya in gh-94597.)Aggiungo il parametro loop_factory a
asyncio.run()
per consentire di specificare una factory per event loop personalizzata. (Contributo di Kumar Aditya in gh-99388.)Aggiungo l’implementazione in C di
asyncio.current_task()
per un miglioramento delle prestazioni da 4x a 6x. (Contributo di Itamar Oren e Pranav Thulasiram Bhat in gh-100344.)asyncio.iscoroutine()
ora restituisceFalse
per i generatori poichéasyncio
non supporta le coroutine basate su generatori legacy. (Contributo di Kumar Aditya in gh-102748.)asyncio.wait()
easyncio.as_completed()
accettano ora generatori che generano task. (Contributo di Kumar Aditya in gh-78530.)
calendar¶
Aggiungo gli enum
calendar.Month
ecalendar.Day
che definiscono i mesi dell’anno e i giorni della settimana. (Contributo di Prince Roshan in gh-103636.)
csv¶
Add
csv.QUOTE_NOTNULL
andcsv.QUOTE_STRINGS
flags to provide finer grained control ofNone
and empty strings byreader
andwriter
objects.
dis¶
Gli opcode delle pseudo-istruzioni (che sono utilizzati dal compilatore ma non compaiono nel bytecode eseguibile) sono ora esposti nel modulo
dis
.HAVE_ARGUMENT
è ancora rilevante per i reali opcode, ma non è utile per le pseudo-istruzioni. Usare la nuova collezionedis.hasarg
al suo posto. (Contributo di Irit Katriel in gh-94216.)Aggiungo la collezione
dis.hasexc
per indicare le istruzioni che impostano un gestore di eccezioni. (Contributo di Irit Katriel in gh-94216.)
fractions¶
Gli oggetti di tipo
fractions.Fraction
ora supportano il formato float-style. (Contributo di Mark Dickinson in gh-100161.)
importlib.resources¶
importlib.resources.as_file()
supporta ora le directory di risorse. (Contributo di Jason R. Coombs in gh-97930.)Rinominare il primo parametro di
importlib.resources.files()
in anchor. (Contributo di Jason R. Coombs in gh-100598.)
inspect¶
Aggiungo
inspect.markcoroutinefunction()
per contrassegnare le funzioni sync che restituiscono una coroutine per l’uso coninspect.iscoroutinefunction()
. (Contributo di Carlton Gibson in gh-99247.)Aggiungo
inspect.getasyncgenstate()
einspect.getasyncgenlocals()
per determinare lo stato corrente dei generatori asincroni. (Contributo di Thomas Krennwallner in gh-79940.)Le prestazioni di
inspect.getattr_static()
sono state notevolmente migliorate. La maggior parte delle chiamate a questa funzione dovrebbe essere almeno 2x più veloce rispetto a Python 3.11. (Contributo di 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.)
matematica¶
Aggiungi
math.sumprod()
per calcolare una somma di prodotti. (Contribuito da Raymond Hettinger in gh-100485.)Estendere
math.nextafter()
per includere un argomento steps per muoversi su o giù di più passi alla volta. (Contribuito da Matthias Goergens, Mark Dickinson, e Raymond Hettinger in gh-94906.)
os¶
Aggiungi
os.PIDFD_NONBLOCK
per aprire un file descriptor per un processo conos.pidfd_open()
in modalità non bloccante. (Contribuito da Kumar Aditya in gh-93312.)os.DirEntry
ora include un metodoos.DirEntry.is_junction()
per verificare se l’elemento è una giunzione. (Contribuito da Charles Machalow in gh-99547.)Aggiungi le funzioni
os.listdrives()
,os.listvolumes()
eos.listmounts()
su Windows per enumerare unità, volumi e punti di montaggio. (Contribuito da Steve Dower in gh-102519.)Le funzioni
os.stat()
eos.lstat()
sono ora più precise su Windows. Il campost_birthtime
verrà ora riempito con il tempo di creazione del file est_ctime
è deprecato ma contiene ancora il tempo di creazione (ma in futuro restituirà l’ultima modifica ai metadati, per coerenza con altre piattaforme).st_dev
può essere fino a 64 bit est_ino
fino a 128 bit a seconda del file system, est_rdev
è sempre impostato su zero anziché valori errati. Entrambe le funzioni possono essere significativamente più veloci nelle nuove versioni di Windows. (Contribuito da Steve Dower in gh-99726.)
os.path¶
Aggiungi
os.path.isjunction()
per verificare se un determinato percorso è una giunzione. (Contribuito da Charles Machalow in gh-99547.)Aggiungi
os.path.splitroot()
per dividere un percorso in una triade(drive, root, tail)
. (Contribuito da Barney Gale in gh-101000.)
pathlib¶
Aggiungi il supporto per la sottoclassificazione di
pathlib.PurePath
epathlib.Path
, oltre alle loro varianti specifiche Posix e Windows. Le sottoclassi possono sovrascrivere il metodopathlib.PurePath.with_segments()
per passare informazioni tra le istanze del cammino.Aggiungi
pathlib.Path.walk()
per attraversare gli alberi delle directory e generare tutti i nomi di file o directory al loro interno, simile aos.walk()
. (Contribuito da Stanislav Zmiev in gh-90385.)Aggiungi il parametro opzionale walk_up a
pathlib.PurePath.relative_to()
per permettere l’inserimento di voci..
nel risultato; questo comportamento è più coerente conos.path.relpath()
. (Contribuito da Domenico Ragusa in gh-84538.)Aggiungi
pathlib.Path.is_junction()
come proxy peros.path.isjunction()
. (Contribuito da Charles Machalow in gh-99547.)Aggiungi il parametro opzionale case_sensitive a
pathlib.Path.glob()
,pathlib.Path.rglob()
epathlib.PurePath.match()
per abbinare la sensibilità del percorso, consentendo un controllo più preciso sul processo di abbinamento.
pdb¶
Aggiungi variabili di convenienza per tenere temporaneamente i valori per la sessione di debug e fornire un accesso rapido a valori come il frame corrente o il valore di ritorno. (Contribuito da Tian Gao in gh-103693.)
random¶
Aggiungi
random.binomialvariate()
. (Contribuito da Raymond Hettinger in gh-81620.)Aggiungi un default di
lambd=1.0
arandom.expovariate()
. (Contribuito da Raymond Hettinger in gh-100234.)
shutil¶
shutil.make_archive()
ora passa l’argomento root_dir agli archiviatori personalizzati che lo supportano. In questo caso, non cambia più temporaneamente la directory di lavoro corrente del processo in root_dir per eseguire l’archiviazione. (Contribuito da Serhiy Storchaka in gh-74696.)shutil.rmtree()
ora accetta un nuovo argomento onexc che è un gestore di errori simile a onerror ma che si aspetta un’istanza di eccezione piuttosto che un terzetto (typ, val, tb). onerror è deprecato. (Contribuito da Irit Katriel in gh-102828.)shutil.which()
ora consulta la variabile d’ambiente PATHEXT per trovare corrispondenze all’interno di PATH su Windows anche quando il cmd dato include un componente di directory. (Contribuito da Charles Machalow in gh-103179.)shutil.which()
chiameràNeedCurrentDirectoryForExePathW
quando interroga per eseguibili su Windows per determinare se la directory di lavoro corrente dovrebbe essere aggiunta al percorso di ricerca. (Contribuito da Charles Machalow in gh-103179.)shutil.which()
restituirà un percorso corrispondente al cmd con un componente daPATHEXT
prima di una corrispondenza diretta altrove nel percorso di ricerca su Windows. (Contribuito da Charles Machalow in gh-103179.)
sqlite3¶
Aggiungi una interfaccia da linea di comando. (Contribuito da Erlend E. Aasland in gh-77617.)
Aggiungi l’attributo
sqlite3.Connection.autocommit
asqlite3.Connection
e il parametro autocommit asqlite3.connect()
per controllare la PEP 249-compliant gestione delle transazioni. (Contribuito da Erlend E. Aasland in gh-83638.)Aggiungi il parametro keyword-only entrypoint a
sqlite3.Connection.load_extension()
, per sovrascrivere il punto di ingresso dell’estensione SQLite. (Contribuito da Erlend E. Aasland in gh-103015.)Aggiungi
sqlite3.Connection.getconfig()
esqlite3.Connection.setconfig()
asqlite3.Connection
per apportare modifiche di configurazione a una connessione al database. (Contribuito da Erlend E. Aasland in gh-103489.)
statistica¶
Estendere
statistics.correlation()
per includere un metodoranked
per calcolare la correlazione di Spearman di dati classificati. (Contribuito da Raymond Hettinger in gh-95861.)
sys¶
Aggiungi lo spazio dei nomi
sys.monitoring
per esporre la nuova API di monitoraggio PEP 669. (Contribuito da Mark Shannon in gh-103082.)Aggiungi
sys.activate_stack_trampoline()
esys.deactivate_stack_trampoline()
per attivare e disattivare i trampolini del profiler di stack, esys.is_stack_trampoline_active()
per verificare se i trampolini del profiler di stack sono attivi. (Contribuito da Pablo Galindo e Christian Heimes con contributi di Gregory P. Smith [Google] e Mark Shannon in gh-96123.)Aggiungi
sys.last_exc
che contiene l’ultima eccezione non gestita che è stata sollevata (per casi d’uso di debug post-mortem). Deprecati i tre campi che contengono le stesse informazioni nella loro forma legacy:sys.last_type
,sys.last_value
esys.last_traceback
. (Contribuito da Irit Katriel in gh-102778.)sys._current_exceptions()
ora restituisce una mappa da thread-id a un’istanza di eccezione, anziché a una tupla(typ, exc, tb)
. (Contribuito da Irit Katriel in gh-103176.)sys.setrecursionlimit()
esys.getrecursionlimit()
. Il limite di ricorsione ora si applica solo al codice Python. Le funzioni built-in non utilizzano il limite di ricorsione, ma sono protette da un diverso meccanismo che impedisce alla ricorsione di causare il crash della macchina virtuale.
tempfile¶
La funzione
tempfile.NamedTemporaryFile
ha un nuovo parametro opzionale delete_on_close (Contribuito da Evgeny Zorin in gh-58451.)tempfile.mkdtemp()
ora ritorna sempre un percorso assoluto, anche se l’argomento fornito al parametro dir è un percorso relativo.
threading¶
Aggiungi
threading.settrace_all_threads()
ethreading.setprofile_all_threads()
che permettono di impostare funzioni di traccia e di profilazione in tutti i thread in esecuzione oltre a quello chiamante. (Contribuito da Pablo Galindo in gh-93503.)
tkinter¶
tkinter.Canvas.coords()
ora appiattisce i suoi argomenti. Ora accetta non solo coordinate come argomenti separati (x1, y1, x2, y2, ...
) e una sequenza di coordinate ([x1, y1, x2, y2, ...]
), ma anche coordinate raggruppate in coppie ((x1, y1), (x2, y2), ...
e[(x1, y1), (x2, y2), ...]
), come i metodicreate_*()
. (Contributo di Serhiy Storchaka in gh-94473.)
tokenize¶
Il modulo
tokenize
include le modifiche introdotte in PEP 701. (Contributo di Marta Gómez Macías e Pablo Galindo in gh-102856.) Vedi Porting a Python 3.12 per maggiori informazioni sulle modifiche al modulotokenize
.
types¶
Aggiungi
types.get_original_bases()
per consentire ulteriori introspezioni dei User-defined generic types quando sottoclassati. (Contributo di James Hilton-Balfe e Alex Waygood in gh-101827.)
typing¶
I controlli
isinstance()
contro iruntime-checkable protocols
ora utilizzanoinspect.getattr_static()
anzichéhasattr()
per verificare l’esistenza degli attributi. Ciò significa che i descrittori e i metodi__getattr__()
non vengono più valutati inaspettatamente durante i controlliisinstance()
contro i protocolli verificabili a runtime. Tuttavia, ciò può anche significare che alcuni oggetti che in precedenza erano considerati istanze di un protocollo verificabile a runtime potrebbero non essere più considerati tali con Python 3.12+ e viceversa. La maggior parte degli utenti non dovrebbe essere influenzata da questo cambiamento. (Contributo di Alex Waygood in gh-102433.)I membri di un protocollo verificabile a runtime sono ora considerati «congelati» a runtime non appena la classe è stata creata. Il monkey-patching degli attributi in un protocollo verificabile a runtime funzionerà ancora, ma non avrà alcun impatto sui controlli
isinstance()
che confrontano oggetti con il protocollo. Per esempio:>>> 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
Questa modifica è stata apportata per velocizzare i controlli
isinstance()
contro i protocolli verificabili a runtime.Il profilo delle prestazioni dei controlli
isinstance()
contro iruntime-checkable protocols
è cambiato significativamente. La maggior parte dei controlliisinstance()
contro i protocolli con pochi membri dovrebbe essere almeno 2 volte più veloce rispetto alla versione 3.11, e alcuni potrebbero essere 20 volte più veloci o più. Tuttavia, i controlliisinstance()
contro i protocolli con molti membri potrebbero risultare più lenti rispetto a Python 3.11. (Contributo di Alex Waygood in gh-74690 e gh-103193.)Tutte le classi
typing.TypedDict
etyping.NamedTuple
ora possiedono l’attributo__orig_bases__
. (Contributo di Adrian Garcia Badaracco in gh-103699.)Aggiungi il parametro
frozen_default
atyping.dataclass_transform()
. (Contributo di Erik De Bonte in gh-99957.)
unicodedata¶
Il database Unicode è stato aggiornato alla versione 15.0.0. (Contributo di Benjamin Peterson in gh-96734).
unittest¶
Aggiungi l’opzione di linea di comando --durations
, che mostra i N casi di test più lenti:
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)
(Contributo di Giampaolo Rodola in gh-48330)
uuid¶
Aggiungi una interfaccia della linea di comando. (Contributo di Adam Chhina in gh-88597.)
Ottimizzazioni¶
Rimuovi i membri
wstr
ewstr_length
dagli oggetti Unicode. Ciò riduce la dimensione degli oggetti di 8 o 16 byte sulla piattaforma a 64 bit. (PEP 623) (Contributo di Inada Naoki in gh-92536.)Aggiungi il supporto sperimentale per l’uso dell’ottimizzatore binario BOLT nel processo di build, che migliora le prestazioni dell’1-5%. (Contributo di Kevin Modzelewski in gh-90536 e ottimizzato da Donghee Na in gh-101525)
Velocizza la sostituzione delle espressioni regolari (funzioni
re.sub()
ere.subn()
e i corrispondenti metodi dire.Pattern
) per le stringhe di sostituzione contenenti riferimenti di gruppo di 2-3 volte. (Contributo di Serhiy Storchaka in gh-91524.)Velocizza la creazione di
asyncio.Task
rimandando la formattazione delle stringhe costosa. (Contributo di Itamar Oren in gh-103793.)Le funzioni
tokenize.tokenize()
etokenize.generate_tokens()
sono fino al 64% più veloci come effetto collaterale delle modifiche necessarie per coprire PEP 701 nel modulotokenize
. (Contributo di Marta Gómez Macías e Pablo Galindo in gh-102856.)Velocizza le chiamate al metodo
super()
e i caricamenti degli attributi tramite la nuova istruzioneLOAD_SUPER_ATTR
. (Contributo di Carl Meyer e Vladimir Matveev in gh-103497.)
Modifiche al bytecode di CPython¶
Rimuovi l’istruzione
LOAD_METHOD
. È stata unita aLOAD_ATTR
. OraLOAD_ATTR
si comporterà come la vecchia istruzioneLOAD_METHOD
se il bit inferiore del suo oparg è impostato. (Contributo di Ken Jin in gh-93429.)Rimuovi le istruzioni
JUMP_IF_FALSE_OR_POP
eJUMP_IF_TRUE_OR_POP
. (Contributo di Irit Katriel in gh-102859.)Rimuovi l’istruzione
PRECALL
. (Contributo di Mark Shannon in gh-92925.)Aggiungi le istruzioni
BINARY_SLICE
eSTORE_SLICE
. (Contributo di Mark Shannon in gh-94163.)Aggiungi le istruzioni
CALL_INTRINSIC_1
. (Contributo di Mark Shannon in gh-99005.)Aggiungi l’istruzione
CALL_INTRINSIC_2
. (Contributo di Irit Katriel in gh-101799.)Aggiungi l’istruzione
CLEANUP_THROW
. (Contributo di Brandt Bucher in gh-90997.)Aggiungi l’istruzione
END_SEND
. (Contributo di Mark Shannon in gh-103082.)Aggiungi l’istruzione
LOAD_FAST_AND_CLEAR
come parte dell’implementazione di PEP 709. (Contributo di Carl Meyer in gh-101441.)Aggiungi l’istruzione
LOAD_FAST_CHECK
. (Contributo di Dennis Sweeney in gh-93143.)Aggiungi le istruzioni
LOAD_FROM_DICT_OR_DEREF
,LOAD_FROM_DICT_OR_GLOBALS
, eLOAD_LOCALS
come parte dell’implementazione di PEP 695. Rimuovi l’opcodeLOAD_CLASSDEREF
, che può essere sostituito conLOAD_LOCALS
piùLOAD_FROM_DICT_OR_DEREF
. (Contributo di Jelle Zijlstra in gh-103764.)Aggiungi l’istruzione
LOAD_SUPER_ATTR
. (Contributo di Carl Meyer e Vladimir Matveev in gh-103497.)Aggiungi l’istruzione
RETURN_CONST
. (Contributo di Wenyang Wang in gh-101632.)
Demos e Tools¶
Rimuovi la directory
Tools/demo/
che conteneva vecchi script demo. Una copia può essere trovata nel progetto old-demos. (Contributo di Victor Stinner in gh-97681.)Rimuovi script di esempio obsoleti dalla directory
Tools/scripts/
. Una copia può essere trovata nel progetto old-demos. (Contributo di Victor Stinner in gh-97669.)
Deprecato¶
argparse
: I parametri type, choices e metavar diargparse.BooleanOptionalAction
sono deprecati e saranno rimossi nella versione 3.14. (Contributo di Nikita Sobolev in gh-92248.)ast
: Le seguenti caratteristiche diast
sono deprecate nella documentazione da Python 3.8, ora causano un’emissione diDeprecationWarning
al runtime quando vengono accedute o utilizzate, e saranno rimosse in Python 3.14:ast.Num
ast.Str
ast.Bytes
ast.NameConstant
ast.Ellipsis
Utilizzare
ast.Constant
al suo posto. (Contributo di Serhiy Storchaka in gh-90953.)-
Le classi watcher dei processi figli
asyncio.MultiLoopChildWatcher
,asyncio.FastChildWatcher
,asyncio.AbstractChildWatcher
easyncio.SafeChildWatcher
sono deprecate e saranno rimosse in Python 3.14. (Contributo di Kumar Aditya in gh-94597.)Le funzioni
asyncio.set_child_watcher()
,asyncio.get_child_watcher()
,asyncio.AbstractEventLoopPolicy.set_child_watcher()
easyncio.AbstractEventLoopPolicy.get_child_watcher()
sono deprecate e saranno rimosse in Python 3.14. (Contributo di Kumar Aditya in gh-94597.)Il metodo
get_event_loop()
della politica del ciclo di eventi predefinito ora emette unDeprecationWarning
se non c’è alcun ciclo di eventi corrente impostato e decide di crearne uno. (Contributo di Serhiy Storchaka e Guido van Rossum in gh-100160.)
calendar
: Le costanticalendar.January
ecalendar.February
sono deprecate e sostituite dacalendar.JANUARY
ecalendar.FEBRUARY
. (Contributo di Prince Roshan in gh-103636.)collections.abc
: Deprecatacollections.abc.ByteString
. PreferireSequence
ocollections.abc.Buffer
. Per l’uso nei tipi, preferire una unione, comebytes | bytearray
, ocollections.abc.Buffer
. (Contributo di Shantanu Jain in gh-91896.)datetime
: I metodiutcnow()
eutcfromtimestamp()
della classedatetime.datetime
sono deprecati e saranno rimossi in una futura versione. Invece, utilizzare oggetti timezone-aware per rappresentare i datetime in UTC: rispettivamente, chiamarenow()
efromtimestamp()
con il parametro tz impostato sudatetime.UTC
. (Contributo di Paul Ganssle in gh-103857.)email
: Deprecato il parametro isdst inemail.utils.localtime()
. (Contributo di Alan Williams in gh-72346.)importlib.abc
: Deprecate le seguenti classi, pianificate per la rimozione in Python 3.14:importlib.abc.ResourceReader
importlib.abc.Traversable
importlib.abc.TraversableResources
Utilizzare invece le classi del modulo
importlib.resources.abc
:(Contributo di Jason R. Coombs e Hugo van Kemenade in gh-93963.)
itertools
: Deprecato il supporto per operazioni di copy, deepcopy e pickle, che è non documentato, inefficiente, storicamente soggetto a bug e inconsistente. Questo sarà rimosso in 3.14 per una significativa riduzione del volume di codice e del carico di manutenzione. (Contributo di Raymond Hettinger in gh-101588.)multiprocessing
: In Python 3.14, il metodo di avvio predefinito dimultiprocessing
cambierà in uno più sicuro su Linux, BSD e altre piattaforme POSIX non macOS dove'fork'
è attualmente il predefinito (gh-84559). Aggiungere un avviso in fase di runtime su questo cambiamento è stato ritenuto troppo dirompente poiché la maggioranza del codice non dovrebbe risentirne. Utilizzare le APIget_context()
oset_start_method()
per specificare esplicitamente quando il codice richiede'fork'
. Vedi contexts and start methods.pkgutil
: Le funzionipkgutil.find_loader()
epkgutil.get_loader()
sono deprecate e saranno rimosse in Python 3.14; utilizzare inveceimportlib.util.find_spec()
. (Contributo di Nikita Sobolev in gh-97850.)pty
: Il modulo ha due funzioni non documentatemaster_open()
eslave_open()
che sono deprecate da Python 2 ma hanno ottenuto un vero e proprioDeprecationWarning
solo in 3.12. Rimuoverle in 3.14. (Contributo di Soumendra Ganguly e Gregory P. Smith in gh-85984.)os
:I campi
st_ctime
restituiti daos.stat()
eos.lstat()
su Windows sono deprecati. In una futura versione, conterranno l’ora dell’ultima modifica dei metadati, in linea con altre piattaforme. Per ora, contengono ancora l’ora di creazione, che è anche disponibile nel nuovo campost_birthtime
. (Contributo di Steve Dower in gh-99726.)On POSIX platforms,
os.fork()
can now raise aDeprecationWarning
when 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.
Quando questo avviso appare a causa dell’uso di
multiprocessing
oconcurrent.futures
la soluzione è di utilizzare un diverso metodo di avvio dimultiprocessing
come"spawn"
o"forkserver"
.shutil
: L’argomento onerror dishutil.rmtree()
è deprecato; utilizzare onexc invece. (Contributo di Irit Katriel in gh-102828.)-
default adapters and converters sono ora deprecati. Invece, utilizzare Adapter and converter recipes e adattarli alle tue esigenze. (Contributo di Erlend E. Aasland in gh-90016.)
In
execute()
, ora viene emesso unDeprecationWarning
quando named placeholders sono utilizzati insieme a parametri forniti come una sequence invece che come undict
. A partire da Python 3.14, l’uso di named placeholders con parametri forniti come una sequence genererà unProgrammingError
. (Contributo di Erlend E. Aasland in gh-101698.)
sys
: I campisys.last_type
,sys.last_value
esys.last_traceback
sono deprecati. Utilizzaresys.last_exc
invece. (Contributo di Irit Katriel in gh-102778.)tarfile
: L’estrazione degli archivi tar senza specificare filter è deprecata fino a Python 3.14, quando il filtro'data'
diventerà il predefinito. Vedere Extraction filters per i dettagli.-
typing.Hashable
etyping.Sized
, alias rispettivamente dicollections.abc.Hashable
ecollections.abc.Sized
, sono deprecati. (gh-94309.)typing.ByteString
, deprecata da Python 3.9, ora genera unDeprecationWarning
quando viene utilizzata. (Contributo di Alex Waygood in gh-91896.)
xml.etree.ElementTree
: Il modulo ora emetteDeprecationWarning
quando si testa il valore di verità di unxml.etree.ElementTree.Element
. Prima, l’implementazione in Python emettevaFutureWarning
, e l’implementazione in C non emetteva nulla. (Contributo di Jacob Walls in gh-83122.)Le firme a 3 argomenti (type, value, traceback) di
coroutine throw()
,generator throw()
easync generator throw()
sono deprecate e potrebbero essere rimosse in una futura versione di Python. Utilizzare invece le versioni a un singolo argomento di queste funzioni. (Contributo di Ofey Chan in gh-89874.)DeprecationWarning
is 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. Usenot
for 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_lnotab
on code objects was deprecated in Python 3.10 via PEP 626, but it only got a properDeprecationWarning
in 3.12. May be removed in 3.15. (Contributed by Nikita Sobolev in gh-101866.)
Rimozione pianificata in Python 3.13¶
Moduli (vedi PEP 594):
aifc
audioop
cgi
cgitb
chunk
crypt
imghdr
mailcap
msilib
nis
nntplib
ossaudiodev
pipes
sndhdr
spwd
sunau
telnetlib
uu
xdrlib
Altri moduli:
lib2to3
, e il programma 2to3 (gh-84540)
API:
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)Catena di descrittori
classmethod
(gh-89519)metodi deprecati
importlib.resources
: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)
Rimozione prevista in Python 3.14¶
argparse
: I parametri type, choices e metavar diargparse.BooleanOptionalAction
sono deprecati e saranno rimossi nella versione 3.14. (Contributo di Nikita Sobolev in gh-92248.)ast
: The following features have been deprecated in documentation since Python 3.8, now cause aDeprecationWarning
to be emitted at runtime when they are accessed or used, and will be removed in Python 3.14:ast.Num
ast.Str
ast.Bytes
ast.NameConstant
ast.Ellipsis
Utilizzare
ast.Constant
al suo posto. (Contributo di Serhiy Storchaka in gh-90953.)-
The child watcher classes
MultiLoopChildWatcher
,FastChildWatcher
,AbstractChildWatcher
andSafeChildWatcher
are deprecated and will be removed in Python 3.14. (Contributed by Kumar Aditya in gh-94597.)Le funzioni
asyncio.set_child_watcher()
,asyncio.get_child_watcher()
,asyncio.AbstractEventLoopPolicy.set_child_watcher()
easyncio.AbstractEventLoopPolicy.get_child_watcher()
sono deprecate e saranno rimosse in Python 3.14. (Contributo di Kumar Aditya in gh-94597.)Il metodo
get_event_loop()
della politica del ciclo di eventi predefinito ora emette unDeprecationWarning
se non c’è alcun ciclo di eventi corrente impostato e decide di crearne uno. (Contributo di Serhiy Storchaka e Guido van Rossum in gh-100160.)
collections.abc
: DeprecatedByteString
. PreferSequence
orBuffer
. For use in typing, prefer a union, likebytes | bytearray
, orcollections.abc.Buffer
. (Contributed by Shantanu Jain in gh-91896.)email
: Deprecated the isdst parameter inemail.utils.localtime()
. (Contributed by Alan Williams in gh-72346.)importlib.abc
deprecated classes:importlib.abc.ResourceReader
importlib.abc.Traversable
importlib.abc.TraversableResources
Utilizzare invece le classi del modulo
importlib.resources.abc
:(Contributo di Jason R. Coombs e Hugo van Kemenade in gh-93963.)
itertools
had 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 Contexts and start methods.pathlib
:is_relative_to()
andrelative_to()
: passing additional arguments is deprecated.pkgutil
:find_loader()
andget_loader()
now raiseDeprecationWarning
; useimportlib.util.find_spec()
instead. (Contributed by Nikita Sobolev in gh-97850.)pty
:master_open()
: usepty.openpty()
.slave_open()
: usepty.openpty()
.
-
version
andversion_info
.execute()
andexecutemany()
if named placeholders are used and parameters is a sequence instead of adict
.
typing
:ByteString
, deprecated since Python 3.9, now causes aDeprecationWarning
to be emitted when it is used.urllib
:urllib.parse.Quoter
is deprecated: it was not intended to be a public API. (Contributed by Gregory P. Smith in gh-88168.)
Rimozione in sospeso in Python 3.15¶
The import system:
Setting
__cached__
on a module while failing to set__spec__.cached
is deprecated. In Python 3.15,__cached__
will cease to be set or take into consideration by the import system or standard library. (gh-97879)Setting
__package__
on a module while failing to set__spec__.parent
is deprecated. In Python 3.15,__package__
will cease to be set or take into consideration by the import system or standard library. (gh-97879)
-
The undocumented
ctypes.SetPointerType()
function has been deprecated since Python 3.13.
-
The obsolete and rarely used
CGIHTTPRequestHandler
has 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
--cgi
flag 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.
-
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_lnotab
was deprecated in PEP 626 since 3.10 and was planned to be removed in 3.12, but it only got a properDeprecationWarning
in 3.12. May be removed in 3.15. (Contributed by Nikita Sobolev in gh-101866.)
-
The undocumented keyword argument syntax for creating
NamedTuple
classes (e.g.Point = NamedTuple("Point", x=int, y=int)
) has been deprecated since Python 3.13. Use the class-based syntax or the functional syntax instead.The
typing.no_type_check_decorator()
decorator function has been deprecated since Python 3.13. After eight years in thetyping
module, it has yet to be supported by any major type checker.
wave
:The
getmark()
,setmark()
, andgetmarkers()
methods of theWave_read
andWave_write
classes have been deprecated since Python 3.13.
Pending removal in Python 3.16¶
The import system:
Setting
__loader__
on a module while failing to set__spec__.loader
is deprecated. In Python 3.16,__loader__
will cease to be set or taken into consideration by the import system or the standard library.
-
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.)
-
Bitwise inversion on boolean types,
~True
or~False
has been deprecated since Python 3.12, as it produces surprising and unintuitive results (-2
and-1
). Usenot x
instead for the logical negation of a Boolean. In the rare case that you need the bitwise inversion of the underlying integer, convert toint
explicitly (~int(x)
).
-
The
ExecError
exception has been deprecated since Python 3.14. It has not been used by any function inshutil
since Python 3.4, and is now an alias ofRuntimeError
.
-
The
Class.get_methods
method has been deprecated since Python 3.14.
sys
:The
_enablelegacywindowsfsencoding()
function has been deprecated since Python 3.13. Use thePYTHONLEGACYWINDOWSFSENCODING
environment variable instead.
-
The undocumented and unused
TarFile.tarfile
attribute has been deprecated since Python 3.13.
Rimozione in sospeso nelle versioni future¶
The following APIs will be removed in the future, although there is currently no date scheduled for their removal.
argparse
: Nesting argument groups and nesting mutually exclusive groups are deprecated.-
bool(NotImplemented)
.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
,is
andor
. 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
: Le costanticalendar.January
ecalendar.February
sono deprecate e sostituite dacalendar.JANUARY
ecalendar.FEBRUARY
. (Contributo di Prince Roshan in gh-103636.)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.
-
EntryPoints
tuple interface.Implicit
None
on 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_constants
andsre_parse
modules.shutil
:rmtree()
”s onerror parameter is deprecated in Python 3.12; use the onexc parameter instead.ssl
options and protocols:ssl.SSLContext
without 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_SSLv3
ssl.PROTOCOL_TLS
ssl.PROTOCOL_TLSv1
ssl.PROTOCOL_TLSv1_1
ssl.PROTOCOL_TLSv1_2
ssl.TLSVersion.SSLv3
ssl.TLSVersion.TLSv1
ssl.TLSVersion.TLSv1_1
sysconfig.is_python_build()
check_home parameter is deprecated and ignored.threading
methods:threading.Condition.notifyAll()
: usenotify_all()
.threading.Event.isSet()
: useis_set()
.threading.Thread.isDaemon()
,threading.Thread.setDaemon()
: usethreading.Thread.daemon
attribute.threading.Thread.getName()
,threading.Thread.setName()
: usethreading.Thread.name
attribute.threading.currentThread()
: usethreading.current_thread()
.threading.activeCount()
: usethreading.active_count()
.
unittest.IsolatedAsyncioTestCase
: it is deprecated to return a value that is notNone
from a test case.urllib.parse
deprecated functions:urlparse()
insteadsplitattr()
splithost()
splitnport()
splitpasswd()
splitport()
splitquery()
splittag()
splittype()
splituser()
splitvalue()
to_bytes()
urllib.request
:URLopener
andFancyURLopener
style of invoking requests is deprecated. Use newerurlopen()
functions and methods.wsgiref
:SimpleHandler.stdout.write()
should not do partial writes.xml.etree.ElementTree
: Testing the truth value of anElement
is deprecated. In a future release it will always returnTrue
. Prefer explicitlen(elem)
orelem is not None
tests instead.zipimport.zipimporter.load_module()
is deprecated: useexec_module()
instead.
Rimosso¶
asynchat e asyncore¶
configparser¶
Diversi nomi deprecati nel
configparser
fin dalla versione 3.2 sono stati rimossi per gh-89336:configparser.ParsingError
non ha più un attributo o argomentofilename
. Utilizzare al suo posto l’attributo e l’argomentosource
.configparser
non ha più una classeSafeConfigParser
. Utilizzare al suo posto il nome più breveConfigParser
.configparser.ConfigParser
non ha più un metodoreadfp
. Utilizzare al suo postoread_file()
.
distutils¶
Rimozione del pacchetto
distutils
. È stato deprecato in Python 3.10 da PEP 632 «Deprecazione del modulo distutils». Per i progetti che ancora utilizzanodistutils
e non possono essere aggiornati ad altro, il progettosetuptools
può essere installato: fornisce ancoradistutils
. (Contribuito da Victor Stinner in gh-92584.)
ensurepip¶
Rimozione della ruota setuptools inclusa in
ensurepip
, e cessazione dell’installazione di setuptools negli ambienti creati davenv
.pip (>= 22.1)
non richiede che setuptools sia installato nell’ambiente. I pacchetti basati susetuptools
(e sudistutils
) possono ancora essere utilizzati conpip install
, poiché pip forniràsetuptools
nell’ambiente di build che utilizza per costruire un pacchetto.easy_install
,pkg_resources
,setuptools
edistutils
non sono più forniti di default negli ambienti creati convenv
o bootstrap conensurepip
, poiché fanno parte del pacchettosetuptools
. Per i progetti che dipendono da questi a runtime, il progettosetuptools
dovrebbe essere dichiarato come una dipendenza e installato separatamente (tipicamente, utilizzando pip).(Contribuito da Pradyun Gedam in gh-95299.)
enum¶
ftplib¶
gzip¶
Rimozione dell’attributo
filename
digzip.GzipFile
digzip
, deprecato dalla versione Python 2.6, utilizzare invece l’attributoname
. In modalità scrittura, l’attributofilename
aggiungeva l’estensione di file'.gz'
se non era presente. (Contribuito da Victor Stinner in 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¶
Molti di precedenti deprecazioni in
importlib
sono ora state completate:References to, and support for
module_repr()
has been removed. (Contributed by Barry Warsaw in gh-97850.)importlib.util.set_package
,importlib.util.set_loader
eimportlib.util.module_for_loader
sono stati tutti rimossi. (Contribuito da Brett Cannon e Nikita Sobolev in gh-65961 e gh-97850.)Il supporto per le API
find_loader()
efind_module()
è stato rimosso. (Contribuito da Barry Warsaw in gh-98040.)importlib.abc.Finder
,pkgutil.ImpImporter
epkgutil.ImpLoader
sono stati rimossi. (Contribuito da Barry Warsaw in gh-98040.)
imp¶
Il modulo
imp
è stato rimosso. (Contribuito da Barry Warsaw in gh-98040.)Per migrare, consultare la seguente tabella di corrispondenza:
imp
importlib
imp.NullImporter
Inserire
None
insys.path_importer_cache
imp.cache_from_source()
imp.find_module()
imp.get_magic()
imp.get_suffixes()
importlib.machinery.SOURCE_SUFFIXES
,importlib.machinery.EXTENSION_SUFFIXES
, andimportlib.machinery.BYTECODE_SUFFIXES
imp.get_tag()
imp.load_module()
imp.new_module(name)
types.ModuleType(name)
imp.reload()
imp.source_from_cache()
imp.load_source()
Vedi sotto
Sostituire
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
Rimuovere le funzioni e gli attributi di
imp
senza sostituzioni:Funzioni non documentate:
imp.init_builtin()
imp.load_compiled()
imp.load_dynamic()
imp.load_package()
imp.lock_held()
,imp.acquire_lock()
,imp.release_lock()
: lo schema di blocco è cambiato in Python 3.3 a blocchi per modulo.Costanti di
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¶
Rimuovere la funzione
locale.format()
dilocale
, deprecata in Python 3.7: usare invecelocale.format_string()
. (Contributo di Victor Stinner in gh-94226.)
smtpd¶
sqlite3¶
Le seguenti funzionalità non documentate di
sqlite3
, deprecate in Python 3.10, sono ora rimosse:sqlite3.enable_shared_cache()
sqlite3.OptimizedUnicode
Se è necessario utilizzare una cache condivisa, aprire il database in modalità URI utilizzando il parametro di query
cache=shared
.La text factory
sqlite3.OptimizedUnicode
è stata un alias perstr
fin dalla versione 3.3 di Python. Il codice che precedentemente impostava la text factory suOptimizedUnicode
può utilizzare esplicitamentestr
, o affidarsi al valore predefinito che è anch’essostr
.(Contributo di Erlend E. Aasland in gh-92548.)
ssl¶
Rimuovere la funzione
ssl.RAND_pseudo_bytes()
dissl
, deprecata in Python 3.6: utilizzare inveceos.urandom()
ossl.RAND_bytes()
. (Contributo di Victor Stinner in gh-94199.)Rimuovere la funzione
ssl.match_hostname()
. È stata deprecata in Python 3.7. OpenSSL esegue il confronto degli hostname dalla versione 3.7 di Python, Python non utilizza più la funzionessl.match_hostname()
. (Contributo di Victor Stinner in gh-94199.)Rimuovere la funzione
ssl.wrap_socket()
, deprecata in Python 3.7: creare invece un oggettossl.SSLContext
e chiamare il suo metodossl.SSLContext.wrap_socket
. Qualsiasi pacchetto che utilizza ancorassl.wrap_socket()
è rotto e non sicuro. La funzione non invia né un’estensione TLS SNI né valida l’hostname del server. Il codice è soggetto a CWE 295 (Validazione Impropria del Certificato). (Contributo di Victor Stinner in gh-94199.)
unittest¶
Rimuovere molte funzionalità di
unittest
deprecate da lungo tempo:Un certo numero di alias di metodo di
TestCase
:Alias deprecato
Nome del Metodo
Deprecato in
failUnless
3.1
failIf
3.1
failUnlessEqual
3.1
failIfEqual
3.1
failUnlessAlmostEqual
3.1
failIfAlmostEqual
3.1
failUnlessRaises
3.1
assert_
3.2
assertEquals
3.2
assertNotEquals
3.2
assertAlmostEquals
3.2
assertNotAlmostEquals
3.2
assertRegexpMatches
3.2
assertRaisesRegexp
3.2
assertNotRegexpMatches
3.5
Puoi usare https://github.com/isidentical/teyit per modernizzare automaticamente i tuoi test unitari.
Metodo
TestCase
assertDictContainsSubset
non documentato e malfunzionante (deprecato in Python 3.2).Parametro non documentato
TestLoader.loadTestsFromModule
use_load_tests (deprecato e ignorato da Python 3.5).Un alias della classe
TextTestResult
:_TextTestResult
(deprecato in Python 3.2).
(Contribuito da Serhiy Storchaka in gh-89325.)
webbrowser¶
Rimuovi il supporto per i browser obsoleti da
webbrowser
. I browser rimossi includono: Grail, Mosaic, Netscape, Galeon, Skipstone, Iceape, Firebird e le versioni di Firefox fino alla 35 (gh-102871).
xml.etree.ElementTree¶
Rimuovi il metodo
ElementTree.Element.copy()
dell’implementazione pura in Python, deprecato in Python 3.10, usa invece la funzionecopy.copy()
. L’implementazione in C dixml.etree.ElementTree
non ha metodocopy()
, ma solo un metodo__copy__()
. (Contribuito da Victor Stinner in gh-94383.)
zipimport¶
Altri¶
Rimuovi la regola
suspicious
dalMakefile
della documentazione e daDoc/tools/rstlint.py
, entrambe a favore di sphinx-lint. (Contribuito da Julien Palard in gh-98179.)Rimuovi i parametri keyfile e certfile dai moduli
ftplib
,imaplib
,poplib
esmtplib
, e i parametri key_file, cert_file e check_hostname dal modulohttp.client
, tutti deprecati da Python 3.6. Usa invece il parametro context (ssl_context inimaplib
). (Contribuito da Victor Stinner in gh-94172.)Rimuovi hack di compatibilità con
Jython
da diversi moduli e test della stdlib. (Contribuito da Nikita Sobolev in gh-99482.)Rimuovi il flag
_use_broken_old_ctypes_structure_semantics_
dal moduloctypes
. (Contribuito da Nikita Sobolev in gh-99285.)
Porting a Python 3.12¶
Questa sezione elenca i cambiamenti precedentemente descritti e altre correzioni di bug che potrebbero richiedere modifiche al tuo codice.
Modifiche nell’API di Python¶
Ora si applicano regole più severe per i riferimenti di gruppo numerici e i nomi di gruppo nelle espressioni regolari. Sono accettati solo riferimenti numerici che sono una sequenza di cifre ASCII. Il nome del gruppo nei pattern in bytes e nelle stringhe di sostituzione ora può contenere solo lettere e cifre ASCII e il carattere di sottolineatura. (Contribuito da Serhiy Storchaka in gh-91760.)
Rimosso il funzionamento di
randrange()
deprecato da Python 3.10. In precedenza,randrange(10.0)
veniva convertito senza perdita arandrange(10)
. Ora solleva un’eccezioneTypeError
. Inoltre, l’eccezione sollevata per valori non interi comerandrange(10.5)
orandrange('10')
è cambiata daValueError
aTypeError
. Questo impedisce anche bug doverandrange(1e25)
selezionava silenziosamente da un intervallo più ampio rispetto arandrange(10**25)
. (Originariamente suggerito da Serhiy Storchaka gh-86388.)argparse.ArgumentParser
ha cambiato la codifica e il gestore di errori per la lettura degli argomenti dai file (ad esempio l’opzionefromfile_prefix_chars
) dalla codifica di testo predefinita (ad esempiolocale.getpreferredencoding(False)
) a filesystem encoding and error handler. I file degli argomenti dovrebbero essere codificati in UTF-8 invece che in ANSI Codepage su Windows.Rimosso il modulo
smtpd
basato suasyncore
deprecato in Python 3.4.7 e 3.5.4. Una sostituzione raccomandata è il modulo PyPIasyncio
-based aiosmtpd.shlex.split()
: PassareNone
per l’argomento s ora solleva un’eccezione, invece di leggere dasys.stdin
. La funzionalità è stata deprecata in Python 3.9. (Contribuito da Victor Stinner in gh-94352.)Il modulo
os
non accetta più percorsi di tipo bytes, comebytearray
ememoryview
: solo il tipo esattobytes
è accettato per stringhe di tipo bytes. (Contribuito da Victor Stinner in gh-98393.)syslog.openlog()
esyslog.closelog()
ora falliscono se utilizzati nei subinterpreti.syslog.syslog()
può ancora essere usato nei subinterpreti, ma solo sesyslog.openlog()
è stato già chiamato nel main interpreter. Queste nuove restrizioni non si applicano al main interpreter, quindi solo un insieme molto ristretto di utenti potrebbe essere interessato. Questa modifica aiuta con l’isolamento degli interpreti. Inoltre,syslog
è un wrapper attorno a risorse globali del processo, che sono meglio gestite dal main interpreter. (Contribuito da Donghee Na in gh-99127.)Il comportamento di blocco non documentato di
cached_property()
è stato rimosso, perché bloccava tutte le istanze della classe, portando a una forte contention dei lock. Questo significa che ora una funzione getter della proprietà in cache potrebbe essere eseguita più di una volta per una singola istanza, se due thread sono in competizione. Per la maggior parte delle proprietà in cache semplici (ad esempio quelle che sono idempotenti e calcolano semplicemente un valore basato su altri attributi dell’istanza) questo sarà accettabile. Se è necessaria la sincronizzazione, implementare il locking all’interno della funzione getter della proprietà in cache o intorno ai punti di accesso multi-thread.sys._current_exceptions()
ora restituisce una mappa da thread-id a un’istanza di eccezione, anziché a una tupla(typ, exc, tb)
. (Contribuito da Irit Katriel in gh-103176.)Quando si estraggono file tar usando
tarfile
oshutil.unpack_archive()
, passare l’argomento filter per limitare le funzionalità che possono essere sorprendenti o pericolose. Vedere Extraction filters per i dettagli.L’output delle funzioni
tokenize.tokenize()
etokenize.generate_tokens()
è ora cambiato a causa delle modifiche introdotte in PEP 701. Questo significa che i tokenSTRING
non sono più emessi per le f-string e i token descritti in PEP 701 sono ora prodotti al loro posto:FSTRING_START
,FSTRING_MIDDLE
eFSTRING_END
sono ora emessi per le parti «string» delle f-string in aggiunta ai token appropriati per la tokenizzazione nei componenti di espressione. Ad esempio, per la f-stringf"start {1+1} end"
la vecchia versione del tokenizer emetteva:1,0-1,18: STRING 'f"start {1+1} end"'
mentre la nuova versione emette:
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 '"'
Inoltre, potrebbero esserci alcuni cambiamenti comportamentali minori come conseguenza delle modifiche necessarie per supportare PEP 701. Alcuni di questi cambiamenti includono:
L’attributo
type
dei token emessi quando si tokenizzano alcuni caratteri Python non validi come!
è cambiato daERRORTOKEN
aOP
.Le stringhe a riga singola incomplete ora sollevano
tokenize.TokenError
come fanno le stringhe multilinea incomplete.Alcuni codici Python incompleti o non validi ora sollevano
tokenize.TokenError
invece di restituire tokenERRORTOKEN
arbitrari durante la tokenizzazione.La miscelazione di tabulazioni e spazi come indentazione nello stesso file non è più supportata e genererà un’eccezione
TabError
.
Il modulo
threading
ora si aspetta che il modulo_thread
abbia un attributo_is_main_interpreter
. È una funzione senza argomenti che restituisceTrue
se l’interprete corrente è il main interpreter.Qualsiasi libreria o applicazione che fornisce un modulo
_thread
personalizzato dovrebbe fornire_is_main_interpreter()
. (Vedere gh-112826.)
Modifiche alla Build¶
Python non utilizza più
setup.py
per costruire moduli di estensione C condivisi. I parametri di build come intestazioni e librerie sono rilevati nello scriptconfigure
. Le estensioni sono costruite daMakefile
. La maggior parte delle estensioni utilizzapkg-config
e ricorre al rilevamento manuale. (Contribuito da Christian Heimes in gh-93939.)va_start()
con due parametri, comeva_start(args, format),
è ora richiesto per costruire Python.va_start()
non viene più chiamato con un solo parametro. (Contribuito da Kumar Aditya in gh-93207.)CPython ora utilizza l’opzione ThinLTO come politica predefinita di ottimizzazione del tempo di link se il compilatore Clang accetta il flag. (Contribuito da Donghee Na in gh-89536.)
Aggiunta la variabile
COMPILEALL_OPTS
inMakefile
per sovrascrivere le opzioni dicompileall
(predefinito:-j0
) inmake install
. Inoltre, combinati i 3 comandicompileall
in un unico comando per costruire i file .pyc per tutti i livelli di ottimizzazione (0, 1, 2) in una volta. (Contribuito da Victor Stinner in gh-99289.)Aggiunti triplette di piattaforma per LoongArch a 64 bit:
loongarch64-linux-gnusf
loongarch64-linux-gnuf32
loongarch64-linux-gnu
(Contribuito da Zhang Na in gh-90656.)
PYTHON_FOR_REGEN
ora richiede Python 3.10 o versioni successive.Autoconf 2.71 e aclocal 1.16.4 sono ora richiesti per rigenerare
!configure
. (Contribuito da Christian Heimes in gh-89886.)Le build di Windows e gli installer per macOS da python.org ora utilizzano OpenSSL 3.0.
Modifiche all’API C¶
Nuove Funzionalità¶
PEP 697: Introdotta la Unstable C API tier, destinata a strumenti di basso livello come debugger e compilatori JIT. Questa API può cambiare in ogni rilascio minore di CPython senza avvisi di deprecazione. I suoi contenuti sono contrassegnati dal prefisso
PyUnstable_
nei nomi.Costruttori di oggetti Code:
PyUnstable_Code_New()
(rinominato daPyCode_New
)PyUnstable_Code_NewWithPosOnlyArgs()
(rinominato daPyCode_NewWithPosOnlyArgs
)
Archiviazione extra per oggetti code (PEP 523):
PyUnstable_Eval_RequestCodeExtraIndex()
(rinominato da_PyEval_RequestCodeExtraIndex
)PyUnstable_Code_GetExtra()
(rinominato da_PyCode_GetExtra
)PyUnstable_Code_SetExtra()
(rinominato da_PyCode_SetExtra
)
I nomi originali continueranno a essere disponibili fino alla rispettiva modifica dell’API.
(Contribuito da Petr Viktorin in gh-101101.)
PEP 697: Aggiunta un’API per estendere i tipi la cui struttura di memoria delle istanze è opaca:
PyType_Spec.basicsize
può essere zero o negativo per specificare l’ereditarietà o l’estensione della dimensione della classe base.PyObject_GetTypeData()
ePyType_GetTypeDataSize()
aggiunti per consentire l’accesso ai dati di istanza specifici della sottoclasse.Py_TPFLAGS_ITEMS_AT_END
ePyObject_GetItemData()
aggiunti per consentire l’estensione sicura di determinati tipi a dimensione variabile, inclusoPyType_Type
.Py_RELATIVE_OFFSET
aggiunto per consentire la definizione dimembri
in termini di una struttura specifica della sottoclasse.
(Contribuito da Petr Viktorin in gh-103509.)
Aggiunta la nuova funzione della limited C API
PyType_FromMetaclass()
, che generalizza l’esistentePyType_FromModuleAndSpec()
utilizzando un argomento metaclasse aggiuntivo. (Contribuito da Wenzel Jakob in gh-93012.)È stata aggiunta un’API per creare oggetti che possono essere chiamati utilizzando il protocollo vectorcall alla Limited API:
Il flag
Py_TPFLAGS_HAVE_VECTORCALL
viene ora rimosso da una classe quando il metodo della classe__call__()
viene riassegnato. Questo rende sicuro l’uso di vectorcall con tipi mutabili (cioè tipi di heap senza il flag immutabile,Py_TPFLAGS_IMMUTABLETYPE
). I tipi mutabili che non sovrascrivonotp_call
ora ereditano il flagPy_TPFLAGS_HAVE_VECTORCALL
. (Contributo di Petr Viktorin in gh-93274.)The
Py_TPFLAGS_MANAGED_DICT
andPy_TPFLAGS_MANAGED_WEAKREF
flags have been added. This allows extensions classes to support object__dict__
and weakrefs with less bookkeeping, using less memory and with faster access.È stata aggiunta all” Limited API l’API per eseguire chiamate utilizzando il protocollo vectorcall:
Questo significa che entrambe le estremità, in entrata e in uscita, del protocollo vectorcall sono ora disponibili nella Limited API. (Contributo di Wenzel Jakob in gh-98586.)
Aggiunte due nuove funzioni pubbliche,
PyEval_SetProfileAllThreads()
ePyEval_SetTraceAllThreads()
, che permettono di impostare funzioni di tracciamento e profilazione in tutti i thread in esecuzione oltre a quello chiamante. (Contributo di Pablo Galindo in gh-93503.)Aggiunta la nuova funzione
PyFunction_SetVectorcall()
alla C API che imposta il campo vectorcall di un datoPyFunctionObject
. (Contributo di Andrew Frost in gh-92257.)La C API ora consente di registrare callback tramite
PyDict_AddWatcher()
,PyDict_Watch()
e API correlate che vengono chiamate ogni volta che un dizionario viene modificato. Questo è inteso per l’uso da parte di interpreti ottimizzanti, compilatori JIT o debugger. (Contributo di Carl Meyer in gh-91052.)Aggiunte le API
PyType_AddWatcher()
ePyType_Watch()
per registrare callback che ricevono notifiche sulle modifiche a un tipo. (Contributo di Carl Meyer in gh-91051.)Aggiunte le API
PyCode_AddWatcher()
ePyCode_ClearWatcher()
per registrare callback che ricevono notifiche sulla creazione e distruzione di oggetti di codice. (Contributo di Itamar Oren in gh-91054.)Aggiunte le funzioni
PyFrame_GetVar()
ePyFrame_GetVarString()
per ottenere una variabile di frame per nome. (Contributo di Victor Stinner in gh-91248.)Aggiunte
PyErr_GetRaisedException()
ePyErr_SetRaisedException()
per salvare e ripristinare l’eccezione corrente. Queste funzioni restituiscono e accettano un singolo oggetto eccezione, anziché i tre argomenti della ormai deprecataPyErr_Fetch()
ePyErr_Restore()
. Questo è meno soggetto a errori e un po” più efficiente. (Contributo di Mark Shannon in gh-101578.)Aggiunto
_PyErr_ChainExceptions1
, che accetta un’istanza di eccezione, per sostituire l’API legacy_PyErr_ChainExceptions
, che ora è deprecata. (Contributo di Mark Shannon in gh-101578.)Aggiunte
PyException_GetArgs()
ePyException_SetArgs()
come funzioni di comodo per recuperare e modificare gliargs
passati al costruttore dell’eccezione. (Contributo di Mark Shannon in gh-101578.)Aggiunta
PyErr_DisplayException()
, che accetta un’istanza di eccezione, per sostituire l’API legacyPyErr_Display()
. (Contributo di Irit Katriel in gh-102755).
PEP 683: Introdurre Immortal Objects, che consente agli oggetti di bypassare i conti di riferimento, e modifiche correlate alla C-API:
_Py_IMMORTAL_REFCNT
: Il conteggio dei riferimenti che definisce un oggettocome immortale.
_Py_IsImmortal
Controlla se un oggetto ha il conteggio dei riferimenti immortali.PyObject_HEAD_INIT
Ora inizializzerà il conteggio dei riferimenti aSSTATE_INTERNED_IMMORTAL
Un identificatore per oggetti Unicode internati
SSTATE_INTERNED_IMMORTAL
An identifier for interned unicode objectsche sono immortali.
SSTATE_INTERNED_IMMORTAL_STATIC
Un identificatore per oggetti Unicode internatisys.getunicodeinternedsize
Restituisce il numero totale di oggetti Unicode
sys.getunicodeinternedsize
This returns the total number of unicodeche sono stati internati. Questo è ora necessario per
refleak.py
per monitorare correttamente i conti di riferimenti e i blocchi allocati.
(Contributo di Eddie Elizondo in gh-84436.)
PEP 684: Aggiunta la nuova funzione
Py_NewInterpreterFromConfig()
ePyInterpreterConfig
, che possono essere utilizzate per creare sotto-interpreti con i propri GIL. (Vedi PEP 684: Un GIL per interprete per maggiori informazioni.) (Contributo di Eric Snow in gh-104110.)Nella versione 3.12 della limited C API, le funzioni
Py_INCREF()
ePy_DECREF()
sono ora implementate come chiamate di funzione opache per nascondere i dettagli dell’implementazione. (Contributo di Victor Stinner in gh-105387.)
Porting a Python 3.12¶
Le API Unicode legacy basate sulla rappresentazione
Py_UNICODE*
sono state rimosse. Si prega di migrare alle API basate su UTF-8 owchar_t*
.Le funzioni di analisi degli argomenti come
PyArg_ParseTuple()
non supportano più i formati basati suPy_UNICODE*
(ad esempiou
,Z
). Si prega di migrare ad altri formati per Unicode comes
,z
,es
eU
.tp_weaklist
per tutti i tipi built-in statici è sempreNULL
. Questo è un campo solo interno suPyTypeObject
, ma segnaliamo la modifica nel caso qualcuno lo stia accedendo direttamente. Per evitare interruzioni, si consiglia di utilizzare invece la C-API pubblica esistente o, se necessario, la macro (solo interna)_PyObject_GET_WEAKREFS_LISTPTR()
.Questo campo solo interno
PyTypeObject.tp_subclasses
potrebbe ora non essere un puntatore a oggetto valido. Il suo tipo è stato cambiato in void* per riflettere questo. Menzioniamo questa modifica nel caso qualcuno stia accedendo direttamente al campo solo interno.To get a list of subclasses, call the Python method
__subclasses__()
(usingPyObject_CallMethod()
, for example).Aggiunto supporto per più opzioni di formattazione (allineamento a sinistra, ottali, esadecimali maiuscoli,
intmax_t
,ptrdiff_t
, stringhe Cwchar_t
, larghezza e precisione variabili) inPyUnicode_FromFormat()
ePyUnicode_FromFormatV()
. (Contributo di Serhiy Storchaka in gh-98836.)Un carattere di formato non riconosciuto in
PyUnicode_FromFormat()
ePyUnicode_FromFormatV()
ora imposta unaSystemError
. Nelle versioni precedenti, causava la copia invariata del resto della stringa di formato nella stringa di risultato e scartava eventuali argomenti extra. (Contributo di Serhiy Storchaka in gh-95781.)Corretta la posizione errata del segno in
PyUnicode_FromFormat()
ePyUnicode_FromFormatV()
. (Contributo di Philip Georgi in gh-95504.)Extension classes wanting to add a
__dict__
or weak reference slot should usePy_TPFLAGS_MANAGED_DICT
andPy_TPFLAGS_MANAGED_WEAKREF
instead oftp_dictoffset
andtp_weaklistoffset
, respectively. The use oftp_dictoffset
andtp_weaklistoffset
is still supported, but does not fully support multiple inheritance (gh-95589), and performance may be worse. Classes declaringPy_TPFLAGS_MANAGED_DICT
must call_PyObject_VisitManagedDict()
and_PyObject_ClearManagedDict()
to traverse and clear their instance’s dictionaries. To clear weakrefs, callPyObject_ClearWeakRefs()
, as before.La funzione
PyUnicode_FSDecoder()
non accetta più percorsi simili a byte, comebytearray
e tipimemoryview
: solo il tipo esattobytes
è accettato per le stringhe di byte. (Contributo di Victor Stinner in gh-98393.)Le macro
Py_CLEAR
,Py_SETREF
ePy_XSETREF
ora valutano i loro argomenti solo una volta. Se un argomento ha effetti collaterali, questi effetti collaterali non vengono più duplicati. (Contributo di Victor Stinner in gh-98724.)L’indicatore di errore dell’interprete è ora sempre normalizzato. Questo significa che
PyErr_SetObject()
,PyErr_SetString()
e le altre funzioni che impostano l’indicatore di errore ora normalizzano l’eccezione prima di memorizzarla. (Contributo di Mark Shannon in gh-101578.)_Py_RefTotal
non è più autorevole e viene mantenuto solo per la compatibilità ABI. Nota che è una globale interna e disponibile solo build di debug. Se stai usando questa variabile, dovrai iniziare a usare_Py_GetGlobalRefTotal()
.Le seguenti funzioni ora selezionano una metaclasse appropriata per il tipo appena creato:
Creare classi la cui metaclasse sovrascrive
tp_new
è deprecato e in Python 3.14+ sarà disabilitato. Nota che queste funzioni ignoranotp_new
della metaclasse, possibilmente permettendo un’inizializzazione incompleta.Nota che
PyType_FromMetaclass()
(aggiunto in Python 3.12) già impedisce la creazione di classi la cui metaclasse sovrascrivetp_new
(__new__()
in Python).Poiché
tp_new
sovrascrive quasi tutto ciò che fanno le funzioniPyType_From*
, i due sono incompatibili tra loro. Il comportamento esistente — ignorare la metaclasse per diversi passaggi della creazione del tipo — è generalmente insicuro, poiché (meta)classi assumono chetp_new
sia stato chiamato. Non esiste una soluzione generale semplice. Una delle seguenti opzioni potrebbe funzionare per te:Se controlli la metaclasse, evita di usare
tp_new
in essa:Se l’inizializzazione può essere saltata, può essere fatta al contrario in
tp_init
.Se la metaclasse non ha bisogno di essere istanziata da Python, imposta il suo
tp_new
suNULL
utilizzando il flagPy_TPFLAGS_DISALLOW_INSTANTIATION
. Ciò la rende accettabile per le funzioniPyType_From*
.
Evita le funzioni
PyType_From*
: se non ti servono funzionalità specifiche di C (slot o impostazione della dimensione dell’istanza), crea tipi tramite la chiamata della metaclasse.Se sai che
tp_new
può essere saltato in sicurezza, filtra l’avviso di deprecazione usandowarnings.catch_warnings()
da Python.
PyOS_InputHook
ePyOS_ReadlineFunctionPointer
non vengono più chiamati in subinterpreters. Questo perché i client generalmente si affidano allo stato globale del processo (poiché questi callback non hanno modo di recuperare lo stato del modulo di estensione).Questo evita anche situazioni in cui le estensioni potrebbero trovarsi in esecuzione in un subinterprete che non supportano (o non sono ancora state caricate in). Vedi gh-104668 per ulteriori informazioni.
PyLongObject
ha avuto i suoi interni cambiati per migliorare le prestazioni. Sebbene gli interni diPyLongObject
siano privati, vengono utilizzati da alcuni moduli di estensione. I campi interni non devono più essere acceduti direttamente, ma devono essere utilizzate le funzioni API che iniziano conPyLong_...
. Vengono fornite due nuove funzioni API instabili per un accesso efficiente al valore deiPyLongObject
s che rientrano in una sola parola macchina:Gli allocatori personalizzati, impostati tramite
PyMem_SetAllocator()
, sono ora richiesti per essere thread-safe, indipendentemente dal dominio di memoria. Gli allocatori che non hanno uno stato proprio, compresi i «ganci», non sono interessati. Se il tuo allocatore personalizzato non è già thread-safe e hai bisogno di assistenza, crea un nuovo problema su GitHub e CC@ericsnowcurrently
.
Deprecato¶
In conformità con PEP 699, il campo
ma_version_tag
inPyDictObject
è deprecato per i moduli di estensione. L’accesso a questo campo genererà un avviso del compilatore al momento della compilazione. Questo campo sarà rimosso in Python 3.14. (Contribuito da Ramvikrams e Kumar Aditya in gh-101193. PEP di Ken Jin.)Deprecare la variabile di configurazione globale:
Py_HashRandomizationFlag
: usaPyConfig.use_hash_seed
ePyConfig.hash_seed
Py_LegacyWindowsFSEncodingFlag
: usaPyPreConfig.legacy_windows_fs_encoding
Py_LegacyWindowsStdioFlag
: usaPyConfig.legacy_windows_stdio
Py_FileSystemDefaultEncoding
: usaPyConfig.filesystem_encoding
Py_HasFileSystemDefaultEncoding
: usaPyConfig.filesystem_encoding
Py_FileSystemDefaultEncodeErrors
: usaPyConfig.filesystem_errors
Py_UTF8Mode
: usaPyPreConfig.utf8_mode
(vediPy_PreInitialize()
)
L’API
Py_InitializeFromConfig()
dovrebbe essere usata conPyConfig
invece. (Contribuito da Victor Stinner in gh-77782.)Creare
tipi immutabili
con basi mutabili è deprecato e verrà disabilitato in Python 3.14. (gh-95388)L’intestazione
structmember.h
è deprecata, sebbene continui a essere disponibile e non ci siano piani per rimuoverla.I suoi contenuti sono ora disponibili semplicemente includendo
Python.h
, con un prefissoPy
aggiunto se mancava:Macro di tipo come
Py_T_INT
,Py_T_DOUBLE
, ecc. (precedentementeT_INT
,T_DOUBLE
, ecc.)Le bandiere
Py_READONLY
(precedentementeREADONLY
) ePy_AUDIT_READ
(precedentemente tutte maiuscole)
Diversi elementi non sono esposti da
Python.h
:T_OBJECT
(usaPy_T_OBJECT_EX
)T_NONE
(precedentemente non documentato, e piuttosto strano)La macro
WRITE_RESTRICTED
che non fa nulla.Le macro
RESTRICTED
eREAD_RESTRICTED
, equivalenti diPy_AUDIT_READ
.In alcune configurazioni,
<stddef.h>
non è incluso daPython.h
. Va incluso manualmente quando si utilizzaoffsetof()
.
L’header deprecato continua a fornire i suoi contenuti originali sotto i nomi originali. Il tuo vecchio codice può rimanere invariato, a meno che l’inclusione extra e le macro non spaziati ti diano molto fastidio.
(Contribuito in gh-47146 da Petr Viktorin, basato su lavori precedenti di Alexander Belopolsky e Matthias Braun.)
PyErr_Fetch()
ePyErr_Restore()
sono deprecate. UsaPyErr_GetRaisedException()
ePyErr_SetRaisedException()
invece. (Contribuito da Mark Shannon in gh-101578.)PyErr_Display()
è deprecata. UsaPyErr_DisplayException()
invece. (Contribuito da Irit Katriel in gh-102755)._PyErr_ChainExceptions
è deprecata. Usa_PyErr_ChainExceptions1
invece. (Contribuito da Irit Katriel in gh-102192.)Usare
PyType_FromSpec()
,PyType_FromSpecWithBases()
oPyType_FromModuleAndSpec()
per creare una classe la cui metaclasse sovrascrivetp_new
è deprecato. Chiama direttamente la metaclasse invece.
Rimozione prevista in Python 3.14¶
Il campo
ma_version_tag
inPyDictObject
per moduli di estensione (PEP 699; gh-101193).Creare
tipi immutabili
con basi mutabili (gh-95388).Functions to configure Python’s initialization, deprecated in Python 3.11:
PySys_SetArgvEx()
: SetPyConfig.argv
instead.PySys_SetArgv()
: SetPyConfig.argv
instead.Py_SetProgramName()
: SetPyConfig.program_name
instead.Py_SetPythonHome()
: SetPyConfig.home
instead.
L’API
Py_InitializeFromConfig()
dovrebbe essere usata conPyConfig
.Variabili di configurazione globali:
Py_DebugFlag
: UsePyConfig.parser_debug
instead.Py_VerboseFlag
: UsePyConfig.verbose
instead.Py_QuietFlag
: UsePyConfig.quiet
instead.Py_InteractiveFlag
: UsePyConfig.interactive
instead.Py_InspectFlag
: UsePyConfig.inspect
instead.Py_OptimizeFlag
: UsePyConfig.optimization_level
instead.Py_NoSiteFlag
: UsePyConfig.site_import
instead.Py_BytesWarningFlag
: UsePyConfig.bytes_warning
instead.Py_FrozenFlag
: UsePyConfig.pathconfig_warnings
instead.Py_IgnoreEnvironmentFlag
: UsePyConfig.use_environment
instead.Py_DontWriteBytecodeFlag
: UsePyConfig.write_bytecode
instead.Py_NoUserSiteDirectory
: UsePyConfig.user_site_directory
instead.Py_UnbufferedStdioFlag
: UsePyConfig.buffered_stdio
instead.Py_HashRandomizationFlag
: UsePyConfig.use_hash_seed
andPyConfig.hash_seed
instead.Py_IsolatedFlag
: UsePyConfig.isolated
instead.Py_LegacyWindowsFSEncodingFlag
: UsePyPreConfig.legacy_windows_fs_encoding
instead.Py_LegacyWindowsStdioFlag
: UsePyConfig.legacy_windows_stdio
instead.Py_FileSystemDefaultEncoding
: UsePyConfig.filesystem_encoding
instead.Py_HasFileSystemDefaultEncoding
: UsePyConfig.filesystem_encoding
instead.Py_FileSystemDefaultEncodeErrors
: UsePyConfig.filesystem_errors
instead.Py_UTF8Mode
: UsePyPreConfig.utf8_mode
instead. (seePy_PreInitialize()
)
L’API
Py_InitializeFromConfig()
dovrebbe essere usata conPyConfig
.
Rimozione in sospeso in Python 3.15¶
The bundled copy of
libmpdecimal
.The
PyImport_ImportModuleNoBlock()
: UsePyImport_ImportModule()
instead.PyWeakref_GetObject()
andPyWeakref_GET_OBJECT()
: UsePyWeakref_GetRef()
instead.Py_UNICODE
type and thePy_UNICODE_WIDE
macro: Usewchar_t
instead.Funzioni di inizializzazione di Python:
PySys_ResetWarnOptions()
: Clearsys.warnoptions
andwarnings.filters
instead.Py_GetExecPrefix()
: Getsys.base_exec_prefix
andsys.exec_prefix
instead.Py_GetPath()
: Getsys.path
instead.Py_GetPrefix()
: Getsys.base_prefix
andsys.prefix
instead.Py_GetProgramFullPath()
: Getsys.executable
instead.Py_GetProgramName()
: Getsys.executable
instead.Py_GetPythonHome()
: GetPyConfig.home
or thePYTHONHOME
environment variable instead.
Rimozione in sospeso nelle versioni future¶
Le seguenti API sono deprecate e verranno rimosse, anche se attualmente non è prevista una data di rimozione.
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_AsDecodedObject()
: UsePyCodec_Decode()
instead.PyUnicode_AsDecodedUnicode()
: UsePyCodec_Decode()
instead.PyUnicode_AsEncodedObject()
: UsePyCodec_Encode()
instead.PyUnicode_AsEncodedUnicode()
: UsePyCodec_Encode()
instead.PyUnicode_READY()
: Unneeded since Python 3.12PyErr_Display()
: UsePyErr_DisplayException()
instead._PyErr_ChainExceptions()
: Use_PyErr_ChainExceptions1()
instead.PyBytesObject.ob_shash
member: callPyObject_Hash()
instead.PyDictObject.ma_version_tag
member.API del Thread Local Storage (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.
Rimosso¶
Rimuovi il file di intestazione
token.h
. Non c’è mai stata un’API pubblica per il tokenizer C. Il file di intestazionetoken.h
è stato progettato solo per essere usato dagli interni di Python. (Contribuito da Victor Stinner in gh-92651.)Le API Unicode legacy sono state rimosse. Vedi PEP 623 per i dettagli.
PyUnicode_WCHAR_KIND
PyUnicode_AS_UNICODE()
PyUnicode_AsUnicode()
PyUnicode_AsUnicodeAndSize()
PyUnicode_AS_DATA()
PyUnicode_FromUnicode()
PyUnicode_GET_SIZE()
PyUnicode_GetSize()
PyUnicode_GET_DATA_SIZE()
Remove the
PyUnicode_InternImmortal()
function macro. (Contributed by Victor Stinner in gh-85858.)