Vad är nytt i Python 3.12¶
- Redigerare:
Adam Turner
I den här artikeln förklaras de nya funktionerna i Python 3.12 jämfört med 3.11. Python 3.12 släpptes den 2 oktober 2023. För fullständig information, se changelog.
Se även
PEP 693 – Python 3.12 Utgivningsschema
Sammanfattning – Release highlights¶
Python 3.12 är en stabil version av programmeringsspråket Python, med en blandning av ändringar i språket och standardbiblioteket. Biblioteksändringarna fokuserar på att rensa upp föråldrade API: er, användbarhet och korrekthet. Noterbart är att paketet distutils
har tagits bort från standardbiblioteket. Filsystemstödet i os
och pathlib
har genomgått ett antal förbättringar och flera moduler har fått bättre prestanda.
Språkändringarna fokuserar på användbarhet, eftersom f-strings har fått många begränsningar borttagna och ”Menade du …”-förslag fortsätter att förbättras. Den nya type parameter syntax och type
statement förbättrar ergonomin för användning av generic types och type aliases med statiska typkontrollanter.
Den här artikeln försöker inte ge en fullständig specifikation av alla nya funktioner, utan ger istället en praktisk översikt. För fullständig information bör du läsa dokumentationen, t.ex. Library Reference och Language Reference. Om du vill förstå den fullständiga implementeringen och designmotiveringen för en ändring kan du läsa PEP:n för en viss ny funktion, men observera att PEP:er vanligtvis inte uppdateras när en funktion har implementerats fullt ut.
Nya syntaxfunktioner:
Nya grammatiska funktioner:
Förbättringar av tolkar:
PEP 669, övervakning med låg påverkan
Förbättrade ”Menade du …”-förslag för undantagen
NameError
,ImportError
ochSyntaxError
Förbättringar av Python-datamodellen:
PEP 688, använder buffer protocol från Python
Betydande förbättringar i standardbiblioteket:
Klassen
pathlib.Path
har nu stöd för underklassningModulen
os
har fått flera förbättringar för Windows-stödEtt kommandoradsgränssnitt har lagts till i
sqlite3
-modulenisinstance()
kontrollerar motruntime-checkable protocols
med en hastighet på mellan två och 20 gångerPaketet
asyncio
har fått ett antal prestandaförbättringar, och vissa benchmarks visar en 75% speed up.En kommandoradsgränssnitt har lagts till i
uuid
-modulenPå grund av ändringarna i PEP 701 är det möjligt att producera tokens via modulen
tokenize
upp till 64% faster.
Förbättringar av säkerheten:
Ersätt de inbyggda
hashlib
-implementeringarna av SHA1, SHA3, SHA2-384, SHA2-512 och MD5 med formellt verifierad kod från projektet HACL*. Dessa inbyggda implementeringar finns kvar som fallbacks som endast används när OpenSSL inte tillhandahåller dem.
Förbättringar av C API:
Förbättringar av CPython-implementeringen:
PEP 709, förståelse inlining
CPython-stöd för Linux-profileraren
perf
Implementera stack overflow-skydd på plattformar som stöds
Nya funktioner för skrivning:
PEP 698,
typing.override()
dekorator
Viktiga avskrivningar, borttagningar eller begränsningar:
PEP 623: Ta bort
wstr
från Unicode-objekt i Pythons C API, vilket minskar storleken på varjestr
-objekt med minst 8 byte.PEP 632: Ta bort paketet
distutils
. Se migreringsguiden för råd om att ersätta de API:er som paketet tillhandahöll. Tredjepartspaketet Setuptools fortsätter att tillhandahålladistutils
, om du fortfarande behöver det i Python 3.12 och senare.gh-95299: Förinstallera inte
setuptools
i virtuella miljöer skapade medvenv
. Detta innebär attdistutils
,setuptools
,pkg_resources
ocheasy_install
inte längre kommer att vara tillgängliga som standard; för att få tillgång till dessa körpip install setuptools
i den virtuella miljön activated.Modulerna
asynchat
,asyncore
, ochimp
har tagits bort, tillsammans med fleraunittest.TestCase
method aliases.
Nya funktioner¶
PEP 695: Typ Parameter Syntax¶
Generiska klasser och funktioner under PEP 484 deklarerades med en mångordig syntax som lämnade omfattningen av typparametrar oklar och krävde uttryckliga variansdeklarationer.
PEP 695 introducerar ett nytt, mer kompakt och explicit sätt att skapa generiska klasser och funktioner:
def max[T](args: Iterabel[T]) -> T:
...
klass lista[T]:
def __getitem__(self, index: int, /) -> T:
...
def append(self, element: T) -> None:
...
Dessutom introducerar PEP ett nytt sätt att deklarera typalias med hjälp av type
-satsen, som skapar en instans av TypeAliasType
:
typ Point = tuple[float, float]
Typaliaser kan också vara generic:
typ Punkt[T] = tupel[T, T]
Den nya syntaxen gör det möjligt att deklarera TypeVarTuple
och ParamSpec
parametrar, samt TypeVar
parametrar med gränser eller begränsningar:
type IntFunc[**P] = Kallbar[P, int] # ParamSpec
type LabeledTuple[*Ts] = tuple[str, *Ts] # TypeVarTuple
type HashableSequence[T: Hashable] = Sequence[T] # TypeVar med bindning
type IntOrStrSequence[T: (int, str)] = Sequence[T] # TypeVar med begränsningar
Värdet på typalias och bindningen och begränsningarna för typvariabler som skapats med denna syntax utvärderas endast på begäran (se lazy evaluation). Detta innebär att typalias kan referera till andra typer som definieras senare i filen.
Typparametrar som deklareras via en typparameterlista är synliga inom deklarationens scope och eventuella nästlade scopes, men inte i det yttre scopet. De kan t.ex. användas i typannoteringarna för metoderna i en generisk klass eller i klassens kropp. De kan dock inte användas i modulscopet efter att klassen har definierats. Se Typ parameterlistor för en detaljerad beskrivning av runtime-semantiken för typ-parametrar.
För att stödja denna scopingsemantik introduceras en ny typ av scope, annotation scope. Annotationsscopes beter sig för det mesta som funktionsscopes, men interagerar annorlunda med omslutande klasscopes. I Python 3.13 kommer annotations också att utvärderas i annotation scopes.
Se PEP 695 för mer information.
(PEP skriven av Eric Traut. Implementering av Jelle Zijlstra, Eric Traut, och andra i gh-103764.)
PEP 701: Syntaktisk formalisering av f-strängar¶
PEP 701 lyfter vissa restriktioner för användningen av f-strings. Uttryckskomponenter inuti f-strings kan nu vara vilket giltigt Python-uttryck som helst, inklusive strängar som återanvänder samma citat som den innehållande f-stringen, flerradiga uttryck, kommentarer, backslash och unicode-escape-sekvenser. Låt oss gå igenom dessa i detalj:
Återanvändning av citat: i Python 3.11 ger återanvändning av samma citat som den omslutande f-strängen ett
SyntaxError
, vilket tvingar användaren att antingen använda andra tillgängliga citat (som att använda dubbla citat eller trippelcitat om f-strängen använder enkla citat). I Python 3.12 kan du nu göra saker som detta:>>> 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'
Observera att det före denna ändring inte fanns någon uttrycklig gräns för hur f-strängar kan nästlas, men det faktum att strängcitat inte kan återanvändas i uttryckskomponenten i f-strängar gjorde det omöjligt att nästla f-strängar godtyckligt. Faktum är att detta är den mest nästlade f-sträng som kan skrivas:
>>> f"""{f'''{f'{f"{1+1}"}'}'''}""" '2'
Eftersom f-strängar nu kan innehålla alla giltiga Python-uttryck inuti uttryckskomponenter är det nu möjligt att nesta f-strängar godtyckligt:
>>> f"{f"{f"{f"{f"{f"{1+1}"}"}"}"}"}" '2'
Uttryck och kommentarer på flera rader: I Python 3.11 måste f-stränguttryck definieras på en enda rad, även om uttrycket i f-strängen normalt kan sträcka sig över flera rader (som bokstavslistor som definieras över flera rader), vilket gör dem svårare att läsa. I Python 3.12 kan du nu definiera f-strängar som sträcker sig över flera rader och lägga till inline-kommentarer:
>>> 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'
Backsteg och unicode-tecken: före Python 3.12 kunde f-stränguttryck inte innehålla något
\
-tecken. Detta påverkade även unicode escape sequences (såsom\N{snowman}
) eftersom dessa innehåller delen\N
som tidigare inte kunde ingå i uttryckskomponenter i f-strängar. Nu kan du definiera uttryck som detta:>>> 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
Se PEP 701 för mer information.
Som en positiv bieffekt av hur denna funktion har implementerats (genom att analysera f-strängar med the PEG parser), är nu felmeddelanden för f-strängar mer exakta och inkluderar den exakta platsen för felet. Till exempel, i Python 3.11, ger följande f-sträng upphov till ett 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?
men felmeddelandet innehåller inte den exakta platsen för felet inom raden och har också uttrycket artificiellt omgivet av parenteser. I Python 3.12, när f-strängar analyseras med PEG-parsern, kan felmeddelanden vara mer exakta och visa hela raden:
>>> 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?
(Bidrag från Pablo Galindo, Batuhan Taskaya, Lysandros Nikolaou, Cristián Maureira-Fredes och Marta Gómez i gh-102856. PEP skriven av Pablo Galindo, Batuhan Taskaya, Lysandros Nikolaou och Marta Gómez).
PEP 684: En per-tolk GIL¶
PEP 684 introducerar en per-tolk GIL, så att undertolkare nu kan skapas med en unik GIL per tolk. Detta gör det möjligt för Python-program att dra full nytta av flera CPU-kärnor. Detta är för närvarande endast tillgängligt via C-API, men ett Python-API är förväntat till 3.13.
Använd den nya funktionen Py_NewInterpreterFromConfig()
för att skapa en tolk med en egen 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;
}
/* Den nya tolken är nu aktiv i den aktuella tråden. */
För ytterligare exempel på hur man använder C-API för undertolkar med en GIL per tolk, se Modules/_xxsubinterpretersmodule.c
.
(Bidrag från Eric Snow i gh-104210, etc.)
PEP 669: Övervakning med låg påverkan för CPython¶
PEP 669 definierar ett nytt API
för profilerare, debuggers och andra verktyg för att övervaka händelser i CPython. Det täcker ett brett spektrum av händelser, inklusive anrop, returer, rader, undantag, hopp och mer. Detta innebär att du bara betalar för det du använder, vilket ger stöd för debuggar och täckningsverktyg med nästan noll overhead. Se sys.monitoring
för mer information.
(Bidrag från Mark Shannon i gh-103082.)
PEP 688: Att göra buffertprotokollet tillgängligt i Python¶
PEP 688 introducerar ett sätt att använda buffer protocol från Python-kod. Klasser som implementerar metoden __buffer__()
är nu användbara som bufferttyper.
Den nya collections.abc.Buffer
ABC ger ett standardiserat sätt att representera buffertobjekt, t.ex. i typannoteringar. Den nya inspect.BufferFlags
enum representerar de flaggor som kan användas för att anpassa skapandet av buffertar. (Bidrag från Jelle Zijlstra i gh-102500.)
PEP 709: Förståelse för inlining¶
Dictionary-, list- och set-förståelser är nu inline, i stället för att skapa ett nytt funktionsobjekt för engångsbruk för varje körning av förståelsen. Detta snabbar upp exekveringen av en förståelse med upp till två gånger. Se PEP 709 för ytterligare detaljer.
Variabler för förståelseiteration förblir isolerade och skriver inte över en variabel med samma namn i det yttre omfånget, och de är inte heller synliga efter förståelsen. Inlining resulterar i några synliga beteendeförändringar:
Det finns inte längre någon separat ram för förståelsen i spårningar, och spårning/profilering visar inte längre förståelsen som ett funktionsanrop.
Modulen
symtable
kommer inte längre att producera underordnade symboltabeller för varje förståelse; istället kommer förståelsens lokala symboler att inkluderas i den överordnade funktionens symboltabell.Anrop av
locals()
inuti en förståelse inkluderar nu variabler från utanför förståelsen, och inkluderar inte längre den syntetiska.0
-variabeln för förståelsen ”argument”.En förståelse som itererar direkt över
locals()
(t.ex.[k for k in locals()]
) kan se ”RuntimeError: dictionary changed size during iteration” när den körs under spårning (t.ex. mätning av kodtäckning). Detta är samma beteende som redan setts i t.ex.for k in locals():
. För att undvika felet skapar du först en lista med nycklar att iterera över:keys = list(locals()); [k for k in keys]
.
(Bidrag från Carl Meyer och Vladimir Matveev i PEP 709.)
Förbättrade felmeddelanden¶
Moduler från standardbiblioteket kan nu potentiellt föreslås som en del av de felmeddelanden som tolken visar när ett
NameError
lyfts till högsta nivån. (Bidrag från Pablo Galindo i 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'?
Förbättra felförslaget för
NameError
-undantag för instanser. Nu om ettNameError
uppstår i en metod och instansen har ett attribut som är exakt lika med namnet i undantaget, kommer förslaget att inkluderaself.<NAME>
istället för den närmaste matchningen i metodomfånget. (Bidrag från Pablo Galindo i 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'?
Förbättra felmeddelandet
SyntaxError
när användaren skriverimport x from y
istället förfrom y import x
. (Bidrag från Pablo Galindo i 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?
ImportError
undantag som uppstår från misslyckadefrom <module> import <name>
satser innehåller nu förslag på värdet för<name>
baserat på de tillgängliga namnen i<module>
. (Bidrag från Pablo Galindo i 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'?
Andra språkliga förändringar¶
Parsern visar nu
SyntaxError
vid parsning av källkod som innehåller nollbytes. (Bidrag från Pablo Galindo i gh-96670.)Ett backslash-teckenpar som inte är en giltig escape-sekvens genererar nu en
SyntaxWarning
, istället förDeprecationWarning
. Till exempel,re.compile("\d+\.\d+")
avger nu enSyntaxWarning
("\d"
är en ogiltig escape-sekvens, använd råa strängar för reguljärt uttryck:re.compile(r"\d+\.\d+")
). I en framtida Python-version kommerSyntaxError
så småningom att visas istället förSyntaxWarning
. (Bidrag från Victor Stinner i gh-98401.)Oktala escapes med värde större än
0o377
(ex:"\477"
), föråldrade i Python 3.11, ger nu enSyntaxWarning
, istället förDeprecationWarning
. I en framtida Python-version kommer de så småningom att varaSyntaxError
. (Bidrag från Victor Stinner i gh-98401.)Variabler som används i måldelen av förståelser som inte lagras till kan nu användas i tilldelningsuttryck (
:=
). I exempelvis[(b := 1) for a, b.prop in some_iter]
är det nu tillåtet att tilldelab
. Observera att tilldelning till variabler som lagras i måldelen av förståelser (soma
) fortfarande är otillåten, enligt PEP 572. (Bidrag från Nikita Sobolev i gh-100581.)Undantag som uppstår i en klass eller typs
__set_name__
-metod omsluts inte längre av ettRuntimeError
. Kontextinformation läggs till undantaget som en PEP 678-anteckning. (Bidrag från Irit Katriel i gh-77757.)När en
try-except*
-konstruktion hanterar helaExceptionGroup
och ger upphov till ett annat undantag, är det undantaget inte längre inslaget i enExceptionGroup
. Ändrades även i version 3.11.4. (Bidrag från Irit Katriel i gh-103590.)Garbage Collector körs nu endast på eval breaker-mekanismen i Pythons bytecode-utvärderingsloop istället för på objektallokeringar. GC kan också köras när
PyErr_CheckSignals()
anropas så att C-tillägg som behöver köras under lång tid utan att köra någon Python-kod också har en chans att köra GC periodiskt. (Bidrag från Pablo Galindo i gh-97922.)Alla inbyggda och utökade anrop som förväntar sig booleska parametrar accepterar nu argument av alla typer istället för bara
bool
ochint
. (Bidrag från Serhiy Storchaka i gh-60203.)memoryview
har nu stöd för typen half-float (formatkoden ”e”). (Bidrag från Donghee Na och Antoine Pitrou i gh-90751.)slice
-objekt är nu hashbara, vilket gör att de kan användas som dict-nycklar och set-objekt. (Bidrag från Will Bradshaw, Furkan Onder och Raymond Hettinger i gh-101264.)sum()
använder nu Neumaier-summering för att förbättra noggrannhet och kommutativitet vid summering av flyttal eller blandade ints och flyttal. (Bidrag från Raymond Hettinger i gh-100425.)ast.parse()
visar nuSyntaxError
istället förValueError
när källkod som innehåller null bytes analyseras. (Bidrag från Pablo Galindo i gh-96670.)Extraktionsmetoderna i
tarfile
ochshutil.unpack_archive()
har ett nytt filter-argument som gör det möjligt att begränsa tar-funktioner som kan vara överraskande eller farliga, såsom att skapa filer utanför målkatalogen. Se tarfile extraction filters för mer information. I Python 3.14 kommer standardvärdet att ändras till'data'
. (Bidrag från Petr Viktorin i PEP 706.)types.MappingProxyType
-instanser är nu hashbara om den underliggande mappningen är hashbar. (Bidrag från Serhiy Storchaka i gh-87995.)Lägg till stöd för perf profiler genom den nya miljövariabeln
PYTHONPERFSUPPORT
och kommandoradsalternativet-X perf
, samt de nya funktionernasys.activate_stack_trampoline()
,sys.deactivate_stack_trampoline()
ochsys.is_stack_trampoline_active()
. (Design av Pablo Galindo. Bidrag från Pablo Galindo och Christian Heimes med bidrag från Gregory P. Smith [Google] och Mark Shannon i gh-96123)
Nya moduler¶
Ingen.
Förbättrade moduler¶
array¶
Klassen
array.array
har nu stöd för subskription, vilket gör den till en generic type. (Bidrag från Jelle Zijlstra i gh-98658.)
asyncio¶
Prestandan för att skriva till sockets i
asyncio
har förbättrats avsevärt.asyncio
undviker nu onödig kopiering när man skriver till sockets och användersendmsg()
om plattformen stöder det. (Bidrag från Kumar Aditya i gh-91166.)Lägg till funktionerna
asyncio.eager_task_factory()
ochasyncio.create_eager_task_factory()
för att göra det möjligt att välja en händelseslinga för att utföra eager-uppgifter, vilket gör vissa användningsfall 2x till 5x snabbare. (Bidrag från Jacob Bower & Itamar Oren i gh-102853, gh-104140, och gh-104138)På Linux använder
asyncio
asyncio.PidfdChildWatcher
som standard omos.pidfd_open()
är tillgänglig och fungerar istället förasyncio.ThreadedChildWatcher
. (Bidrag från Kumar Aditya i gh-98024.)Händelseslingan använder nu den bästa tillgängliga barnövervakaren för varje plattform (
asyncio.PidfdChildWatcher
om den stöds ochasyncio.ThreadedChildWatcher
annars), så det rekommenderas inte att manuellt konfigurera en barnövervakare. (Bidrag från Kumar Aditya i gh-94597.)Lägg till parametern loop_factory i
asyncio.run()
för att tillåta specificering av en anpassad fabrik för händelseslingor. (Bidrag från Kumar Aditya i gh-99388.)Lägg till C-implementering av
asyncio.current_task()
för 4x-6x högre hastighet. (Bidrag från Itamar Oren och Pranav Thulasiram Bhat i gh-100344.)asyncio.iscoroutine()
returnerar nuFalse
för generatorer eftersomasyncio
inte stöder äldre generatorbaserade coroutines. (Bidrag från Kumar Aditya i gh-102748.)asyncio.wait()
ochasyncio.as_completed()
accepterar nu generatorer som ger uppgifter. (Bidrag från Kumar Aditya i gh-78530.)
kalender¶
Lägg till enumer
calendar.Month
ochcalendar.Day
som definierar årets månader och veckans dagar. (Bidrag från Prince Roshan i gh-103636.)
csv¶
Lägg till
csv.QUOTE_NOTNULL
ochcsv.QUOTE_STRINGS
flaggor för att ge finare kontroll avNone
och tomma strängar avreader
ochwriter
objekt.
dis¶
Opkoder för pseudoinstruktioner (som används av kompilatorn men som inte visas i körbar bytecode) exponeras nu i modulen
dis
.HAVE_ARGUMENT
är fortfarande relevant för riktiga opkoder, men det är inte användbart för pseudoinstruktioner. Använd den nyadis.hasarg
-samlingen istället. (Bidrag från Irit Katriel i gh-94216.)Lägg till
dis.hasexc
-samlingen för att markera instruktioner som anger en undantagshanterare. (Bidrag från Irit Katriel i gh-94216.)
fraktioner¶
Objekt av typen
fractions.Fraction
stöder nu formatering i float-stil. (Bidrag från Mark Dickinson i gh-100161.)
importlib.resurser¶
importlib.resources.as_file()
stöder nu resurskataloger. (Bidrag från Jason R. Coombs i gh-97930.)Byt namn på första parametern i
importlib.resources.files()
till anchor. (Bidrag från Jason R. Coombs i gh-100598.)
inspektera¶
Lägg till
inspect.markcoroutinefunction()
för att markera synkfunktioner som returnerar en coroutine för användning medinspect.iscoroutinefunction()
. (Bidrag från Carlton Gibson i gh-99247.)Lägg till
inspect.getasyncgenstate()
ochinspect.getasyncgenlocals()
för att bestämma det aktuella tillståndet för asynkrona generatorer. (Bidrag från Thomas Krennwallner i gh-79940.)Prestandan för
inspect.getattr_static()
har förbättrats avsevärt. De flesta anrop till funktionen bör vara minst 2x snabbare än de var i Python 3.11. (Bidrag från Alex Waygood i gh-103193.)
itertools¶
Lägg till
itertools.batched()
för insamling i jämnstora tupler där den sista batchen kan vara kortare än resten. (Bidrag från Raymond Hettinger i gh-98363.)
matematik¶
Lägg till
math.sumprod()
för att beräkna en summa av produkter. (Bidrag från Raymond Hettinger i gh-100485.)Utöka
math.nextafter()
till att inkludera ett steps-argument för att flytta upp eller ner flera steg åt gången. (Bidrag från Matthias Goergens, Mark Dickinson och Raymond Hettinger i gh-94906.)
os¶
Lägg till
os.PIDFD_NONBLOCK
för att öppna en filbeskrivare för en process medos.pidfd_open()
i icke-blockerande läge. (Bidrag från Kumar Aditya i gh-93312.)os.DirEntry
innehåller nu enos.DirEntry.is_junction()
-metod för att kontrollera om posten är en korsning. (Bidrag från Charles Machalow i gh-99547.)Lägg till funktionerna
os.listdrives()
,os.listvolumes()
ochos.listmounts()
i Windows för att räkna upp enheter, volymer och monteringspunkter. (Bidrag från Steve Dower i gh-102519.)os.stat()
ochos.lstat()
är nu mer exakta i Windows. Fältetst_birthtime
kommer nu att fyllas med filens skapelsetid ochst_ctime
är föråldrat men innehåller fortfarande skapelsetiden (men kommer i framtiden att returnera den senaste metadataändringen, för konsistens med andra plattformar).st_dev
kan vara upp till 64 bitar ochst_ino
upp till 128 bitar beroende på ditt filsystem, ochst_rdev
sätts alltid till noll snarare än felaktiga värden. Båda funktionerna kan vara betydligt snabbare på nyare versioner av Windows. (Bidrag från Steve Dower i gh-99726.)
os.sökväg¶
Lägg till
os.path.isjunction()
för att kontrollera om en given sökväg är en korsning. (Bidrag från Charles Machalow i gh-99547.)Lägg till
os.path.splitroot()
för att dela upp en sökväg i en triad(drive, root, tail)
. (Bidrag från Barney Gale i gh-101000.)
sökväg¶
Lägg till stöd för underklassning av
pathlib.PurePath
ochpathlib.Path
, plus deras Posix- och Windows-specifika varianter. Underklasser kan åsidosätta metodenpathlib.PurePath.with_segments()
för att skicka information mellan sökvägsinstanser.Lägg till
pathlib.Path.walk()
för att gå igenom katalogträden och generera alla fil- eller katalognamn i dem, liknandeos.walk()
. (Bidrag från Stanislav Zmiev i gh-90385.)Lägg till walk_up valfri parameter till
pathlib.PurePath.relative_to()
för att tillåta infogandet av..
poster i resultatet; detta beteende är mer konsekvent medos.path.relpath()
. (Bidrag från Domenico Ragusa i gh-84538.)Lägg till
pathlib.Path.is_junction()
som en proxy tillos.path.isjunction()
. (Bidrag från Charles Machalow i gh-99547.)Lägg till case_sensitive valfri parameter till
pathlib.Path.glob()
,pathlib.Path.rglob()
ochpathlib.PurePath.match()
för att matcha sökvägens skiftlägeskänslighet, vilket möjliggör mer exakt kontroll över matchningsprocessen.
plattform¶
Lägg till stöd för att upptäcka Windows 11 och Windows Server-versioner efter 2012. Tidigare returnerade uppslagningar på Windows Server-plattformar nyare än Windows Server 2012 och på Windows 11
Windows-10
. (Bidrag från Steve Dower i gh-89545.)
pdb¶
Lägg till bekvämlighetsvariabler för att hålla värden tillfälligt för felsökningssessioner och ge snabb åtkomst till värden som den aktuella ramen eller returvärdet. (Bidrag från Tian Gao i gh-103693.)
slumpvis¶
Lägg till
random.binomialvariate()
. (Bidrag från Raymond Hettinger i gh-81620.)Lägg till ett standardvärde på
lambd=1.0
tillrandom.expovariate()
. (Bidrag från Raymond Hettinger i gh-100234.)
shutil¶
shutil.make_archive()
skickar nu root_dir-argumentet till anpassade arkiverare som stöder det. I det här fallet ändras inte längre processens aktuella arbetskatalog tillfälligt till root_dir för att utföra arkivering. (Bidrag från Serhiy Storchaka i gh-74696.)shutil.rmtree()
accepterar nu ett nytt argument onexc som är en felhanterare som onerror men som förväntar sig en undantagsinstans snarare än en (typ, val, tb) triplett. onerror är föråldrad. (Bidrag från Irit Katriel i gh-102828.)shutil.which()
använder nu miljövariabeln PATHEXT för att hitta matchningar inom PATH på Windows även när den givna cmd innehåller en katalogkomponent. (Bidrag från Charles Machalow i gh-103179.)shutil.which()
kommer att anropaNeedCurrentDirectoryForExePathW
vid sökning efter körbara filer i Windows för att avgöra om den aktuella arbetskatalogen ska läggas till i sökvägen. (Bidrag från Charles Machalow i gh-103179.)shutil.which()
kommer att returnera en sökväg som matchar cmd med en komponent frånPATHEXT
före en direkt matchning någon annanstans i sökvägen på Windows. (Bidrag från Charles Machalow i gh-103179.)
sqlite3¶
Lägg till ett kommandoradsgränssnitt. (Bidrag från Erlend E. Aasland i gh-77617.)
Lägg till attributet
sqlite3.Connection.autocommit
tillsqlite3.Connection
och parametern autocommit tillsqlite3.connect()
för att kontrollera PEP 249-kompatibel transaktionshantering. (Bidrag från Erlend E. Aasland i gh-83638.)Add entrypoint keyword-only parameter to
sqlite3.Connection.load_extension()
, for overriding the SQLite extension entry point. (Bidrag från Erlend E. Aasland i gh-103015.)Lägg till
sqlite3.Connection.getconfig()
ochsqlite3.Connection.setconfig()
tillsqlite3.Connection
för att göra konfigurationsändringar i en databasanslutning. (Bidrag från Erlend E. Aasland i gh-103489.)
statistik¶
Utöka
statistics.correlation()
till att inkludera som enrankad
metod för att beräkna Spearman-korrelationen för rankade data. (Bidrag från Raymond Hettinger i gh-95861.)
system¶
Lägg till namnrymden
sys.monitoring
för att exponera det nya PEP 669-övervaknings-API:et. (Bidrag från Mark Shannon i gh-103082.)Lägg till
sys.activate_stack_trampoline()
ochsys.deactivate_stack_trampoline()
för att aktivera och avaktivera trampoliner för stackprofiler, ochsys.is_stack_trampoline_active()
för att fråga om trampoliner för stackprofiler är aktiva. (Bidrag från Pablo Galindo och Christian Heimes med bidrag från Gregory P. Smith [Google] och Mark Shannon i gh-96123.)Lägg till
sys.last_exc
som innehåller det senaste ohanterade undantaget som togs upp (för felsökning i efterhand). Avveckla de tre fält som har samma information i sin äldre form:sys.last_type
,sys.last_value
ochsys.last_traceback
. (Bidrag från Irit Katriel i gh-102778.)sys._current_exceptions()
returnerar nu en mappning från thread-id till en undantagsinstans, snarare än till en(typ, exc, tb)
-tupel. (Bidrag från Irit Katriel i gh-103176.)sys.setrecursionlimit()
ochsys.getrecursionlimit()
. Rekursionsgränsen gäller nu endast för Python-kod. Inbyggda funktioner använder inte rekursionsgränsen, utan skyddas av en annan mekanism som förhindrar att rekursion orsakar en krasch i den virtuella maskinen.
tempfil¶
Funktionen
tempfile.NamedTemporaryFile
har fått en ny valfri parameter delete_on_close (Bidrag från Evgeny Zorin i gh-58451.)tempfile.mkdtemp()
returnerar nu alltid en absolut sökväg, även om argumentet som anges i parametern dir är en relativ sökväg.
gängning¶
Lägg till
threading.settrace_all_threads()
ochthreading.setprofile_all_threads()
som gör det möjligt att ställa in spårnings- och profileringsfunktioner i alla trådar som körs utöver den anropande tråden. (Bidrag från Pablo Galindo i gh-93503.)
tkinter¶
tkinter.Canvas.coords()
plattar nu ut sina argument. Den accepterar nu inte bara koordinater som separata argument (x1, y1, x2, y2, ...
) och en sekvens av koordinater ([x1, y1, x2, y2, ...]
), utan även koordinater grupperade i par ((x1, y1), (x2, y2), ...
och[(x1, y1), (x2, y2), ...]
), somcreate_*()
metoder. (Bidrag från Serhiy Storchaka i gh-94473.)
tokenisera¶
Modulen
tokenize
innehåller de ändringar som introducerades i PEP 701. (Bidrag från Marta Gómez Macías och Pablo Galindo i gh-102856.) Se Portning till Python 3.12 för mer information om ändringarna i modulentokenize
.
typer¶
Lägg till
types.get_original_bases()
för att möjliggöra ytterligare introspektion av Användardefinierade generiska typer när den är underklassad. (Bidrag från James Hilton-Balfe och Alex Waygood i gh-101827.)
typing¶
isinstance()
-kontroller motruntime-checkable protocols
använder nuinspect.getattr_static()
istället förhasattr()
för att kontrollera om attribut existerar. Detta innebär att beskrivningar och__getattr__()
-metoder inte längre oväntat utvärderas underisinstance()
-kontroller mot runtime-checkable-protokoll. Det kan dock också innebära att vissa objekt som tidigare betraktades som instanser av ett runtime-checkable-protokoll inte längre betraktas som instanser av det protokollet i Python 3.12+, och vice versa. De flesta användare kommer troligen inte att påverkas av denna ändring. (Bidrag från Alex Waygood i gh-102433.)Medlemmarna i ett runtime-checkable-protokoll anses nu vara ”frysta” vid runtime så snart klassen har skapats. Att monkey-patcha attribut på ett runtime-checkable protokoll kommer fortfarande att fungera, men kommer inte att ha någon inverkan på
isinstance()
-kontroller som jämför objekt med protokollet. Till exempel:>>> 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
Denna ändring gjordes för att snabba upp
isinstance()
-kontrollerna mot protokoll som kan kontrolleras under körning.Prestandaprofilen för
isinstance()
kontrollerar motruntime-checkable protocols
har ändrats avsevärt. De flestaisinstance()
-kontroller mot protokoll med endast några få medlemmar bör vara minst dubbelt så snabba som i 3.11, och vissa kan vara 20 gånger snabbare eller mer. Dock kanisinstance()
-kontroller mot protokoll med många medlemmar vara långsammare än i Python 3.11. (Bidrag från Alex Waygood i gh-74690 och gh-103193.)Alla klasser
typing.TypedDict
ochtyping.NamedTuple
har nu attributet__orig_bases__
. (Bidrag från Adrian Garcia Badaracco i gh-103699.)Lägg till parametern
frozen_default
tilltyping.dataclass_transform()
. (Bidrag från Erik De Bonte i gh-99957.)
unicodedata¶
Unicode-databasen har uppdaterats till version 15.0.0. (Bidrag från Benjamin Peterson i gh-96734).
unittest¶
Lägg till ett kommandoradsalternativ --durations
som visar de N långsammaste testfallen:
python3 -m unittest --durationer=3 lib.tests.test_threading
.....
Långsammaste testdurationer
----------------------------------------------------------------------
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 varaktigheter dolda. Använd -v för att visa dessa varaktigheter)
----------------------------------------------------------------------
Körde 158 tester på 9,869 sekunder
OK (hoppade över=3)
(Bidrag från Giampaolo Rodola i gh-48330)
uuid¶
Lägg till ett kommandoradsgränssnitt. (Bidrag från Adam Chhina i gh-88597.)
Optimeringar¶
Ta bort medlemmarna
wstr
ochwstr_length
från Unicode-objekt. Det minskar objektstorleken med 8 eller 16 byte på 64bitars plattformar. (PEP 623) (Bidrag från Inada Naoki i gh-92536.)Lägg till experimentellt stöd för användning av den binära optimeraren BOLT i byggprocessen, vilket förbättrar prestandan med 1-5%. (Bidrag från Kevin Modzelewski i gh-90536 och justerat av Donghee Na i gh-101525)
Snabba upp substitutionen med reguljära uttryck (funktionerna
re.sub()
ochre.subn()
och motsvarandere.Pattern
-metoder) för ersättningssträngar som innehåller gruppreferenser med 2–3 gånger. (Bidrag från Serhiy Storchaka i gh-91524.)Snabba upp skapandet av
asyncio.Task
genom att skjuta upp dyr strängformatering. (Bidrag från Itamar Oren i gh-103793.)Funktionerna
tokenize.tokenize()
ochtokenize.generate_tokens()
är upp till 64% faster som en bieffekt av de ändringar som krävs för att täcka PEP 701 i modulentokenize
. (Bidrag från Marta Gómez Macías och Pablo Galindo i gh-102856.)Snabba upp
super()
metodanrop och attributladdningar via den nyaLOAD_SUPER_ATTR
instruktionen. (Bidrag från Carl Meyer och Vladimir Matveev i gh-103497.)
CPython bytecode-ändringar¶
Ta bort instruktionen
LOAD_METHOD
. Den har slagits samman medLOAD_ATTR
.LOAD_ATTR
kommer nu att bete sig som den gamlaLOAD_METHOD
-instruktionen om den låga biten i dess oparg är satt. (Bidrag från Ken Jin i gh-93429.)Ta bort instruktionerna
JUMP_IF_FALSE_OR_POP
ochJUMP_IF_TRUE_OR_POP
. (Bidrag från Irit Katriel i gh-102859.)Ta bort
PRECALL
instruktionen. (Bidrag från Mark Shannon i gh-92925.)Lägg till instruktionerna
BINARY_SLICE
ochSTORE_SLICE
. (Bidrag från Mark Shannon i gh-94163.)Lägg till instruktionerna
CALL_INTRINSIC_1
. (Bidrag från Mark Shannon i gh-99005.)Lägg till instruktionen
CALL_INTRINSIC_2
. (Bidrag från Irit Katriel i gh-101799.)Lägg till instruktionen
CLEANUP_THROW
. (Bidrag från Brandt Bucher i gh-90997.)Lägg till
END_SEND
instruktion. (Bidrag från Mark Shannon i gh-103082.)Lägg till instruktionen
LOAD_FAST_AND_CLEAR
som en del av implementeringen av PEP 709. (Bidrag från Carl Meyer i gh-101441.)Lägg till instruktionen
LOAD_FAST_CHECK
. (Bidrag från Dennis Sweeney i gh-93143.)Lägg till opkoderna
LOAD_FROM_DICT_OR_DEREF
,LOAD_FROM_DICT_OR_GLOBALS
, ochLOAD_LOCALS
som en del av implementationen av PEP 695. Ta bort opkodenLOAD_CLASSDEREF
, som kan ersättas medLOAD_LOCALS
plusLOAD_FROM_DICT_OR_DEREF
. (Bidrag från Jelle Zijlstra i gh-103764.)Lägg till instruktionen
LOAD_SUPER_ATTR
. (Bidrag från Carl Meyer och Vladimir Matveev i gh-103497.)Lägg till instruktionen
RETURN_CONST
. (Bidrag från Wenyang Wang i gh-101632.)
Demonstrationer och verktyg¶
Ta bort katalogen
Tools/demo/
som innehöll gamla demoskript. En kopia finns i old-demos-projektet. (Bidrag från Victor Stinner i gh-97681.)Ta bort föråldrade exempelskript från katalogen
Tools/scripts/
. En kopia finns i old-demos-projektet. (Bidrag från Victor Stinner i gh-97669.)
Föråldrat¶
argparse
: Parametrarna type, choices och metavar iargparse.BooleanOptionalAction
är föråldrade och kommer att tas bort i 3.14. (Bidrag från Nikita Sobolev i gh-92248.)ast
: Följandeast
-funktioner har varit föråldrade i dokumentationen sedan Python 3.8, orsakar nu enDeprecationWarning
som skickas ut vid körning när de nås eller används, och kommer att tas bort i Python 3.14:ast.Num
ast.Str
ast.Bytes
ast.NamnKonstant
ast.Ellipsis
Använd
ast.Constant
istället. (Bidrag från Serhiy Storchaka i gh-90953.)-
Barnvaktklasserna
asyncio.MultiLoopChildWatcher
,asyncio.FastChildWatcher
,asyncio.AbstractChildWatcher
ochasyncio.SafeChildWatcher
är föråldrade och kommer att tas bort i Python 3.14. (Bidrag från Kumar Aditya i gh-94597.)asyncio.set_child_watcher()
,asyncio.get_child_watcher()
,asyncio.AbstractEventLoopPolicy.set_child_watcher()
ochasyncio.AbstractEventLoopPolicy.get_child_watcher()
är föråldrade och kommer att tas bort i Python 3.14. (Bidrag från Kumar Aditya i gh-94597.)Metoden
get_event_loop()
för standardpolicyn för händelseslingor avger nu enDeprecationWarning
om det inte finns någon aktuell händelseslinga och den bestämmer sig för att skapa en. (Bidrag från Serhiy Storchaka och Guido van Rossum i gh-100160.)
calendar
: Konstanternacalendar.January
ochcalendar.February
är föråldrade och ersätts avcalendar.JANUARY
ochcalendar.FEBRUARY
. (Bidrag från Prince Roshan i gh-103636.)collections.abc
: Föråldradcollections.abc.ByteString
. FöredraSequence
ellercollections.abc.Buffer
. För användning vid typning, föredra en union, sombytes | bytearray
, ellercollections.abc.Buffer
. (Bidrag från Shantanu Jain i gh-91896.)datetime
:datetime.datetime
:sutcnow()
ochutcfromtimestamp()
är föråldrade och kommer att tas bort i en framtida version. Använd istället tidszonmedvetna objekt för att representera datatider i UTC: anropanow()
respektivefromtimestamp()
med parametern tz inställd pådatetime.UTC
. (Bidrag från Paul Ganssle i gh-103857.)email
: Avveckla parametern isdst iemail.utils.localtime()
. (Bidrag från Alan Williams i gh-72346.)importlib.abc
: Föråldrade följande klasser, planerade att tas bort i Python 3.14:importlib.abc.ResourceReader
importlib.abc.Traversable
importlib.abc.TraversableResources
Använd
importlib.resources.abc
-klasser istället:(Bidrag från Jason R. Coombs och Hugo van Kemenade i gh-93963.)
itertools
: Avveckla stödet för copy-, deepcopy- och pickle-operationer, som är odokumenterade, ineffektiva, historiskt sett buggiga och inkonsekventa. Detta kommer att tas bort i 3.14 för en betydande minskning av kodvolymen och underhållsbördan. (Bidrag från Raymond Hettinger i gh-101588.)multiprocessing
: I Python 3.14 kommer standardstartmetodenmultiprocessing
att ändras till en säkrare metod på Linux, BSD och andra icke-macOS POSIX-plattformar där'fork'
för närvarande är standard (gh-84559). Att lägga till en körtidsvarning om detta ansågs vara alltför störande eftersom majoriteten av koden inte förväntas bry sig. Använd API:ernaget_context()
ellerset_start_method()
för att uttryckligen ange när din kod kräver'fork'
. Se kontexter och startmetoder.pkgutil
:pkgutil.find_loader()
ochpkgutil.get_loader()
är föråldrade och kommer att tas bort i Python 3.14; användimportlib.util.find_spec()
istället. (Bidrag från Nikita Sobolev i gh-97850.)pty
: Modulen har två odokumenterade funktionermaster_open()
ochlave_open()
som har varit avförda sedan Python 2 men som fick en korrektDeprecationWarning
först i 3.12. Ta bort dem i 3.14. (Bidrag från Soumendra Ganguly och Gregory P. Smith i gh-85984.)os
:Fälten
st_ctime
som returneras avos.stat()
ochos.lstat()
på Windows är föråldrade. I en framtida version kommer de att innehålla tiden för den senaste ändringen av metadata, i enlighet med andra plattformar. För närvarande innehåller de fortfarande skapelsetiden, som också är tillgänglig i det nya fältetst_birthtime
. (Bidrag från Steve Dower i gh-99726.)På POSIX-plattformar kan
os.fork()
nu ge upphov till enDeprecationWarning
när den upptäcker att den anropas från en flertrådad process. Det har alltid funnits en grundläggande inkompatibilitet med POSIX-plattformen när man gör detta. Även om sådan kod verkade fungera. Vi lade till varningen för att öka medvetenheten eftersom problem som uppstår med kod som gör detta blir allt vanligare. Seos.fork()
-dokumentationen för mer information tillsammans med den här diskussionen om att fork är inkompatibel med trådar för varför vi nu visar detta långvariga plattformskompatibilitetsproblem för utvecklare.
När denna varning visas på grund av användning av
multiprocessing
ellerconcurrent.futures
är lösningen att använda en annanmultiprocessing
-startmetod som"spawn"
eller"forkserver"
.shutil
: Argumentet onerror ishutil.rmtree()
är föråldrat; använd onexc istället. (Bidrag från Irit Katriel i gh-102828.)-
standardadaptrar och konverterare är nu föråldrade. Använd istället Adapter- och konverterrecept och skräddarsy dem efter dina behov. (Bidrag från Erlend E. Aasland i gh-90016.)
I
execute()
, skickas nuDeprecationWarning
ut när named placeholders används tillsammans med parametrar som levereras som en sequence istället för som endict
. Från och med Python 3.14 kommer användning av namngivna platshållare med parametrar som anges som en sekvens att ge upphov till ettProgrammingError
. (Bidrag från Erlend E. Aasland i gh-101698.)
sys
: Fältensys.last_type
,sys.last_value
ochsys.last_traceback
är föråldrade. Användsys.last_exc
istället. (Bidrag från Irit Katriel i gh-102778.)tarfile
: Att extrahera tar-arkiv utan att ange filter är föråldrat fram till Python 3.14, då filtret'data'
blir standard. Se Filter för utsugning för detaljer.typning
:typing.Hashable
ochtyping.Sized
, alias förcollections.abc.Hashable
respektivecollections.abc.Sized
, är avförda. (gh-94309.)typing.ByteString
, föråldrad sedan Python 3.9, orsakar nu att enDeprecationWarning
skickas ut när den används. (Bidrag från Alex Waygood i gh-91896.)
xml.etree.ElementTree
: Modulen avger nuDeprecationWarning
när den testar sanningsvärdet för ettxml.etree.ElementTree.Element
. Tidigare gav Python-implementationen utFutureWarning
och C-implementationen gav inte ut någonting. (Bidrag från Jacob Walls i gh-83122.)3-arg-signaturerna (typ, värde, spårning) för
coroutine throw()
,generator throw()
ochasync generator throw()
är föråldrade och kan tas bort i en framtida version av Python. Använd single-arg-versionerna av dessa funktioner istället. (Bidrag från Ofey Chan i gh-89874.)DeprecationWarning
visas nu när__package__
på en modul skiljer sig från__spec__.parent
(tidigare var detImportWarning
). (Bidrag från Brett Cannon i gh-65961.)Att ställa in
__package__
eller__cached__
på en modul är föråldrat och kommer att upphöra att ställas in eller tas i beaktande av importsystemet i Python 3.14. (Bidrag från Brett Cannon i gh-65961.)Den bitvisa inversionsoperatorn (
~
) på bool är föråldrad. Det kommer att kasta ett fel i Python 3.16. Användnot
för logisk negation av booler istället. I det sällsynta fallet att du verkligen behöver den bitvisa inversionen av den underliggandeint
, konvertera till int uttryckligen:~int(x)
. (Bidrag från Tim Hoffmann i gh-103487.)Åtkomst till
co_lnotab
på kodobjekt avförklarades i Python 3.10 via PEP 626, men det fick en riktigDeprecationWarning
först i 3.12. Kan komma att tas bort i 3.15. (Bidrag från Nikita Sobolev i gh-101866.)
Väntande borttagningar i Python 3.13¶
Moduler (se PEP 594):
aifc
audioop
cgi
cgitb
chunk
crypt
imghdr
mailcap
msilib
nis
nntplib
ossaudiodev
pipes
sndhdr
spwd
sunau
telnetlib
uu
xdrlib
Övriga moduler:
lib2to3
, och programmet 2to3 (gh-84540)
API:er:
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)classmethod
kedja av beskrivare (gh-89519)importlib.resources
föråldrade metoder:contents()
is_resource()
open_binary()
open_text()
path()
read_binary()
read_text()
Använd
importlib.resources.files()
istället. Hänvisa till importlib-resources: Migrera från Legacy (gh-106531)
Väntar på borttagning i Python 3.14¶
argparse
: Parametrarna type, choices och metavar iargparse.BooleanOptionalAction
är föråldrade och kommer att tas bort i 3.14. (Bidrag från Nikita Sobolev i gh-92248.)ast
: Följande funktioner har varit föråldrade i dokumentationen sedan Python 3.8, orsakar nu enDeprecationWarning
vid körning när de nås eller används, och kommer att tas bort i Python 3.14:ast.Num
ast.Str
ast.Bytes
ast.NamnKonstant
ast.Ellipsis
Använd
ast.Constant
istället. (Bidrag från Serhiy Storchaka i gh-90953.)-
Barnvaktklasserna
asyncio.MultiLoopChildWatcher
,asyncio.FastChildWatcher
,asyncio.AbstractChildWatcher
ochasyncio.SafeChildWatcher
är föråldrade och kommer att tas bort i Python 3.14. (Bidrag från Kumar Aditya i gh-94597.)asyncio.set_child_watcher()
,asyncio.get_child_watcher()
,asyncio.AbstractEventLoopPolicy.set_child_watcher()
ochasyncio.AbstractEventLoopPolicy.get_child_watcher()
är föråldrade och kommer att tas bort i Python 3.14. (Bidrag från Kumar Aditya i gh-94597.)Metoden
get_event_loop()
för standardpolicyn för händelseslingor avger nu enDeprecationWarning
om det inte finns någon aktuell händelseslinga och den bestämmer sig för att skapa en. (Bidrag från Serhiy Storchaka och Guido van Rossum i gh-100160.)
collections.abc
: Föråldradcollections.abc.ByteString
. FöredraSequence
ellerBuffer
. För användning vid typning, föredra en union, sombytes | bytearray
, ellercollections.abc.Buffer
. (Bidrag från Shantanu Jain i gh-91896.)email
: Föråldrad isdst parameter iemail.utils.localtime()
. (Bidrag från Alan Williams i gh-72346.)importlib.abc
föråldrade klasser:importlib.abc.ResourceReader
importlib.abc.Traversable
importlib.abc.TraversableResources
Använd
importlib.resources.abc
-klasser istället:(Bidrag från Jason R. Coombs och Hugo van Kemenade i gh-93963.)
itertools
hade odokumenterat, ineffektivt, historiskt buggigt och inkonsekvent stöd för copy-, deepcopy- och pickle-operationer. Detta kommer att tas bort i 3.14 för en betydande minskning av kodvolymen och underhållsbördan. (Bidrag från Raymond Hettinger i gh-101588.)multiprocessing
: Standardstartmetoden kommer att ändras till en säkrare metod på Linux, BSD och andra POSIX-plattformar som inte är MacOS där'fork'
för närvarande är standard (gh-84559). Att lägga till en körtidsvarning om detta ansågs vara alltför störande eftersom majoriteten av koden inte förväntas bry sig. Använd API:ernaget_context()
ellerset_start_method()
för att uttryckligen ange när din kod kräver'fork'
. Se Sammanhang och startmetoder.pathlib
:is_relative_to()
ochrelative_to()
: att skicka ytterligare argument är föråldrat.pkgutil
:pkgutil.find_loader()
ochpkgutil.get_loader()
ger nu upphov tillDeprecationWarning
; användimportlib.util.find_spec()
istället. (Bidrag från Nikita Sobolev i gh-97850.)pty
:master_open()
: användpty.openpty()
.slave_open()
: användpty.openpty()
.
-
version
ochversion_info
.execute()
ochexecutemany()
om named placeholders används och parameters är en sekvens istället för endict
.
typing
:typing.ByteString
, föråldrad sedan Python 3.9, orsakar nu att enDeprecationWarning
sänds ut när den används.urllib
:urllib.parse.Quoter
is deprecated: det var inte avsett att vara ett offentligt API. (Bidrag från Gregory P. Smith i gh-88168.)
Väntar på borttagning i Python 3.15¶
Importsystemet:
Att ställa in
__cached__
på en modul samtidigt som man misslyckas med att ställa in__spec__.cached
är föråldrat. I Python 3.15 kommer__cached__
inte längre att anges eller tas i beaktande av importsystemet eller standardbiblioteket. (gh-97879)Att ställa in
__package__
på en modul utan att ställa in__spec__.parent
är föråldrat. I Python 3.15 kommer__package__
inte längre att anges eller tas i beaktande av importsystemet eller standardbiblioteket. (gh-97879)
-
Den odokumenterade
ctypes.SetPointerType()
-funktionen är föråldrad sedan Python 3.13.
-
Den föråldrade och sällan använda
CGIHTTPRequestHandler
har utgått sedan Python 3.13. Ingen direkt ersättare finns. Anything är bättre än CGI för att koppla en webbserver till en request-hanterare.Flaggan
--cgi
till kommandoradsgränssnittet python -m http.server har utgått sedan Python 3.13.
-
load_module()
metod: användexec_module()
istället.
-
Funktionen
getdefaultlocale()
har varit föråldrad sedan Python 3.11. Dess borttagning var ursprungligen planerad till Python 3.13 (gh-90817), men har skjutits upp till Python 3.15. Användgetlocale()
,setlocale()
, ochgetencoding()
istället. (Bidrag från Hugo van Kemenade i gh-111187.)
-
PurePath.is_reserved()
har utgått sedan Python 3.13. Användos.path.isreserved()
för att upptäcka reserverade sökvägar i Windows.
plattform
:java_ver()
har utgått sedan Python 3.13. Denna funktion är endast användbar för Jython-stöd, har ett förvirrande API och är i stort sett otestad.
-
Argumentet check_home i
sysconfig.is_python_build()
har utgått sedan Python 3.12.
-
RLock()
kommer inte att ta några argument i Python 3.15. Att skicka några argument har varit föråldrat sedan Python 3.14, eftersom Python-versionen inte tillåter några argument, men C-versionen tillåter valfritt antal positionella eller nyckelordsargument och ignorerar varje 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. Kan komma att tas bort i 3.15. (Bidrag från Nikita Sobolev i gh-101866.)
typning
:Den odokumenterade syntaxen för nyckelordsargument för att skapa
NamedTuple
-klasser (till exempelPoint = NamedTuple("Point", x=int, y=int)
) har utgått sedan Python 3.13. Använd den klassbaserade syntaxen eller den funktionella syntaxen istället.När man använder den funktionella syntaxen för
TypedDict
s, att inte skicka ett värde till parametern fields (TD = TypedDict("TD")
) eller att skickaNone
(TD = TypedDict("TD", None)
) har varit föråldrat sedan Python 3.13. Användclass TD(TypedDict): pass
ellerTD = TypedDict("TD", {})
för att skapa en TypedDict med noll fält.Dekoratorfunktionen
typing.no_type_check_decorator()
har varit föråldrad sedan Python 3.13. Efter åtta år i modulentyping
har den ännu inte fått stöd av någon större typkontroll.
våg
:Metoderna
getmark()
,setmark()
ochgetmarkers()
i klassernaWave_read
ochWave_write
har utgått sedan Python 3.13.
-
load_module()
är föråldrad sedan Python 3.10. Användexec_module()
istället. (Bidrag från Jiahao Li i gh-125746.)
Väntar på borttagning i Python 3.16¶
Importsystemet:
Att ställa in
__loader__
på en modul medan man misslyckas med att ställa in__spec__.loader
är föråldrat. I Python 3.16 kommer__loader__
inte längre att anges eller tas i beaktande av importsystemet eller standardbiblioteket.
-
Formatkoden
'u'
(wchar_t
) har utgått i dokumentation sedan Python 3.3 och vid körning sedan Python 3.13. Använd istället formatkoden'w'
(Py_UCS4
) för Unicode-tecken.
-
asyncio.iscoroutinefunction()
är föråldrad och kommer att tas bort i Python 3.16; användinspect.iscoroutinefunction()
istället. (Bidrag från Jiahao Li och Kumar Aditya i gh-122875.)asyncio
-policysystemet är föråldrat och kommer att tas bort i Python 3.16. I synnerhet är följande klasser och funktioner föråldrade:Användare bör använda
asyncio.run()
ellerasyncio.Runner
med loop_factory för att använda önskad implementering av händelseslingan.Till exempel, för att använda
asyncio.SelectorEventLoop
på Windows:import asyncio async def main(): ... asyncio.run(main(), loop_factory=asyncio.SelectorEventLoop)
(Bidrag från Kumar Aditya i gh-127949.)
-
Bitvis invertering på booleska typer,
~True
eller~False
har varit föråldrad sedan Python 3.12, eftersom det ger överraskande och ointuitiva resultat (-2
och-1
). Användnot x
istället för den logiska negationen av en booleansk formel. I det sällsynta fallet att du behöver den bitvisa inverteringen av det underliggande heltalet, konvertera tillint
explicit (~int(x)
).
-
Att anropa Python-implementationen av
functools.reduce()
med funktion eller sekvens som nyckelordsargument är inte längre aktuellt sedan Python 3.14.
-
Stöd för anpassade logghanterare med strm-argumentet är föråldrat och planeras att tas bort i Python 3.16. Definiera hanterare med stream-argumentet istället. (Bidrag från Mariusz Felisiak i gh-115032.)
-
Giltiga tillägg börjar med en ’.’ eller är tomma för
mimetypes.MimeTypes.add_type()
. Okommenterade tillägg är föråldrade och kommer att ge upphov till ettValueError
i Python 3.16. (Bidrag från Hugo van Kemenade i gh-75223.)
-
Undantaget
ExecError
har varit föråldrat sedan Python 3.14. Det har inte använts av någon funktion ishutil
sedan Python 3.4, och är nu ett alias förRuntimeError
.
-
Metoden
Class.get_methods
har utgått sedan Python 3.14.
sys
:Funktionen
_enablelegacywindowsfsencoding()
är föråldrad sedan Python 3.13. Använd miljövariabelnPYTHONLEGACYWINDOWSFSENCODING
istället.
-
Funktionen
sysconfig.expand_makefile_vars()
är föråldrad sedan Python 3.14. Användvars
-argumentet isysconfig.get_paths()
istället.
-
Det odokumenterade och oanvända attributet
TarFile.tarfile
är föråldrat sedan Python 3.13.
Väntar på borttagning i Python 3.17¶
typning
:Före Python 3.14 implementerades gamla tiders unioner med hjälp av den privata klassen
typing._UnionGenericAlias
. Denna klass behövs inte längre för implementationen, men den har behållits för bakåtkompatibilitet, med borttagning planerad till Python 3.17. Användare bör använda dokumenterade introspektionshjälpmedel somtyping.get_origin()
ochtyping.get_args()
istället för att förlita sig på privata implementationsdetaljer.
Avser att tas bort i framtida versioner¶
Följande API:er kommer att tas bort i framtiden, även om det för närvarande inte finns något datum för när de ska tas bort.
-
Nesting av argumentgrupper och nesting av ömsesidigt uteslutande grupper är avförda.
Att skicka det odokumenterade nyckelordsargumentet prefix_chars till
add_argument_group()
är nu föråldrat.Typomvandlaren
argparse.FileType
är föråldrad.
-
bool(NotImplemented)
.Generatorer:
throw(type, exc, tb)
ochathrow(type, exc, tb)
signaturen är förbrukad: användthrow(exc)
ochathrow(exc)
istället, signaturen med ett enda argument.För närvarande accepterar Python numeriska literaler omedelbart följt av nyckelord, till exempel
0in x
,1or x
,0if 1else 2
. Det tillåter förvirrande och tvetydiga uttryck som[0x1for x in y]
(som kan tolkas som[0x1 for x in y]
eller[0x1f or x in y]
). En syntaxvarning visas om den numeriska litteralen omedelbart följs av något av nyckelordenand
,else
,for
,if
,in
,is
ochor
. I en framtida version kommer det att ändras till ett syntaxfel. (gh-87999)Stöd för metoderna
__index__()
och__int__()
som returnerar icke-int-typer: dessa metoder kommer att behöva returnera en instans av en strikt underklass avint
.Stöd för metoden
__float__()
som returnerar en strikt underklass avfloat
: dessa metoder måste returnera en instans avfloat
.Stöd för metoden
__complex__()
som returnerar en strikt underklass avcomplex
: dessa metoder måste returnera en instans avcomplex
.Delegering av
int()
till metoden__trunc__()
.Att skicka ett komplext tal som real eller imag argument i
complex()
-konstruktorn är nu föråldrat; det bör endast skickas som ett enda positionellt argument. (Bidrag från Serhiy Storchaka i gh-109218.)
calendar
: Konstanternacalendar.January
ochcalendar.February
är föråldrade och ersätts avcalendar.JANUARY
ochcalendar.FEBRUARY
. (Bidrag från Prince Roshan i gh-103636.)codecs
: användopen()
istället förcodecs.open()
. (gh-133038)codeobject.co_lnotab
: använd istället metodencodeobject.co_lines()
.-
utcnow()
: använddatetime.datetime.now(tz=datetime.UTC)
.utcfromtimestamp()
: använddatetime.datetime.fromtimestamp(timestamp, tz=datetime.UTC)
.
gettext
: Pluralvärdet måste vara ett heltal.-
cache_from_source()
Parametern debug_override är föråldrad: använd parametern optimization istället.
-
EntryPoints
tuple-gränssnitt.Implicit
None
på returvärden.
logging
: metodenwarn()
har utgått sedan Python 3.3, användwarning()
istället.mailbox
: Användning av StringIO-ingång och textläge är föråldrad, använd BytesIO och binärt läge istället.os
: Anroparos.register_at_fork()
i flertrådad process.pydoc.ErrorDuringImport
: Ett tupelvärde för parametern exc_info är föråldrat, använd en undantagsinstans.re
: Strängare regler tillämpas nu för numeriska gruppreferenser och gruppnamn i reguljära uttryck. Endast sekvenser av ASCII-siffror accepteras nu som numeriska referenser. Gruppnamnet i bytesmönster och ersättningssträngar kan nu endast innehålla ASCII-bokstäver och siffror samt understreck. (Bidrag från Serhiy Storchaka i gh-91760.)modulerna
sre_compile
,sre_constants
ochsre_parse
.shutil
:rmtree()
:s parameter onerror är föråldrad i Python 3.12; använd istället parametern onexc.ssl
alternativ och protokoll:ssl.SSLContext
utan protokollargument är föråldrad.ssl.SSLContext
:set_npn_protocols()
andselected_npn_protocol()
are deprecated: use ALPN instead.ssl.OP_NO_SSL*
alternativssl.OP_NO_TLS*
alternativssl.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
threading
metoder:threading.Condition.notifyAll()
: usenotify_all()
.threading.Event.isSet()
: användis_set()
.threading.Thread.isDaemon()
,threading.Thread.setDaemon()
: använd attributetthreading.Thread.daemon
.threading.Thread.getName()
,threading.Thread.setName()
: använd attributetthreading.Thread.name
.threading.currentThread()
: usethreading.current_thread()
.threading.activeCount()
: usethreading.active_count()
.
Den interna klassen
typing._UnionGenericAlias
används inte längre för att implementeratyping.Union
. För att bevara kompatibiliteten med användare som använder denna privata klass, kommer en kompatibilitets-shim att tillhandahållas åtminstone fram till Python 3.17. (Bidrag från Jelle Zijlstra i gh-105499.)unittest.IsolatedAsyncioTestCase
: det är förkastligt att returnera ett värde som inte ärNone
från ett testfall.urllib.parse
föråldrade funktioner:urlparse()
iställetsplitattr()
splithost()
splitnport()
splitpasswd()
splitport()
splitquery()
splittag()
splittype()
splituser()
splitvärde()
to_bytes()
wsgiref
:SimpleHandler.stdout.write()
bör inte göra partiella skrivningar.xml.etree.ElementTree
: Att testa sanningsvärdet för enElement
är föråldrat. I en framtida version kommer det alltid att returneraTrue
. Föredra istället explicitalen(elem)
ellerelem is not None
tester.sys._clear_type_cache()
är föråldrad: användsys._clear_internal_caches()
istället.
Borttagen¶
asynchat och asyncore¶
configparser¶
Flera namn som föråldrades i
configparser
redan i 3.2 har tagits bort enligt gh-89336:configparser.ParsingError
har inte längre attributet eller argumentetfilename
. Använd istället attributet och argumentetource
.configparser
har inte längre enSafeConfigParser
-klass. Använd det kortare namnetConfigParser
istället.configparser.ConfigParser
har inte längre någon metod förreadfp
. Användread_file()
istället.
distutils¶
Ta bort paketet
distutils
. Det utrangerades i Python 3.10 genom PEP 632 ”Deprecate distutils module”. För projekt som fortfarande använderdistutils
och inte kan uppdateras till något annat, kansetuptools
-projektet installeras: det tillhandahåller fortfarandedistutils
. (Bidrag från Victor Stinner i gh-92584.)
säkerställa pip¶
Ta bort det medföljande setuptools-hjulet från
ensurepip
, och sluta installera setuptools i miljöer som skapats avvenv
.pip (>= 22.1)
kräver inte att setuptools installeras i miljön.setuptools
-baserade (ochdistutils
-baserade) paket kan fortfarande användas medpip install
, eftersom pip kommer att tillhandahållasetuptools
i den byggmiljö som används för att bygga ett paket.easy_install
,pkg_resources
,setuptools
ochdistutils
tillhandahålls inte längre som standard i miljöer som skapats medvenv
eller startats upp medensurepip
, eftersom de är en del av paketetsetuptools
. För projekt som förlitar sig på dessa vid körning börsetuptools
-projektet deklareras som ett beroende och installeras separat (vanligtvis med pip).(Bidrag från Pradyun Gedam i gh-95299.)
enum¶
ftplib¶
gzip¶
Ta bort attributet
filename
igzip
:sgzip.GzipFile
, föråldrat sedan Python 2.6, använd istället attributetname
. I skrivläge lade attributetfilename
till filändelsen'.gz
om den inte fanns. (Bidrag från Victor Stinner i gh-94196.)
hashlib¶
Ta bort den rena Python-implementationen av
hashlib
hashlib.pbkdf2_hmac()
, som är föråldrad i Python 3.10. Python 3.10 och nyare kräver OpenSSL 1.1.1 (PEP 644): denna OpenSSL-version tillhandahåller en C-implementering avpbkdf2_hmac()
som är snabbare. (Bidrag från Victor Stinner i gh-94199.)
importlib¶
Många tidigare avskrivna upprensningar i
importlib
har nu slutförts:Referenser till och stöd för
module_repr()
har tagits bort. (Bidrag från Barry Warsaw i gh-97850.)importlib.util.set_package
,importlib.util.set_loader
ochimportlib.util.module_for_loader
har alla tagits bort. (Bidrag från Brett Cannon och Nikita Sobolev i gh-65961 och gh-97850.)Stöd för API:erna
find_loader()
ochfind_module()
har tagits bort. (Bidrag från Barry Warsaw i gh-98040.)importlib.abc.Finder
,pkgutil.ImpImporter
ochpkgutil.ImpLoader
har tagits bort. (Bidrag från Barry Warsaw i gh-98040.)
imp¶
Modulen
imp
har tagits bort. (Bidrag från Barry Warsaw i gh-98040.)För att migrera, se följande korrespondenstabell:
imp
importlib
imp.NullImporter
Infoga
None
isys.path_importer_cache
imp.cache_from_source()
imp.find_module()
imp.get_magic()
imp.get_suffixes()
importlib.machinery.SOURCE_SUFFIXES
,importlib.machinery.EXTENSION_SUFFIXES
, ochimportlib.machinery.BYTECODE_SUFFIXES
imp.get_tag()
imp.load_module()
imp.ny_modul(namn)
types.Modultyp(namn)
imp.reload()
imp.source_from_cache()
imp.ladda_källa()
Se nedan
Ersätt
imp.load_source()
med: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
Ta bort
imp
funktioner och attribut utan ersättare:Odokumenterade funktioner:
imp.init_builtin()
imp.load_compiled()
imp.load_dynamic()
imp.load_package()
imp.lock_held()
,imp.acquire_lock()
,imp.release_lock()
: låsschemat har ändrats i Python 3.3 till lås per modul.konstanter för
imp.find_module()
:SEARCH_ERROR
,PY_SOURCE
,PY_COMPILED
,C_EXTENSION
,PY_RESOURCE
,PKG_DIRECTORY
,C_BUILTIN
,PY_FROZEN
,PY_CODERESOURCE
,IMP_HOOK
.
io¶
lokal¶
Ta bort
locale
:slocale.format()
-funktion, föråldrad i Python 3.7: användlocale.format_string()
istället. (Bidrag från Victor Stinner i gh-94226.)
smtpd¶
sqlite3¶
Följande odokumenterade
sqlite3
-funktioner, föråldrade i Python 3.10, är nu borttagna:sqlite3.enable_shared_cache()
sqlite3.OptimizedUnicode
Om en delad cache måste användas öppnar du databasen i URI-läge med frågeparametern
cache=shared
.Textfabriken
sqlite3.OptimizedUnicode
har varit ett alias förstr
sedan Python 3.3. Kod som tidigare satte textfabriken tillOptimizedUnicode
kan antingen användastr
explicit, eller förlita sig på standardvärdet som också ärstr
.(Bidrag från Erlend E. Aasland i gh-92548.)
ssl¶
Ta bort
ssl
:sssl.RAND_pseudo_bytes()
-funktion, föråldrad i Python 3.6: användos.urandom()
ellerssl.RAND_bytes()
istället. (Bidrag från Victor Stinner i gh-94199.)Ta bort funktionen
ssl.match_hostname()
. Den var föråldrad i Python 3.7. OpenSSL utför matchning av värdnamn sedan Python 3.7, Python använder inte längre funktionenssl.match_hostname()
. (Bidrag från Victor Stinner i gh-94199.)Ta bort funktionen
ssl.wrap_socket()
, föråldrad i Python 3.7: skapa istället ettssl.SSLContext
-objekt och anropa dessssl.SSLContext.wrap_socket
-metod. Alla paket som fortfarande använderssl.wrap_socket()
är trasiga och osäkra. Funktionen skickar varken ett SNI TLS-tillägg eller validerar serverns värdnamn. Koden är föremål för CWE 295 (Felaktig validering av certifikat). (Bidrag från Victor Stinner i gh-94199.)
unittest¶
Ta bort många sedan länge föråldrade
unittest
-funktioner:Ett antal
TestCase
metodalias:Föråldrat alias
Metod Namn
Avskrivna i
failUnless
3.1
failIf
3.1
failUnlessEqual
3.1
failIfEqual
3.1
”misslyckas utan undantag nästan lika
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
Du kan använda https://github.com/isidentical/teyit för att automatiskt modernisera dina enhetstester.
Odokumenterad och trasig
TestCase
-metodenassertDictContainsSubset
(föråldrad i Python 3.2).Odokumenterad
TestLoader.loadTestsFromModule
parameter use_load_tests (föråldrad och ignorerad sedan Python 3.5).Ett alias för klassen
TextTestResult
:_TextTestResult
(föråldrad i Python 3.2).
(Bidrag från Serhiy Storchaka i gh-89325.)
webbläsare¶
Ta bort stöd för föråldrade webbläsare från
webbrowser
. De borttagna webbläsarna inkluderar: Grail, Mosaic, Netscape, Galeon, Skipstone, Iceape, Firebird och Firefox version 35 och lägre (gh-102871).
xml.etree.ElementTree¶
Ta bort metoden
ElementTree.Element.copy()
i den rena Python-implementationen, föråldrad i Python 3.10, använd funktionencopy.copy()
istället. C-implementeringen avxml.etree.ElementTree
har ingencopy()
-metod, bara en__copy__()
-metod. (Bidrag från Victor Stinner i gh-94383.)
zipimport¶
Andra¶
Ta bort
suspicious
-regeln från dokumentationenMakefile
ochDoc/tools/rstlint.py
, båda till förmån för sphinx-lint. (Bidrag från Julien Palard i gh-98179.)Ta bort parametrarna keyfile och certfile från modulerna
ftplib
,imaplib
,poplib
ochsmtplib
, och parametrarna key_file, cert_file och check_hostname från modulenhttp.client
, alla föråldrade sedan Python 3.6. Använd parametern context (ssl_context iimaplib
) istället. (Bidrag från Victor Stinner i gh-94172.)Ta bort
Jython
-kompatibilitetshack från flera stdlib-moduler och tester. (Bidrag från Nikita Sobolev i gh-99482.)Ta bort flaggan
_use_broken_old_ctypes_structure_semantics_
från modulenctypes
. (Bidrag från Nikita Sobolev i gh-99285.)
Portning till Python 3.12¶
I det här avsnittet listas tidigare beskrivna ändringar och andra buggfixar som kan kräva ändringar i din kod.
Ändringar i Python API¶
Strängare regler tillämpas nu för numeriska gruppreferenser och gruppnamn i reguljära uttryck. Endast en sekvens av ASCII-siffror accepteras nu som numerisk referens. Gruppnamnet i bytesmönster och ersättningssträngar kan nu endast innehålla ASCII-bokstäver och -siffror samt understreck. (Bidrag från Serhiy Storchaka i gh-91760.)
Ta bort
randrange()
funktionalitet som är föråldrad sedan Python 3.10. Tidigare konverteraderandrange(10.0)
förlustfritt tillrandrange(10)
. Nu ger det upphov till ettTypeError
. Undantaget för icke heltalsvärden somrandrange(10.5)
ellerrandrange('10')
har också ändrats frånValueError
tillTypeError
. Detta förhindrar också buggar därrandrange(1e25)
tyst skulle välja från ett större intervall änrandrange(10**25)
. (Ursprungligen föreslaget av Serhiy Storchaka gh-86388.)argparse.ArgumentParser
ändrade kodning och felhantering för läsning av argument från fil (t.ex. alternativetfromfile_prefix_chars
) från standardtextkodning (t.ex.locale.getpreferredencoding(False)
) till filesystem encoding and error handler. Argumentfiler bör kodas i UTF-8 istället för ANSI Codepage på Windows.Ta bort den
asyncore
-baserade modulensmtpd
som är föråldrad i Python 3.4.7 och 3.5.4. En rekommenderad ersättning är denasyncio
-baserade aiosmtpd PyPI-modulen.shlex.split()
: Att skickaNone
för s-argumentet ger nu upphov till ett undantag, istället för att läsasys.stdin
. Funktionen utrangerades i Python 3.9. (Bidrag från Victor Stinner i gh-94352.)Modulen
os
accepterar inte längre bytesliknande sökvägar, som typernabytearray
ochmemoryview
: endast den exakta typenbytes
accepteras för bytessträngar. (Bidrag från Victor Stinner i gh-98393.)syslog.openlog()
ochsyslog.closelog()
misslyckas nu om de används i undertolkare.syslog.syslog()
kan fortfarande användas i undertolkare, men nu endast omsyslog.openlog()
redan har anropats i huvudtolkaren. Dessa nya restriktioner gäller inte för huvudtolken, så endast ett mycket litet antal användare kan komma att påverkas. Den här ändringen hjälper till att isolera tolkar. Dessutom ärsyslog
ett omslag runt processglobala resurser, som bäst hanteras från huvudtolken. (Bidrag från Donghee Na i gh-99127.)Det odokumenterade låsbeteendet för
cached_property()
har tagits bort, eftersom det låste alla instanser av klassen, vilket ledde till hög låskonkurrens. Detta innebär att en getter-funktion för en cachelagrad egenskap nu kan köras mer än en gång för en enda instans om två trådar tävlar. För de flesta enkla cachade egenskaper (t.ex. de som är idempotenta och helt enkelt beräknar ett värde baserat på andra attribut för instansen) kommer detta att fungera bra. Om synkronisering behövs ska du implementera låsning i getter-funktionen för den cachade egenskapen eller runt åtkomstpunkter med flera trådar.sys._current_exceptions()
returnerar nu en mappning från thread-id till en undantagsinstans, snarare än till en(typ, exc, tb)
-tupel. (Bidrag från Irit Katriel i gh-103176.)När du extraherar tar-filer med
tarfile
ellershutil.unpack_archive()
kan du använda argumentet filter för att begränsa funktioner som kan vara överraskande eller farliga. Se Filter för utsugning för mer information.Utdata från funktionerna
tokenize.tokenize()
ochtokenize.generate_tokens()
har nu ändrats på grund av ändringarna som introducerades i PEP 701. Detta innebär attSTRING
-tokens inte längre skickas ut för f-strängar och de tokens som beskrivs i PEP 701 produceras nu istället:FSTRING_START
,FSTRING_MIDDLE
ochFSTRING_END
emitteras nu för f-strings ”string”-delar utöver de lämpliga tokens för tokeniseringen i uttryckskomponenterna. Till exempel för f-strängenf"start {1+1} end"
gav den gamla versionen av tokenizer ut:1,0-1,18: STRING 'f"start {1+1} slut"'
medan den nya versionen avger:
1,0-1,2: FSTRING_START 'f"' 1,2-1,8: FSTRING_MIDDLE 'start ' 1,8-1,9: OP '{' 1,9-1,10: NUMMER '1' 1,10-1,11: OP '+' 1,11-1,12: NUMMER '1' 1,12-1,13: OP "} 1,13-1,17: FSTRING_MIDDLE ' slut' 1,17-1,18: FSTRING_END '"'
Dessutom kan det förekomma vissa mindre beteendeförändringar som en följd av de förändringar som krävs för att stödja PEP 701. Några av dessa förändringar inkluderar:
Attributet
type
för de tokens som skickas ut vid tokenisering av vissa ogiltiga Python-tecken som!
har ändrats frånERRORTOKEN
tillOP
.Ofullständiga enradiga strängar ger nu också upphov till
tokenize.TokenError
på samma sätt som ofullständiga flerradiga strängar gör.Viss ofullständig eller ogiltig Python-kod ger nu upphov till
tokenize.TokenError
istället för att returnera godtyckligaERRORTOKEN
-tokens när den tokeniseras.Att blanda tabbar och mellanslag som indrag i samma fil stöds inte längre och kommer att ge upphov till ett
TabError
.
Modulen
threading
förväntar sig nu att modulen_thread
har ett attribut för_is_main_interpreter
. Det är en funktion utan argument som returnerarTrue
om den aktuella tolken är huvudtolken.Alla bibliotek eller program som tillhandahåller en anpassad
_thread
-modul bör tillhandahålla_is_main_interpreter()
. (Se gh-112826.)
Förändringar i byggning¶
Python använder inte längre
setup.py
för att bygga delade C-tilläggsmoduler. Byggparametrar som rubriker och bibliotek upptäcks i skriptetconfigure
. Tillägg byggs avMakefile
. De flesta tillägg använderpkg-config
och faller tillbaka på manuell detektering. (Bidrag från Christian Heimes i gh-93939.)va_start()
med två parametrar, somva_start(args, format),
krävs nu för att bygga Python.va_start()
anropas inte längre med en enda parameter. (Bidrag från Kumar Aditya i gh-93207.)CPython använder nu alternativet ThinLTO som standardpolicy för optimering av länktid om Clang-kompilatorn accepterar flaggan. (Bidrag från Donghee Na i gh-89536.)
Lägg till variabeln
COMPILEALL_OPTS
iMakefile
för att åsidosättacompileall
-alternativen (standard:-j0
) imake install
. Sammanslog även de 3compileall
-kommandona till ett enda kommando för att bygga .pyc-filer för alla optimeringsnivåer (0, 1, 2) på en gång. (Bidrag från Victor Stinner i gh-99289.)Lägg till plattformstripletter för 64-bitars LoongArch:
loongarch64-linux-gnusf
loongarch64-linux-gnuf32
loongarch64-linux-gnu
(Bidrag från Zhang Na i gh-90656.)
PYTHON_FOR_REGEN
kräver nu Python 3.10 eller nyare.Autoconf 2.71 och aclocal 1.16.4 krävs nu för att regenerera
configure
. (Bidrag från Christian Heimes i gh-89886.)Windows-byggnader och macOS-installationer från python.org använder nu OpenSSL 3.0.
Ändringar i C API¶
Nya funktioner¶
PEP 697: Introducerar Unstable C API tier, avsedd för lågnivåverktyg som felsökare och JIT-kompilatorer. Denna API kan ändras i varje mindre utgåva av CPython utan varningar om att den är föråldrad. Dess innehåll markeras med prefixet
PyUnstable_
i namnen.Konstruktörer för kodobjekt:
PyUnstable_Code_New()
(bytt namn frånPyCode_New
)PyUnstable_Code_NewWithPosOnlyArgs()
(bytt namn frånPyCode_NewWithPosOnlyArgs
)
Extra lagringsutrymme för kodobjekt (PEP 523):
PyUnstable_Eval_RequestCodeExtraIndex()
(bytt namn från_PyEval_RequestCodeExtraIndex
)PyUnstable_Code_GetExtra()
(bytt namn från_PyCode_GetExtra
)PyUnstable_Code_SetExtra()
(bytt namn från_PyCode_SetExtra
)
De ursprungliga namnen kommer att fortsätta att vara tillgängliga tills respektive API ändras.
(Bidrag från Petr Viktorin i gh-101101.)
PEP 697: Lägg till ett API för att utöka typer vars instansminneslayout är opak:
PyType_Spec.basicsize
kan vara noll eller negativ för att ange att basklassens storlek ärvs eller utökas.PyObject_GetTypeData()
ochPyType_GetTypeDataSize()
har lagts till för att ge tillgång till subklassspecifika instansdata.Py_TPFLAGS_ITEMS_AT_END
ochPyObject_GetItemData()
har lagts till för att på ett säkert sätt kunna utöka vissa typer med variabel storlek, inklusivePyType_Type
.Py_RELATIVE_OFFSET
tillagd för att tillåta definition avmembers
i termer av en underklass-specifik struktur.
(Bidrag från Petr Viktorin i gh-103509.)
Lägg till den nya limited C API-funktionen
PyType_FromMetaclass()
, som generaliserar den befintligaPyType_FromModuleAndSpec()
med hjälp av ett extra metaklassargument. (Bidrag från Wenzel Jakob i gh-93012.)API för att skapa objekt som kan anropas med hjälp av the vectorcall protocol lades till i Limited API:
vektorcallfunc
Flaggan
Py_TPFLAGS_HAVE_VECTORCALL
tas nu bort från en klass när klassens metod__call__()
tilldelas på nytt. Detta gör vectorcall säkert att använda med föränderliga typer (dvs. heap-typer utan flaggan immutable,Py_TPFLAGS_IMMUTABLETYPE
). Mutabla typer som inte åsidosättertp_call
ärver nu flagganPy_TPFLAGS_HAVE_VECTORCALL
. (Bidrag från Petr Viktorin i gh-93274.)Flaggorna
Py_TPFLAGS_MANAGED_DICT
ochPy_TPFLAGS_MANAGED_WEAKREF
har lagts till. Detta gör att tilläggsklasser kan stödja objekt__dict__
och weakrefs med mindre bokföring, mindre minnesanvändning och snabbare åtkomst.API för att utföra anrop med the vectorcall protocol lades till i Limited API:
Detta innebär att både den inkommande och utgående delen av vector call-protokollet nu finns tillgängligt i Limited API. (Bidrag från Wenzel Jakob i gh-98586.)
Lägg till två nya publika funktioner,
PyEval_SetProfileAllThreads()
ochPyEval_SetTraceAllThreads()
, som gör det möjligt att ställa in spårnings- och profileringsfunktioner i alla trådar som körs utöver den anropande. (Bidrag från Pablo Galindo i gh-93503.)Lägg till ny funktion
PyFunction_SetVectorcall()
till C API som ställer in vectorcall-fältet för en givenPyFunctionObject
. (Bidrag från Andrew Frost i gh-92257.)C API:et tillåter nu registrering av callbacks via
PyDict_AddWatcher()
,PyDict_Watch()
och relaterade API:er som anropas när en ordbok ändras. Detta är avsett att användas av optimerande tolkar, JIT-kompilatorer eller debuggar. (Bidrag från Carl Meyer i gh-91052.)Lägg till
PyType_AddWatcher()
ochPyType_Watch()
API för att registrera anrop för att få meddelanden om ändringar av en typ. (Bidrag från Carl Meyer i gh-91051.)Lägg till API:erna
PyCode_AddWatcher()
ochPyCode_ClearWatcher()
för att registrera återuppringningar för att få meddelanden om skapande och förstörelse av kodobjekt. (Bidrag från Itamar Oren i gh-91054.)Lägg till funktionerna
PyFrame_GetVar()
ochPyFrame_GetVarString()
för att hämta en ramvariabel med dess namn. (Bidrag från Victor Stinner i gh-91248.)Lägg till
PyErr_GetRaisedException()
ochPyErr_SetRaisedException()
för att spara och återställa det aktuella undantaget. Dessa funktioner returnerar och accepterar ett enda undantagsobjekt, i stället för de tre argument som finns i de numera föråldradePyErr_Fetch()
ochPyErr_Restore()
. Detta är mindre felbenäget och lite mer effektivt. (Bidrag från Mark Shannon i gh-101578.)Lägg till
_PyErr_ChainExceptions1
, som tar en undantagsinstans, för att ersätta legacy-API_PyErr_ChainExceptions
, som nu är föråldrad. (Bidrag från Mark Shannon i gh-101578.)Lägg till
PyException_GetArgs()
ochPyException_SetArgs()
som bekvämlighetsfunktioner för att hämta och modifieraargs
som skickas till undantagets konstruktör. (Bidrag från Mark Shannon i gh-101578.)Lägg till
PyErr_DisplayException()
, som tar en undantagsinstans, för att ersätta legacy-apiPyErr_Display()
. (Bidrag från Irit Katriel i gh-102755).
PEP 683: Introducera Immortal Objects, som gör det möjligt för objekt att kringgå referensräkningar, och relaterade ändringar i C-API:
_Py_IMMORTAL_REFCNT
: Referensantalet som definierar ett objektsom odödlig.
_Py_IsImmortal
Kontrollerar om ett objekt har det odödliga referensantalet.PyObject_HEAD_INIT
Detta kommer nu att initiera referensantalet till_Py_IMMORTAL_REFCNT
när den används medPy_BUILD_CORE
.
SSTATE_INTERNED_IMMORTAL
En identifierare för internerade unicode-objektsom är odödliga.
SSTATE_INTERNED_IMMORTAL_STATIC
En identifierare för interned unicodeobjekt som är odödliga och statiska
sys.getunicodeinternedsize
Detta returnerar det totala antalet unicodeobjekt som har internaliserats. Detta behövs nu för att
refleak.py
korrekt ska kunna spåra referensantal och allokerade block
(Bidrag från Eddie Elizondo i gh-84436.)
PEP 684: Lägg till den nya funktionen
Py_NewInterpreterFromConfig()
ochPyInterpreterConfig
, som kan användas för att skapa undertolkar med sina egna GIL:er. (Se PEP 684: En per-tolk GIL för mer information.) (Bidrag från Eric Snow i gh-104110.)I den begränsade C API-versionen 3.12 är funktionerna
Py_INCREF()
ochPy_DECREF()
nu implementerade som opaka funktionsanrop för att dölja implementationsdetaljer. (Bidrag från Victor Stinner i gh-105387.)
Portning till Python 3.12¶
Äldre Unicode API:er baserade på
Py_UNICODE*
representation har tagits bort. Migrera till API:er baserade på UTF-8 ellerwchar_t*
.Argumenttolkningfunktioner som
PyArg_ParseTuple()
stöder inte längre format baserade påPy_UNICODE*
(t.ex.u
,Z
). Migrera till andra format för Unicode, såsoms
,z
,es
ochU
.tp_weaklist
för alla statiska inbyggda typer är alltidNULL
. Detta är ett internt fält påPyTypeObject
men vi påpekar ändringen ifall någon råkar komma åt fältet direkt ändå. För att undvika avbrott, överväg att använda det befintliga offentliga C-API istället, eller, om nödvändigt, det (endast interna) makrot_PyObject_GET_WEAKREFS_LISTPTR()
.Denna endast interna
PyTypeObject.tp_subclasses
kanske nu inte är en giltig objektpekare. Dess typ ändrades till void* för att återspegla detta. Vi nämner detta ifall någon råkar komma åt det interna fältet direkt.För att få en lista över underklasser anropar du Python-metoden
__subclasses__()
(till exempel medPyObject_CallMethod()
).Lägg till stöd för fler formateringsalternativ (vänsterjustering, oktaler, hexadecimaler med versaler,
intmax_t
,ptrdiff_t
,wchar_t
C-strängar, variabel bredd och precision) iPyUnicode_FromFormat()
ochPyUnicode_FromFormatV()
. (Bidrag från Serhiy Storchaka i gh-98836.)Ett formattecken som inte känns igen i
PyUnicode_FromFormat()
ochPyUnicode_FromFormatV()
ger nu upphov tillSystemError
. I tidigare versioner orsakade det att resten av formatsträngen kopierades som den var till resultatsträngen och att alla extra argument kastades bort. (Bidrag från Serhiy Storchaka i gh-95781.)Korrigerar felaktig teckenplacering i
PyUnicode_FromFormat()
ochPyUnicode_FromFormatV()
. (Bidrag från Philip Georgi i gh-95504.)Tilläggsklasser som vill lägga till en
__dict__
eller svag referensplats bör användaPy_TPFLAGS_MANAGED_DICT
ochPy_TPFLAGS_MANAGED_WEAKREF
istället förtp_dictoffset
respektivetp_weaklistoffset
. Användningen avtp_dictoffset
ochtp_weaklistoffset
stöds fortfarande, men har inte fullt stöd för multipel nedärvning (gh-95589), och prestanda kan vara sämre. Klasser som deklarerarPy_TPFLAGS_MANAGED_DICT
måste anropa_PyObject_VisitManagedDict()
och_PyObject_ClearManagedDict()
för att korsa och rensa sina instansers ordlistor. För att rensa weakrefs, anropaPyObject_ClearWeakRefs()
, som tidigare.Funktionen
PyUnicode_FSDecoder()
accepterar inte längre bytesliknande sökvägar, som typernabytearray
ochmemoryview
: endast den exakta typenbytes
accepteras för bytessträngar. (Bidrag från Victor Stinner i gh-98393.)Makrona
Py_CLEAR
,Py_SETREF
ochPy_XSETREF
utvärderar nu bara sina argument en gång. Om ett argument har sidoeffekter dupliceras inte längre dessa sidoeffekter. (Bidrag från Victor Stinner i gh-98724.)Tolkens felindikator är nu alltid normaliserad. Detta innebär att
PyErr_SetObject()
,PyErr_SetString()
och de andra funktionerna som anger felindikatorn nu normaliserar undantaget innan det lagras. (Bidrag från Mark Shannon i gh-101578.)_Py_RefTotal
är inte längre auktoritativt och finns bara kvar för ABI-kompatibilitet. Observera att det är en intern global och endast tillgänglig på debug-byggnader. Om du råkar använda den så måste du börja använda_Py_GetGlobalRefTotal()
.Följande funktioner väljer nu en lämplig metaklass för den nyskapade typen:
Att skapa klasser vars metaklass åsidosätter
tp_new
är föråldrat, och i Python 3.14+ kommer det att vara otillåtet. Observera att dessa funktioner ignorerar metaklassenstp_new
, vilket kan leda till ofullständig initialisering.Observera att
PyType_FromMetaclass()
(tillagd i Python 3.12) redan förbjuder skapandet av klasser vars metaklass åsidosättertp_new
(__new__()
i Python).Eftersom
tp_new
åsidosätter nästan allt somPyType_From*
-funktioner gör, är de två inkompatibla med varandra. Det befintliga beteendet - att ignorera metaklassen under flera steg av typskapandet - är osäkert i allmänhet, eftersom (meta)klasser antar atttp_new
anropades. Det finns ingen enkel allmän lösning. Något av följande kan fungera för dig:Om du kontrollerar metaklassen, undvik att använda
tp_new
i den:Om initialiseringen kan hoppas över kan den göras i
tp_init
istället.Om metaklassen inte behöver instansieras från Python, sätt dess
tp_new
tillNULL
med flagganPy_TPFLAGS_DISALLOW_INSTANTIATION
. Detta gör den acceptabel förPyType_From*
funktioner.
Undvik
PyType_From*
-funktioner: om du inte behöver C-specifika funktioner (slots eller inställning av instansstorlek), skapa typer genom att kalla metaklassen.Om du vet att
tp_new
kan hoppas över på ett säkert sätt, filtrera bort deprecation-varningen medwarnings.catch_warnings()
från Python.
PyOS_InputHook
ochPyOS_ReadlineFunctionPointer
anropas inte längre i subinterpreters. Detta beror på att klienter i allmänhet förlitar sig på processomfattande globalt tillstånd (eftersom dessa återuppringningar inte har något sätt att återställa tilläggsmodulens tillstånd).Detta undviker också situationer där tillägg kan komma att köras i en undertolk som de inte stöder (eller ännu inte har laddats in i). Se gh-104668 för mer information.
PyLongObject
har fått sina interndelar ändrade för bättre prestanda. Även om de interna fälten iPyLongObject
är privata används de av vissa tilläggsmoduler. De interna fälten bör inte längre nås direkt, istället bör API-funktionerna som börjar medPyLong_...
användas istället. Två nya instabila API-funktioner tillhandahålls för effektiv åtkomst till värdet avPyLongObject
som ryms i ett enda maskinord:Anpassade allokatorer, inställda via
PyMem_SetAllocator()
, måste nu vara tråd-säkra, oavsett minnesdomän. Allokatorer som inte har sitt eget tillstånd, inklusive ”hooks”, påverkas inte. Om din anpassade allokator inte redan är tråd-säker och du behöver vägledning, skapa ett nytt GitHub-ärende och CC@ericsnowcurrently
.
Föråldrat¶
I enlighet med PEP 699, är fältet
ma_version_tag
iPyDictObject
föråldrat för tilläggsmoduler. Åtkomst till detta fält kommer att generera en kompilatorvarning vid kompileringstiden. Detta fält kommer att tas bort i Python 3.14. (Bidrag från Ramvikrams och Kumar Aditya i gh-101193. PEP av Ken Jin.)Utgå från den globala konfigurationsvariabeln:
Py_DebugFlag
: användPyConfig.parser_debug
Py_VerboseFlag
: användPyConfig.verbose
Py_QuietFlag
: användPyConfig.quiet
Py_InspectFlag
: användPyConfig.inspect
Py_NoSiteFlag
: användPyConfig.site_import
Py_HashRandomizationFlag
: användPyConfig.use_hash_seed
ochPyConfig.hash_seed
Py_IsolatedFlag
: användPyConfig.isolated
Py_LegacyWindowsFSEncodingFlag
: användPyPreConfig.legacy_windows_fs_encoding
Py_LegacyWindowsStdioFlag
: AnvändPyConfig.legacy_windows_stdio
Py_FileSystemDefaultEncoding
: AnvändPyConfig.filesystem_encoding
Py_HasFileSystemDefaultEncoding
: användPyConfig.filesystem_encoding
Py_FileSystemDefaultEncodeErrors
: AnvändPyConfig.filesystem_errors
Py_UTF8Mode
: användPyPreConfig.utf8_mode
(sePy_PreInitialize()
)
API:t
Py_InitializeFromConfig()
bör användas medPyConfig
istället. (Bidrag från Victor Stinner i gh-77782.)Att skapa
immutable types
med mutabla baser är föråldrat och kommer att inaktiveras i Python 3.14. (gh-95388)Headern
structmember.h
är föråldrad, men den är fortfarande tillgänglig och det finns inga planer på att ta bort den.Dess innehåll är nu tillgängligt bara genom att inkludera
Python.h
, med ettPy
prefix tillagt om det saknades:Skriv makron som
Py_T_INT
,Py_T_DOUBLE
, etc. (tidigareT_INT
,T_DOUBLE
, etc.)Flaggorna
Py_READONLY
(tidigareREADONLY
) ochPy_AUDIT_READ
(tidigare alla versaler)
Flera objekt är inte exponerade från
Python.h
:T_OBJECT
(användPy_T_OBJECT_EX
)T_NONE
(tidigare odokumenterad, och ganska knasig)Makrot
WRITE_RESTRICTED
som inte gör någonting.Makron
RESTRICTED
ochREAD_RESTRICTED
, motsvarigheter tillPy_AUDIT_READ
.I vissa konfigurationer inkluderas inte
<stddef.h>
frånPython.h
. Den bör inkluderas manuellt när du använderoffsetof()
.
Den föråldrade headern fortsätter att tillhandahålla sitt ursprungliga innehåll under de ursprungliga namnen. Din gamla kod kan förbli oförändrad, såvida du inte störs av extra include och makron utan namnavstånd.
(Bidrag i gh-47146 av Petr Viktorin, baserat på tidigare arbete av Alexander Belopolsky och Matthias Braun.)
PyErr_Fetch()
ochPyErr_Restore()
är föråldrade. AnvändPyErr_GetRaisedException()
ochPyErr_SetRaisedException()
istället. (Bidrag från Mark Shannon i gh-101578.)PyErr_Display()
är föråldrad. AnvändPyErr_DisplayException()
istället. (Bidrag från Irit Katriel i gh-102755)._PyErr_ChainExceptions
är föråldrad. Använd_PyErr_ChainExceptions1
istället. (Bidrag från Irit Katriel i gh-102192.)Att använda
PyType_FromSpec()
,PyType_FromSpecWithBases()
ellerPyType_FromModuleAndSpec()
för att skapa en klass vars metaklass åsidosättertp_new
är föråldrat. Anropa metaklassen istället.
Väntar på borttagning i Python 3.14¶
Fältet
ma_version_tag
iPyDictObject
för tilläggsmoduler (PEP 699; gh-101193).Skapar
immutable types
med mutabla baser (gh-95388).
Väntar på borttagning i Python 3.15¶
PyImport_ImportModuleNoBlock()
: AnvändPyImport_ImportModule()
istället.PyWeakref_GetObject()
ochPyWeakref_GET_OBJECT()
: AnvändPyWeakref_GetRef()
istället. Projektet pythoncapi-compat kan användas för att hämtaPyWeakref_GetRef()
på Python 3.12 och äldre.Py_UNICODE
typ ochPy_UNICODE_WIDE
makro: Användwchar_t
istället.PyUnicode_AsDecodedObject()
: AnvändPyCodec_Decode()
istället.PyUnicode_AsDecodedUnicode()
: AnvändPyCodec_Decode()
istället; Observera att vissa codecs (t.ex. ”base64”) kan returnera en annan typ änstr
, t.ex.bytes
.PyUnicode_AsEncodedObject()
: AnvändPyCodec_Encode()
istället.PyUnicode_AsEncodedUnicode()
: AnvändPyCodec_Encode()
istället; Observera att vissa codecs (t.ex. ”base64”) kan returnera en annan typ änbytes
, t.ex.str
.Python-initialiseringsfunktioner, föråldrade i Python 3.13:
Py_GetPath()
: AnvändPyConfig_Get("module_search_paths")
(sys.path
) istället.Py_GetPrefix()
: AnvändPyConfig_Get("base_prefix")
(sys.base_prefix
) istället. AnvändPyConfig_Get("prefix")
(sys.prefix
) om virtuella miljöer behöver hanteras.Py_GetExecPrefix()
: AnvändPyConfig_Get("base_exec_prefix")
(sys.base_exec_prefix
) istället. AnvändPyConfig_Get("exec_prefix")
(sys.exec_prefix
) om virtuella miljöer behöver hanteras.Py_GetProgramFullPath()
: AnvändPyConfig_Get("executable")
(sys.executable
) istället.Py_GetProgramName()
: AnvändPyConfig_Get("executable")
(sys.executable
) istället.Py_GetPythonHome()
: AnvändPyConfig_Get("home")
eller miljövariabelnPYTHONHOME
istället.
Projektet pythoncapi-compat kan användas för att få
PyConfig_Get()
på Python 3.13 och äldre.Funktioner för att konfigurera Pythons initialisering, föråldrad i Python 3.11:
PySys_SetArgvEx()
: Ställ inPyConfig.argv
istället.PySys_SetArgv()
: Ställ inPyConfig.argv
istället.Py_SetProgramName()
: Ställ inPyConfig.program_name
istället.Py_SetPythonHome()
: Ställ inPyConfig.home
istället.PySys_ResetWarnOptions()
: Rensasys.warnoptions
ochwarnings.filters
istället.
API:t
Py_InitializeFromConfig()
bör användas medPyConfig
istället.Variabler för global konfiguration:
Py_DebugFlag
: AnvändPyConfig.parser_debug
ellerPyConfig_Get("parser_debug")
istället.Py_VerboseFlag
: AnvändPyConfig.verbose
ellerPyConfig_Get("verbose")
istället.Py_QuietFlag
: AnvändPyConfig.quiet
ellerPyConfig_Get("quiet")
istället.Py_InteractiveFlag
: AnvändPyConfig.interactive
ellerPyConfig_Get("interactive")
istället.Py_InspectFlag
: AnvändPyConfig.inspect
ellerPyConfig_Get("inspect")
istället.Py_OptimizeFlag
: AnvändPyConfig.optimization_level
ellerPyConfig_Get("optimization_level")
istället.Py_NoSiteFlag
: AnvändPyConfig.site_import
ellerPyConfig_Get("site_import")
istället.Py_BytesWarningFlag
: AnvändPyConfig.bytes_warning
ellerPyConfig_Get("bytes_warning")
istället.Py_FrozenFlag
: AnvändPyConfig.pathconfig_warnings
ellerPyConfig_Get("pathconfig_warnings")
istället.Py_IgnoreEnvironmentFlag
: AnvändPyConfig.use_environment
ellerPyConfig_Get("use_environment")
istället.Py_DontWriteBytecodeFlag
: AnvändPyConfig.write_bytecode
ellerPyConfig_Get("write_bytecode")
istället.Py_NoUserSiteDirectory
: AnvändPyConfig.user_site_directory
ellerPyConfig_Get("user_site_directory")
istället.Py_UnbufferedStdioFlag
: AnvändPyConfig.buffered_stdio
ellerPyConfig_Get("buffered_stdio")
istället.Py_HashRandomizationFlag
: AnvändPyConfig.use_hash_seed
ochPyConfig.hash_seed
ellerPyConfig_Get("hash_seed")
istället.Py_IsolatedFlag
: AnvändPyConfig.isolated
ellerPyConfig_Get("isolated")
istället.Py_LegacyWindowsFSEncodingFlag
: AnvändPyPreConfig.legacy_windows_fs_encoding
ellerPyConfig_Get("legacy_windows_fs_encoding")
istället.Py_LegacyWindowsStdioFlag
: AnvändPyConfig.legacy_windows_stdio
ellerPyConfig_Get("legacy_windows_stdio")
istället.Py_FileSystemDefaultEncoding
,Py_HasFileSystemDefaultEncoding
: AnvändPyConfig.filesystem_encoding
ellerPyConfig_Get("filesystem_encoding")
istället.Py_FileSystemDefaultEncodeErrors
: AnvändPyConfig.filesystem_errors
ellerPyConfig_Get("filesystem_errors")
istället.Py_UTF8Mode
: AnvändPyPreConfig.utf8_mode
ellerPyConfig_Get("utf8_mode")
istället. (sePy_PreInitialize()
)
API:et
Py_InitializeFromConfig()
bör användas medPyConfig
för att ställa in dessa alternativ. Eller så kanPyConfig_Get()
användas för att hämta dessa alternativ vid körning.
Väntar på borttagning i Python 3.16¶
Den medföljande kopian av
libmpdec
.
Avser att tas bort i framtida versioner¶
Följande API:er är föråldrade och kommer att tas bort, även om det för närvarande inte finns något datum för när de ska tas bort.
Py_TPFLAGS_HAVE_FINALIZE
: Behövs inte sedan Python 3.8.PyErr_Fetch()
: AnvändPyErr_GetRaisedException()
istället.PyErr_NormalizeException()
: AnvändPyErr_GetRaisedException()
istället.PyErr_Restore()
: AnvändPyErr_SetRaisedException()
istället.PyModule_GetFilename()
: AnvändPyModule_GetFilenameObject()
istället.PyOS_AfterFork()
: AnvändPyOS_AfterFork_Child()
istället.PySlice_GetIndicesEx()
: AnvändPySlice_Unpack()
ochPySlice_AdjustIndices()
istället.PyUnicode_READY()
: Behövs inte sedan Python 3.12PyErr_Display()
: AnvändPyErr_DisplayException()
istället._PyErr_ChainExceptions()
: Använd_PyErr_ChainExceptions1()
istället.PyBytesObject.ob_shash
member: anropaPyObject_Hash()
istället.API för lokal lagring av trådar (TLS):
PyThread_create_key()
: AnvändPyThread_tss_alloc()
istället.PyThread_delete_key()
: AnvändPyThread_tss_free()
istället.PyThread_set_key_value()
: AnvändPyThread_tss_set()
istället.PyThread_get_key_value()
: AnvändPyThread_tss_get()
istället.PyThread_delete_key_value()
: AnvändPyThread_tss_delete()
istället.PyThread_ReInitTLS()
: Behövs inte sedan Python 3.7.
Borttagen¶
Ta bort huvudfilen
token.h
. Det fanns aldrig något offentligt tokenizer C API. Huvudfilentoken.h
var endast utformad för att användas av Python-interna funktioner. (Bidrag från Victor Stinner i gh-92651.)Äldre Unicode API:er har tagits bort. Se PEP 623 för detaljer.
PyUnicode_WCHAR_KIND
PyUnicode_AS_UNICODE()
PyUnicode_AsUnicode()
PyUnicode_AsUnicodeAndSize()
PyUnicode_AS_DATA()
PyUnicode_FromUnicode()
PyUnicode_GET_SIZE()
PyUnicode_GetSize()
PyUnicode_GET_DATA_SIZE()
Ta bort funktionsmakrot
PyUnicode_InternImmortal()
. (Bidrag från Victor Stinner i gh-85858.)