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,ImportErrorochSyntaxError
Förbättringar av Python-datamodellen:
PEP 688, använder buffer protocol från Python
Betydande förbättringar i standardbiblioteket:
Klassen
pathlib.Pathhar nu stöd för underklassningModulen
oshar fått flera förbättringar för Windows-stödEtt kommandoradsgränssnitt har lagts till i
sqlite3-modulenisinstance()kontrollerar motruntime-checkable protocolsmed en hastighet på mellan två och 20 gångerPaketet
asynciohar 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
tokenizeupp 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
perfImplementera 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
wstrfrå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
setuptoolsi virtuella miljöer skapade medvenv. Detta innebär attdistutils,setuptools,pkg_resourcesocheasy_installinte längre kommer att vara tillgängliga som standard; för att få tillgång till dessa körpip install setuptoolsi den virtuella miljön activated.Modulerna
asynchat,asyncore, ochimphar tagits bort, tillsammans med fleraunittest.TestCasemethod 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: Iterable[T]) -> T:
...
class list[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\Nsom 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
symtablekommer 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
NameErrorlyfts 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 ettNameErroruppstå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
SyntaxErrornär användaren skriverimport x from yistä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?
ImportErrorundantag 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
SyntaxErrorvid 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 kommerSyntaxErrorså 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 helaExceptionGroupoch 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
boolochint. (Bidrag från Serhiy Storchaka i gh-60203.)memoryviewhar 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 nuSyntaxErroristället förValueErrornär källkod som innehåller null bytes analyseras. (Bidrag från Pablo Galindo i gh-96670.)Extraktionsmetoderna i
tarfileochshutil.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
PYTHONPERFSUPPORToch 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.arrayhar 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
asynciohar förbättrats avsevärt.asyncioundviker 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
asyncioasyncio.PidfdChildWatchersom 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.PidfdChildWatcherom den stöds ochasyncio.ThreadedChildWatcherannars), 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 nuFalseför generatorer eftersomasynciointe 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.Monthochcalendar.Daysom definierar årets månader och veckans dagar. (Bidrag från Prince Roshan i gh-103636.)
csv¶
Lägg till
csv.QUOTE_NOTNULLochcsv.QUOTE_STRINGSflaggor för att ge finare kontroll avNoneoch tomma strängar avreaderochwriterobjekt.
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.Fractionstö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_NONBLOCKfö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.DirEntryinnehå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_birthtimekommer 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_devkan vara upp till 64 bitar ochst_inoupp till 128 bitar beroende på ditt filsystem, ochst_rdevsä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.PurePathochpathlib.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.0tillrandom.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 anropaNeedCurrentDirectoryForExePathWvid 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ånPATHEXTfö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.autocommittillsqlite3.Connectionoch 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.Connectionfö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 enrankadmetod 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.monitoringfö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_excsom 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_valueochsys.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.NamedTemporaryFilehar 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
tokenizeinnehå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 protocolsanvä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 protocolshar ä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.TypedDictochtyping.NamedTuplehar nu attributet__orig_bases__. (Bidrag från Adrian Garcia Badaracco i gh-103699.)Lägg till parametern
frozen_defaulttilltyping.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
wstrochwstr_lengthfrå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.Taskgenom 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_ATTRinstruktionen. (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_ATTRkommer 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_POPochJUMP_IF_TRUE_OR_POP. (Bidrag från Irit Katriel i gh-102859.)Ta bort
PRECALLinstruktionen. (Bidrag från Mark Shannon i gh-92925.)Lägg till instruktionerna
BINARY_SLICEochSTORE_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_SENDinstruktion. (Bidrag från Mark Shannon i gh-103082.)Lägg till instruktionen
LOAD_FAST_AND_CLEARsom 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_LOCALSsom en del av implementationen av PEP 695. Ta bort opkodenLOAD_CLASSDEREF, som kan ersättas medLOAD_LOCALSplusLOAD_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 enDeprecationWarningsom skickas ut vid körning när de nås eller används, och kommer att tas bort i Python 3.14:ast.Numast.Strast.Bytesast.NamnKonstantast.Ellipsis
Använd
ast.Constantistället. (Bidrag från Serhiy Storchaka i gh-90953.)-
Barnvaktklasserna
asyncio.MultiLoopChildWatcher,asyncio.FastChildWatcher,asyncio.AbstractChildWatcherochasyncio.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 enDeprecationWarningom 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.Januaryochcalendar.Februaryär föråldrade och ersätts avcalendar.JANUARYochcalendar.FEBRUARY. (Bidrag från Prince Roshan i gh-103636.)collections.abc: Föråldradcollections.abc.ByteString. FöredraSequenceellercollections.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.ResourceReaderimportlib.abc.Traversableimportlib.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 standardstartmetodenmultiprocessingatt ä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 korrektDeprecationWarningfö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_ctimesom 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 enDeprecationWarningnä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
multiprocessingellerconcurrent.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 nuDeprecationWarningut 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_valueochsys.last_tracebackär föråldrade. Användsys.last_excistä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.Hashableochtyping.Sized, alias förcollections.abc.Hashablerespektivecollections.abc.Sized, är avförda. (gh-94309.)typing.ByteString, föråldrad sedan Python 3.9, orsakar nu att enDeprecationWarningskickas ut när den används. (Bidrag från Alex Waygood i gh-91896.)
xml.etree.ElementTree: Modulen avger nuDeprecationWarningnär den testar sanningsvärdet för ettxml.etree.ElementTree.Element. Tidigare gav Python-implementationen utFutureWarningoch 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.)DeprecationWarningvisas 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ändnotfö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_lnotabpå kodobjekt avförklarades i Python 3.10 via PEP 626, men det fick en riktigDeprecationWarningfö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):
aifcaudioopcgicgitbchunkcryptimghdrmailcapmsilibnisnntplibossaudiodevpipessndhdrspwdsunautelnetlibuuxdrlib
Ö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)classmethodkedja av beskrivare (gh-89519)importlib.resourcesfö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 enDeprecationWarningvid körning när de nås eller används, och kommer att tas bort i Python 3.14:ast.Numast.Strast.Bytesast.NamnKonstantast.Ellipsis
Använd
ast.Constantistället. (Bidrag från Serhiy Storchaka i gh-90953.)-
Barnvaktklasserna
asyncio.MultiLoopChildWatcher,asyncio.FastChildWatcher,asyncio.AbstractChildWatcherochasyncio.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 enDeprecationWarningom 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öredraSequenceellerBuffer. 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.abcföråldrade klasser:importlib.abc.ResourceReaderimportlib.abc.Traversableimportlib.abc.TraversableResources
Använd
importlib.resources.abc-klasser istället:(Bidrag från Jason R. Coombs och Hugo van Kemenade i gh-93963.)
itertoolshade 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().
-
versionochversion_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 enDeprecationWarningsänds ut när den används.urllib:urllib.parse.Quoteris 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
CGIHTTPRequestHandlerhar 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
--cgitill 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_lnotabwas deprecated in PEP 626 since 3.10 and was planned to be removed in 3.12, but it only got a properDeprecationWarningin 3.12. 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
TypedDicts, 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): passellerTD = 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 modulentypinghar den ännu inte fått stöd av någon större typkontroll.
våg:Metoderna
getmark(),setmark()ochgetmarkers()i klassernaWave_readochWave_writehar 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.Runnermed loop_factory för att använda önskad implementering av händelseslingan.Till exempel, för att använda
asyncio.SelectorEventLooppå 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,
~Trueeller~Falsehar varit föråldrad sedan Python 3.12, eftersom det ger överraskande och ointuitiva resultat (\-2och\-1). Användnot xistä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 tillintexplicit (~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 ettValueErrori Python 3.16. (Bidrag från Hugo van Kemenade i gh-75223.)
-
Undantaget
ExecErrorhar varit föråldrat sedan Python 3.14. Det har inte använts av någon funktion ishutilsedan Python 3.4, och är nu ett alias förRuntimeError.
-
Metoden
Class.get_methodshar utgått sedan Python 3.14.
sys:Funktionen
_enablelegacywindowsfsencoding()är föråldrad sedan Python 3.13. Använd miljövariabelnPYTHONLEGACYWINDOWSFSENCODINGistä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,isochor. 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.Januaryochcalendar.Februaryär föråldrade och ersätts avcalendar.JANUARYochcalendar.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.
-
EntryPointstuple-gränssnitt.Implicit
Nonepå 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_constantsochsre_parse.shutil:rmtree():s parameter onerror är föråldrad i Python 3.12; använd istället parametern onexc.sslalternativ och protokoll:ssl.SSLContextutan 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_SSLv3ssl.PROTOCOL_TLSssl.PROTOCOL_TLSv1ssl.PROTOCOL_TLSv1_1ssl.PROTOCOL_TLSv1_2ssl.TLSVersion.SSLv3ssl.TLSVersion.TLSv1ssl.TLSVersion.TLSv1_1
threadingmetoder: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._UnionGenericAliasanvä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 ärNonefrån ett testfall.urllib.parsefö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 Nonetester.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
configparserredan i 3.2 har tagits bort enligt gh-89336:configparser.ParsingErrorhar inte längre attributet eller argumentetfilename. Använd istället attributet och argumentetource.configparserhar inte längre enSafeConfigParser-klass. Använd det kortare namnetConfigParseristället.configparser.ConfigParserhar 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änderdistutilsoch 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ållasetuptoolsi den byggmiljö som används för att bygga ett paket.easy_install,pkg_resources,setuptoolsochdistutilstillhandahålls inte längre som standard i miljöer som skapats medvenveller 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
filenameigzip:sgzip.GzipFile, föråldrat sedan Python 2.6, använd istället attributetname. I skrivläge lade attributetfilenametill filändelsen'.gzom den inte fanns. (Bidrag från Victor Stinner i gh-94196.)
hashlib¶
Ta bort den rena Python-implementationen av
hashlibhashlib.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
importlibhar 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_loaderochimportlib.util.module_for_loaderhar 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.ImpImporterochpkgutil.ImpLoaderhar tagits bort. (Bidrag från Barry Warsaw i gh-98040.)
imp¶
Modulen
imphar tagits bort. (Bidrag från Barry Warsaw i gh-98040.)För att migrera, se följande korrespondenstabell:
imp
importlib
imp.NullImporterInfoga
Noneisys.path_importer_cacheimp.cache_from_source()imp.find_module()imp.get_magic()imp.get_suffixes()importlib.machinery.SOURCE_SUFFIXES,importlib.machinery.EXTENSION_SUFFIXES, ochimportlib.machinery.BYTECODE_SUFFIXESimp.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
impfunktioner 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.OptimizedUnicodehar varit ett alias förstrsedan Python 3.3. Kod som tidigare satte textfabriken tillOptimizedUnicodekan antingen användastrexplicit, 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
TestCasemetodalias:Föråldrat alias
Metod Namn
Avskrivna i
failUnless3.1
failIf3.1
failUnlessEqual3.1
failIfEqual3.1
”misslyckas utan undantag nästan lika
3.1
failIfAlmostEqual3.1
failUnlessRaises3.1
assert_3.2
assertEquals3.2
assertNotEquals3.2
assertAlmostEquals3.2
assertNotAlmostEquals3.2
assertRegexpMatches3.2
assertRaisesRegexp3.2
assertNotRegexpMatches3.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.loadTestsFromModuleparameter 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.ElementTreehar ingencopy()-metod, bara en__copy__()-metod. (Bidrag från Victor Stinner i gh-94383.)
zipimport¶
Andra¶
Ta bort
suspicious-regeln från dokumentationenMakefileochDoc/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,poplibochsmtplib, 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ånValueErrortillTypeError. 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 modulensmtpdsom ä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 skickaNonefö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
osaccepterar inte längre bytesliknande sökvägar, som typernabytearrayochmemoryview: endast den exakta typenbytesaccepteras 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 ärsyslogett 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
tarfileellershutil.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_MIDDLEochFSTRING_ENDemitteras 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
typeför de tokens som skickas ut vid tokenisering av vissa ogiltiga Python-tecken som!har ändrats frånERRORTOKENtillOP.Ofullständiga enradiga strängar ger nu också upphov till
tokenize.TokenErrorpå samma sätt som ofullständiga flerradiga strängar gör.Viss ofullständig eller ogiltig Python-kod ger nu upphov till
tokenize.TokenErroristä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
threadingförväntar sig nu att modulen_threadhar ett attribut för_is_main_interpreter. Det är en funktion utan argument som returnerarTrueom 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.pyfö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-configoch 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_OPTSiMakefilefö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_REGENkrä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.basicsizekan 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_ENDochPyObject_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_OFFSETtillagd för att tillåta definition avmembersi 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_VECTORCALLtas 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_DICTochPy_TPFLAGS_MANAGED_WEAKREFhar 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 modifieraargssom 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_IsImmortalKontrollerar om ett objekt har det odödliga referensantalet.PyObject_HEAD_INITDetta kommer nu att initiera referensantalet till_Py_IMMORTAL_REFCNTnär den används medPy_BUILD_CORE.
SSTATE_INTERNED_IMMORTALEn identifierare för internerade unicode-objektsom är odödliga.
SSTATE_INTERNED_IMMORTAL_STATICEn identifierare för interned unicodeobjekt som är odödliga och statiska
sys.getunicodeinternedsizeDetta returnerar det totala antalet unicodeobjekt som har internaliserats. Detta behövs nu för att
refleak.pykorrekt 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,esochU.tp_weaklistför alla statiska inbyggda typer är alltidNULL. Detta är ett internt fält påPyTypeObjectmen 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_subclasseskanske 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_tC-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_DICTochPy_TPFLAGS_MANAGED_WEAKREFistället förtp_dictoffsetrespektivetp_weaklistoffset. Användningen avtp_dictoffsetochtp_weaklistoffsetstö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_DICTmå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 typernabytearrayochmemoryview: endast den exakta typenbytesaccepteras för bytessträngar. (Bidrag från Victor Stinner i gh-98393.)Makrona
Py_CLEAR,Py_SETREFochPy_XSETREFutvä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*-funktionerna gör, är de två inkompatibla med varandra. Det befintliga beteendet – att ignorera metaklassen för flera steg i typskapandet – är i allmänhet osäkert, eftersom (meta)klasser antar atttp_newhar anropats. 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_newi den:Om initialiseringen kan hoppas över kan den göras i
tp_initistället.Om metaklassen inte behöver instansieras från Python, sätt dess
tp_newtillNULLmed 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_newkan hoppas över på ett säkert sätt, filtrera bort deprecation-varningen medwarnings.catch_warnings()från Python.
PyOS_InputHookochPyOS_ReadlineFunctionPointeranropas 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.
PyLongObjecthar 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 avPyLongObjectsom 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_tagiPyDictObjectfö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_debugPy_VerboseFlag: användPyConfig.verbosePy_QuietFlag: användPyConfig.quietPy_InspectFlag: användPyConfig.inspectPy_NoSiteFlag: användPyConfig.site_importPy_HashRandomizationFlag: användPyConfig.use_hash_seedochPyConfig.hash_seedPy_IsolatedFlag: användPyConfig.isolatedPy_LegacyWindowsFSEncodingFlag: användPyPreConfig.legacy_windows_fs_encodingPy_LegacyWindowsStdioFlag: AnvändPyConfig.legacy_windows_stdioPy_FileSystemDefaultEncoding: AnvändPyConfig.filesystem_encodingPy_HasFileSystemDefaultEncoding: användPyConfig.filesystem_encodingPy_FileSystemDefaultEncodeErrors: AnvändPyConfig.filesystem_errorsPy_UTF8Mode: användPyPreConfig.utf8_mode(sePy_PreInitialize())
API:t
Py_InitializeFromConfig()bör användas medPyConfigistället. (Bidrag från Victor Stinner i gh-77782.)Att skapa
immutable typesmed 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 ettPyprefix 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_RESTRICTEDsom inte gör någonting.Makron
RESTRICTEDochREAD_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_ChainExceptions1istä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_tagiPyDictObjectför tilläggsmoduler (PEP 699; gh-101193).Skapar
immutable typesmed 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_UNICODEtyp ochPy_UNICODE_WIDEmakro: Användwchar_tistä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övariabelnPYTHONHOMEistä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.argvistället.PySys_SetArgv(): Ställ inPyConfig.argvistället.Py_SetProgramName(): Ställ inPyConfig.program_nameistället.Py_SetPythonHome(): Ställ inPyConfig.homeistället.PySys_ResetWarnOptions(): Rensasys.warnoptionsochwarnings.filtersistället.
API:t
Py_InitializeFromConfig()bör användas medPyConfigistället.Variabler för global konfiguration:
Py_DebugFlag: AnvändPyConfig.parser_debugellerPyConfig_Get("parser_debug")istället.Py_VerboseFlag: AnvändPyConfig.verboseellerPyConfig_Get("verbose")istället.Py_QuietFlag: AnvändPyConfig.quietellerPyConfig_Get("quiet")istället.Py_InteractiveFlag: AnvändPyConfig.interactiveellerPyConfig_Get("interactive")istället.Py_InspectFlag: AnvändPyConfig.inspectellerPyConfig_Get("inspect")istället.Py_OptimizeFlag: AnvändPyConfig.optimization_levelellerPyConfig_Get("optimization_level")istället.Py_NoSiteFlag: AnvändPyConfig.site_importellerPyConfig_Get("site_import")istället.Py_BytesWarningFlag: AnvändPyConfig.bytes_warningellerPyConfig_Get("bytes_warning")istället.Py_FrozenFlag: AnvändPyConfig.pathconfig_warningsellerPyConfig_Get("pathconfig_warnings")istället.Py_IgnoreEnvironmentFlag: AnvändPyConfig.use_environmentellerPyConfig_Get("use_environment")istället.Py_DontWriteBytecodeFlag: AnvändPyConfig.write_bytecodeellerPyConfig_Get("write_bytecode")istället.Py_NoUserSiteDirectory: AnvändPyConfig.user_site_directoryellerPyConfig_Get("user_site_directory")istället.Py_UnbufferedStdioFlag: AnvändPyConfig.buffered_stdioellerPyConfig_Get("buffered_stdio")istället.Py_HashRandomizationFlag: AnvändPyConfig.use_hash_seedochPyConfig.hash_seedellerPyConfig_Get("hash_seed")istället.Py_IsolatedFlag: AnvändPyConfig.isolatedellerPyConfig_Get("isolated")istället.Py_LegacyWindowsFSEncodingFlag: AnvändPyPreConfig.legacy_windows_fs_encodingellerPyConfig_Get("legacy_windows_fs_encoding")istället.Py_LegacyWindowsStdioFlag: AnvändPyConfig.legacy_windows_stdioellerPyConfig_Get("legacy_windows_stdio")istället.Py_FileSystemDefaultEncoding,Py_HasFileSystemDefaultEncoding: AnvändPyConfig.filesystem_encodingellerPyConfig_Get("filesystem_encoding")istället.Py_FileSystemDefaultEncodeErrors: AnvändPyConfig.filesystem_errorsellerPyConfig_Get("filesystem_errors")istället.Py_UTF8Mode: AnvändPyPreConfig.utf8_modeellerPyConfig_Get("utf8_mode")istället. (sePy_PreInitialize())
API:et
Py_InitializeFromConfig()bör användas medPyConfigfö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_shashmember: 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.hvar 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_KINDPyUnicode_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.)