Vad är nytt i Python 3.13¶
- Redigerare:
Adam Turner och Thomas Wouters
I den här artikeln förklaras de nya funktionerna i Python 3.13 jämfört med 3.12. Python 3.13 släpptes den 7 oktober 2024. För fullständig information, se changelog.
Se även
PEP 719 – Python 3.13 Utgivningsschema
Sammanfattning – Release Highlights¶
Python 3.13 är den senaste stabila versionen av programmeringsspråket Python, med en blandning av ändringar i språket, implementeringen och standardbiblioteket. De största förändringarna inkluderar en ny interaktiv tolk, experimentellt stöd för att köra i ett fritrådat läge (PEP 703) och en Just-In-Time-kompilerare (PEP 744).
Felmeddelanden fortsätter att förbättras, med spårningar nu markerade i färg som standard. Inbyggda locals()
har nu defined semantics för att ändra den returnerade mappningen, och typ-parametrar stöder nu standardvärden.
Biblioteksändringarna innehåller borttagning av föråldrade API:er och moduler, samt de vanliga förbättringarna i användarvänlighet och korrekthet. Flera äldre standardbiblioteksmoduler har nu tagits bort efter att de tagits bort i Python 3.11 (PEP 594).
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 hänvisas till dokumentationen, t.ex. Library Reference och Language Reference. För att förstå den fullständiga implementeringen och designrationalen för en förändring, se PEP för en viss ny funktion; men notera att PEP vanligtvis inte hålls uppdaterade när en funktion har implementerats fullt ut. Se Porting to Python 3.13 för vägledning om uppgradering från tidigare versioner av Python.
Förbättringar av tolkar:
En kraftigt förbättrad interaktiv tolk och förbättrade felmeddelanden.
PEP 667: Inbyggda
locals()
har nu definierad semantik vid mutation av den returnerade mappningen. Python-debuggar och liknande verktyg kan nu på ett mer tillförlitligt sätt uppdatera lokala variabler i optimerade scopes även under samtidig kodkörning.PEP 703: CPython 3.13 har experimentellt stöd för att köra med global interpreter lock inaktiverat. Se Fri-trådad CPython för mer information.
PEP 744: En grundläggande JIT-kompilator har lagts till. Den är för närvarande inaktiverad som standard (men vi kan komma att aktivera den senare). Prestandaförbättringarna är blygsamma – vi förväntar oss att förbättra detta under de kommande utgåvorna.
Färgstöd i den nya interaktiva tolken, samt i tracebacks och doctest utdata. Detta kan inaktiveras genom miljövariablerna
PYTHON_COLORS
ochNO_COLOR
.
Förbättringar av Python-datamodellen:
__static_attributes__
lagrar namnen på attribut som nås viaself.X
i valfri funktion i en klass kropp.__firstlineno__
registrerar det första radnumret i en klassdefinition.
Betydande förbättringar i standardbiblioteket:
Lägg till ett nytt
PythonFinalizationError
-undantag, som uppstår när en operation blockeras under finalization.Modulen
argparse
stöder nu föråldrade kommandoradsalternativ, positionella argument och underkommandon.De nya funktionerna
base64.z85encode()
ochbase64.z85decode()
stöder kodning och avkodning av Z85-data.Modulen
copy
har nu en funktioncopy.replace()
, med stöd för många inbyggda typer och alla klasser som definierar metoden__replace__()
.Den nya
dbm.sqlite3
-modulen är nu standarddbm
-backend.Modulen
os
har en svit av nya funktioner för att arbeta med Linux timer notification file descriptors.Modulen
random
har nu ett kommandoradsgränssnitt.
Förbättringar av säkerheten:
ssl.create_default_context()
angerssl.VERIFY_X509_PARTIAL_CHAIN
ochssl.VERIFY_X509_STRICT
som standardflaggor.
Förbättringar av C API:
Platsen
Py_mod_gil
används nu för att indikera att en tilläggsmodul stöder körning med GIL inaktiverad.PyTime C API har lagts till och ger tillgång till systemklockor.
PyMutex
är en ny lättviktig mutex som upptar en enda byte.Det finns en ny svit av funktioner för att generera PEP 669 övervakningshändelser i C API.
Nya funktioner för skrivning:
PEP 696: Typparametrar (
typing.TypeVar
,typing.ParamSpec
, ochtyping.TypeVarTuple
) stöder nu standardvärden.PEP 702: Den nya
warnings.deprecated()
-dekoratorn lägger till stöd för att markera deprecations i typsystemet och vid körning.PEP 705:
typing.ReadOnly
kan användas för att markera ett objekt i entyping.TypedDict
som skrivskyddat för typkontrollanter.PEP 742:
typing.TypeIs
ger ett mer intuitivt beteende för typbegränsning, som ett alternativ tilltyping.TypeGuard
.
Stöd för plattform:
PEP 730: Apples iOS är nu en officiellt stödd plattform, på nivå 3.
PEP 738: Android är nu en officiellt stödd plattform, på tier 3.
wasm32-wasi
stöds nu som en tier 2-plattform.wasm32-emscripten
är inte längre en officiellt stödd plattform.
Viktiga flyttningar:
PEP 594: De återstående 19 ”döda batterierna” (legacy stdlib modules) har tagits bort från standardbiblioteket:
aifc
,audioop
,cgi
,cgitb
,chunk
,crypt
,imghdr
,mailcap
,msilib
,nis
,nntplib
,ossaudiodev
,pipes
,sndhdr
,spwd
,sunau
,telnetlib
,uu
ochxdrlib
.Ta bort verktyget 2to3 och modulen
lib2to3
(föråldrad i Python 3.11).Ta bort modulen
tkinter.tix
(föråldrad i Python 3.6).Ta bort funktionen
locale.resetlocale()
.Ta bort namnrymderna
typing.io
ochtyping.re
.Ta bort kedjade
classmethod
-beskrivningar.
Ändringar i lanseringsschemat:
PEP 602 (”Årlig utgivningscykel för Python”) har uppdaterats för att förlänga perioden för fullt stöd (”bugfix”) för nya utgåvor till två år. Denna uppdaterade policy innebär att:
Python 3.9–3.12 har ett och ett halvt års full support, följt av tre och ett halvt år med säkerhetsfixar.
Python 3.13 och senare har två års full support, följt av tre års säkerhetsfixar.
Nya funktioner¶
En bättre interaktiv tolk¶
Python använder nu ett nytt interactive skal som standard, baserat på kod från PyPy project. När användaren startar REPL från en interaktiv terminal stöds nu följande nya funktioner:
Flerlinjig redigering med historiskt bevarande.
Direkt stöd för REPL-specifika kommandon som help, exit och quit, utan att behöva anropa dem som funktioner.
Prompts och tracebacks med färg aktiverad som standard.
Interaktiv hjälpsökning med F1 med en separat kommandohistorik.
History browsing using F2 that skips output as well as the >>> and … prompts.
”Paste mode” med F3 som gör det enklare att klistra in större kodblock (tryck på F3 igen för att återgå till den vanliga prompten).
Om du vill inaktivera det nya interaktiva skalet ställer du in miljövariabeln PYTHON_BASIC_REPL
. För mer information om interaktivt läge, se Interaktivt läge.
(Bidrag från Pablo Galindo Salgado, Łukasz Langa och Lysandros Nikolaou i gh-111201 baserat på kod från PyPy-projektet. Windows-stöd har tillhandahållits av Dino Viehland och Anthony Shaw)
Förbättrade felmeddelanden¶
Tolken använder nu färg som standard när den visar spårningar i terminalen. Denna funktion kan kontrolleras via den nya miljövariabeln
PYTHON_COLORS
samt de kanoniska miljövariablernaNO_COLOR
ochFORCE_COLOR
. (Bidrag från Pablo Galindo Salgado i gh-112730.)Ett vanligt misstag är att skriva ett skript med samma namn som en modul i standardbiblioteket. När detta leder till fel visar vi nu ett mer användbart felmeddelande:
$ python random.py Traceback (most recent call last): File "/home/me/random.py", line 1, in <module> import random File "/home/me/random.py", line 3, in <module> print(random.randint(5)) ^^^^^^^^^^^^^^ AttributeError: module 'random' has no attribute 'randint' (consider renaming '/home/me/random.py' since it has the same name as the standard library module named 'random' and prevents importing that standard library module)
På samma sätt visar vi ett mer användbart felmeddelande om ett skript har samma namn som en tredjepartsmodul som det försöker importera och detta leder till fel:
$ python numpy.py Traceback (most recent call last): File "/home/me/numpy.py", line 1, in <module> import numpy as np File "/home/me/numpy.py", line 3, in <module> np.array([1, 2, 3]) ^^^^^^^^ AttributeError: module 'numpy' has no attribute 'array' (consider renaming '/home/me/numpy.py' if it has the same name as a library you intended to import)
(Bidrag från Shantanu Jain i gh-95754.)
Felmeddelandet försöker nu föreslå det korrekta nyckelordsargumentet när ett felaktigt nyckelordsargument skickas till en funktion.
>>> "Better error messages!".split(max_split=1) Traceback (most recent call last): File "<python-input-0>", line 1, in <module> "Better error messages!".split(max_split=1) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^ TypeError: split() got an unexpected keyword argument 'max_split'. Did you mean 'maxsplit'?
(Bidrag från Pablo Galindo Salgado och Shantanu Jain i gh-107944.)
Fri trådad CPython¶
CPython har nu experimentellt stöd för att köras i ett fritt trådat läge, med global interpreter lock (GIL) inaktiverat. Detta är en experimentell funktion och är därför inte aktiverad som standard. Det fritt trådade läget kräver en annan körbar fil, som vanligtvis kallas python3.13t
eller python3.13t.exe
. Förbyggda binärfiler markerade som free-threaded kan installeras som en del av de officiella installationsprogrammen för Windows och macOS, eller så kan CPython byggas från källan med --disable-gil
alternativet.
Fri trådning gör det möjligt att utnyttja den tillgängliga processorkraften fullt ut genom att köra trådar parallellt på tillgängliga CPU-kärnor. Även om inte all programvara kan dra nytta av detta automatiskt, kommer program som utformats med trådning i åtanke att köras snabbare på flerkärnig maskinvara. Det fritt trådade läget är experimentellt och arbete pågår för att förbättra det: förvänta dig vissa buggar och en betydande prestandaförlust för enstaka trådar. Fri-trådade versioner av CPython stöder valfri körning med GIL aktiverad vid körning med hjälp av miljövariabeln PYTHON_GIL
eller kommandoradsalternativet -X gil=1
.
För att kontrollera om den aktuella tolken stöder free-threading, innehåller python -VV
och sys.version
”experimental free-threading build”. Den nya funktionen sys._is_gil_enabled()
kan användas för att kontrollera om GIL faktiskt är inaktiverad i den process som körs.
C-API-tilläggsmoduler måste byggas specifikt för den fritt trådade versionen. Tillägg som stöder körning med GIL inaktiverad bör använda Py_mod_gil
slot. Tillägg som använder enfasig init bör använda PyUnstable_Module_SetGIL()
för att ange om de stöder körning med GIL inaktiverad. Import av C-tillägg som inte använder dessa mekanismer kommer att leda till att GIL aktiveras, såvida inte GIL uttryckligen inaktiverats med miljövariabeln PYTHON_GIL
eller alternativet -X gil=0
. pip 24.1 eller nyare krävs för att installera paket med C-tillägg i den frittrådade byggnaden.
Detta arbete har möjliggjorts tack vare många individer och organisationer, inklusive den stora gruppen av bidragsgivare till Python och tredjepartsprojekt för att testa och möjliggöra stöd för free-threading. Anmärkningsvärda bidragsgivare inkluderar: Sam Gross, Ken Jin, Donghee Na, Itamar Oren, Matt Page, Brett Simmers, Dino Viehland, Carl Meyer, Nathan Goldbaum, Ralf Gommers, Lysandros Nikolaou och många andra. Många av dessa bidragsgivare är anställda av Meta, som har tillhandahållit betydande tekniska resurser för att stödja detta projekt.
Se även
PEP 703 ”Making the Global Interpreter Lock Optional in CPython” innehåller motivering och information om detta arbete.
Portning av tilläggsmoduler för att stödja fri trådning: En gemenskapsunderhållen portningsguide för tilläggsförfattare.
En experimentell JIT-kompilator (just-in-time)¶
När CPython konfigureras och byggs med alternativet --enable-experimental-jit
läggs en JIT-kompilator (just-in-time) till, vilket kan snabba upp vissa Python-program. I Windows använder du PCbuild/build.bat --experimental-jit
för att aktivera JIT eller --experimental-jit-interpreter
för att aktivera Tier 2-tolken. Byggkrav och ytterligare stödjande information finns i Tools/jit/README.md
.
Alternativet --enable-experimental-jit
tar dessa (valfria) värden, med standardvärdet yes
om --enable-experimental-jit
finns utan det valfria värdet.
no
: Inaktivera hela Tier 2- och JIT-pipelinen.ja
: Aktivera JIT. För att inaktivera JIT vid körning, skicka miljövariabelnPYTHON_JIT=0
.yes-off
: Bygg JIT men inaktivera den som standard. För att aktivera JIT vid körning, skicka miljövariabelnPYTHON_JIT=1
.tolk
: Aktiverar Tier 2-tolken men inaktiverar JIT. Tolken kan avaktiveras genom att köra medPYTHON_JIT=0
.
Den interna arkitekturen är ungefär som följer:
Vi börjar med specialiserad Tier 1 bytecode. Se Vad är nytt i 3.11 för detaljer.
När bytekoden på Tier 1 blir tillräckligt varm översätts den till en ny rent intern intermediär representation (IR), kallad Tier 2 IR, och ibland kallad mikro-ops (”uops”).
Tier 2 IR använder samma stackbaserade virtuella maskin som Tier 1, men instruktionsformatet är bättre lämpat för översättning till maskinkod.
Vi har flera optimeringspass för Tier 2 IR, som tillämpas innan den tolkas eller översätts till maskinkod.
Det finns en Tier 2-tolk, men den är främst avsedd för felsökning av de tidigare stegen i optimeringspipelinen. Tier 2-tolken kan aktiveras genom att konfigurera Python med
--enable-experimental-jit=interpreter
.När JIT är aktiverat översätts den optimerade Tier 2 IR till maskinkod, som sedan exekveras.
Översättningsprocessen för maskinkod använder en teknik som kallas copy-and-patch. Den har inga runtime-beroenden, men det finns ett nytt build-time-beroende av LLVM.
Se även
(JIT av Brandt Bucher, inspirerad av en artikel av Haoran Xu och Fredrik Kjolstad. Tier 2 IR av Mark Shannon och Guido van Rossum. Tier 2-optimerare av Ken Jin)
Definierad mutationssemantik för locals()
¶
Historiskt sett har det förväntade resultatet av att mutera returvärdet för locals()
lämnats till enskilda Python-implementationer att definiera. Från och med Python 3.13 standardiserar PEP 667 det historiska beteendet hos CPython för de flesta kodkörningsområden, men ändrar optimized scopes (funktioner, generatorer, coroutines, comprehensions och generatoruttryck) för att uttryckligen returnera oberoende ögonblicksbilder av de för närvarande tilldelade lokala variablerna, inklusive lokalt refererade icke-lokala variabler som fångas i closures.
Denna ändring av semantiken för locals()
i optimerade scopes påverkar även standardbeteendet för kodexekveringsfunktioner som implicit riktar sig till locals()
om inget explicit namnrymd anges (t.ex. exec()
och eval()
). I tidigare versioner var det implementationsberoende om ändringar kunde nås genom att anropa locals()
efter anrop av kodkörningsfunktionen eller inte. I CPython specifikt skulle sådan kod vanligtvis verka fungera som önskat, men kunde ibland misslyckas i optimerade scope baserat på annan kod (inklusive debuggar och verktyg för spårning av kodexekvering) som potentiellt återställde den delade ögonblicksbilden i det scope. Nu kommer koden alltid att köras mot en oberoende ögonblicksbild av de lokala variablerna i optimerade scopes, och därför kommer ändringarna aldrig att vara synliga i efterföljande anrop till locals()
. För att komma åt de ändringar som gjorts i dessa fall måste en explicit namnrymdsreferens nu skickas till den relevanta funktionen. Alternativt kan det vara klokt att uppdatera berörd kod så att den använder ett API för kodkörning på högre nivå som returnerar det resulterande namnrymden för kodkörning (t.ex. runpy.run_path()
när Python-filer körs från disk).
För att säkerställa att debuggar och liknande verktyg på ett tillförlitligt sätt kan uppdatera lokala variabler i scopes som påverkas av denna ändring, returnerar FrameType.f_locals
nu en write-through proxy till ramens lokala och lokalt refererade icke-lokala variabler i dessa scopes, i stället för att returnera en inkonsekvent uppdaterad delad dict
-instans med odefinierad körtidssemantik.
Se PEP 667 för mer information, inklusive relaterade C API-ändringar och deprecations. Portningsnoteringar finns också nedan för de berörda Python APIs och C APIs.
(PEP och implementering bidragit av Mark Shannon och Tian Gao i gh-74929. Uppdateringar av dokumentation har tillhandahållits av Guido van Rossum och Alyssa Coghlan)
Stöd för mobila plattformar¶
PEP 730: iOS är nu en plattform som stöds av PEP 11, med målen arm64-apple-ios
och arm64-apple-ios-simulator
på nivå 3 (iPhone- och iPad-enheter som släpptes efter 2013 respektive Xcode iOS-simulatorn som körs på Apple-kiselhårdvara). x86_64-apple-ios-simulator
(Xcode iOS-simulatorn som körs på äldre x86_64
-hårdvara) är inte en plattform som stöds på nivå 3, men kommer att ha bästa möjliga stöd. (PEP skriven och implementering bidragit av Russell Keith-Magee i gh-114099.)
PEP 738: Android är nu en plattform som stöds av PEP 11, med målen aarch64-linux-android
och x86_64-linux-android
på nivå 3. 32-bitars målen arm-linux-androideabi
och i686-linux-android
är inte plattformar som stöds på nivå 3, men kommer att ha stöd efter bästa förmåga. (PEP skriven och implementeringen bidragit av Malcolm Smith i gh-116622.)
Andra språkliga förändringar¶
Kompilatorn tar nu bort vanliga ledande blanksteg från varje rad i en dokumentsträng. Detta minskar storleken på bytecode cache (såsom
.pyc
-filer), med minskningar i filstorlek på cirka 5%, till exempel isqlalchemy.orm.session
från SQLAlchemy 2.0. Denna ändring påverkar verktyg som använder dokumentsträngar, t.ex.doctest
.>>> def spam(): ... """ ... This is a docstring with ... leading whitespace. ... ... It even has multiple paragraphs! ... """ ... >>> spam.__doc__ '\nThis is a docstring with\n leading whitespace.\n\nIt even has multiple paragraphs!\n'
(Bidrag från Inada Naoki i gh-81283.)
Annotation scopes inom class scopes kan nu innehålla lambdas och förståelser. Förståelser som ligger inom klass-scopes inlinas inte i sitt föräldra-scope.
class C[T]: type Alias = lambda: T
Framtida satser utlöses inte längre av relativa importer av modulen
__future__
, vilket innebär att satser av formenfrom .__future__ import ...
nu är vanliga relativa importer utan några specialfunktioner aktiverade. (Bidrag från Jeremiah Gabriel Pascual i gh-118216.)global
-deklarationer är nu tillåtna iexcept
-block när den globala används ielse
-blocket. Tidigare gav detta upphov till ett felaktigtSyntaxError
. (Bidrag från Irit Katriel i gh-111123.)Lägg till
PYTHON_FROZEN_MODULES
, en ny miljövariabel som avgör om frysta moduler ignoreras av importmaskineriet, motsvarande-X frozen_modules
kommandoradsalternativet. (Bidrag från Yilei Yang i gh-111374.)Lägg till stöd för perf-profileraren som arbetar utan rampekare genom den nya miljövariabeln
PYTHON_PERF_JIT_SUPPORT
och kommandoradsalternativet-X perf_jit
. (Bidrag från Pablo Galindo i gh-118518.)Platsen för en
.python_history
-fil kan ändras via den nyaPYTHON_HISTORY
-miljövariabeln. (Bidrag från Levi Sabah, Zackery Spytz och Hugo van Kemenade i gh-73965.)Klasser har ett nytt attribut
__static_attributes__
. Detta fylls i av kompilatorn med en tupel av klassens attributnamn som tilldelas genomself.<name>
från vilken funktion som helst i dess kropp. (Bidrag från Irit Katriel i gh-115775.)Kompilatorn skapar nu ett
__firstlineno__
-attribut på klasser med radnumret för den första raden i klassdefinitionen. (Bidrag från Serhiy Storchaka i gh-118465.)Inbyggnaderna
exec()
ocheval()
accepterar nu argumenten globals och locals som nyckelord. (Bidrag från Raphael Gaschignard i gh-105879)Inbyggda
compile()
accepterar nu en ny flagga,ast.PyCF_OPTIMIZED_AST
, som liknarast.PyCF_ONLY_AST
förutom att den returnerade AST:en optimeras enligt värdet på argumentet optimize. (Bidrag från Irit Katriel i gh-108113).Lägg till ett
__name__
-attribut påproperty
-objekt. (Bidrag från Eugene Toder i gh-101860.)Lägg till
PythonFinalizationError
, ett nytt undantag härlett frånRuntimeError
och som används för att signalera när operationer blockeras under finalization. Följande anropsbara filer ger nuPythonFinalizationError
, istället förRuntimeError
:_tråd.start_ny_tråd()
os.gaffel()
(Bidrag från Victor Stinner i gh-114570.)
Tillåt argumentet count i
str.replace()
att vara ett nyckelord. (Bidrag från Hugo van Kemenade i gh-106487.)Många funktioner avger nu en varning om ett booleskt värde skickas som ett filbeskrivningsargument. Detta kan hjälpa till att fånga upp vissa fel tidigare. (Bidrag från Serhiy Storchaka i gh-82626.)
Lade till attributen
name
ochmode
för komprimerade och arkiverade filliknande objekt i modulernabz2
,lzma
,tarfile
ochzipfile
. (Bidrag från Serhiy Storchaka i gh-115961.)
Nya moduler¶
dbm.sqlite3
: En SQLite-backend fördbm
. (Bidrag från Raymond Hettinger och Erlend E. Aasland i gh-100414.)
Förbättrade moduler¶
argparse¶
Lägg till parametern deprecated i metoderna
add_argument()
ochadd_parser()
för att aktivera föråldrade kommandoradsalternativ, positionella argument och underkommandon. (Bidrag från Serhiy Storchaka i gh-83648.)
array¶
Lägg till typkoden
'w'
(Py_UCS4
) för Unicode-tecken. Den bör användas istället för den föråldrade typkoden'u
. (Bidrag från Inada Naoki i gh-80480.)Registrera
array.array
som enMutableSequence
genom att implementera metodenclear()
. (Bidrag från Mike Zimin i gh-114894.)
ast¶
Konstruktörerna för nodtyper i modulen
ast
är nu striktare när det gäller vilka argument de accepterar, med ett mer intuitivt beteende när argument utelämnas.Om ett valfritt fält på en AST-nod inte inkluderas som ett argument när en instans konstrueras, kommer fältet nu att sättas till
None
. På samma sätt, om ett listfält utelämnas, kommer det fältet nu att sättas till en tom lista, och om ettexpr_context
-fält utelämnas, kommer det som standard att sättas tillLoad()
. (Tidigare saknades attributet i samtliga fall på den nykonstruerade AST-nodinstansen)I alla andra fall, där ett obligatoriskt argument utelämnas, kommer nodkonstruktören att avge en
DeprecationWarning
. Detta kommer att ge upphov till ett undantag i Python 3.15. På samma sätt är det nu föråldrat att skicka ett nyckelordsargument till konstruktören som inte mappar till ett fält på AST-noden och det kommer att leda till ett undantag i Python 3.15.Dessa ändringar gäller inte för användardefinierade underklasser till
ast.AST
om inte klassen väljer att använda det nya beteendet genom att definieraAST._field_types
-mappningen.(Bidrag från Jelle Zijlstra i gh-105858, gh-117486, och gh-118851.)
ast.parse()
accepterar nu ett valfritt argument optimize som skickas vidare tillcompile()
. Detta gör det möjligt att erhålla en optimerad AST. (Bidrag från Irit Katriel i gh-108113.)
asyncio¶
asyncio.as_completed()
returnerar nu ett objekt som är både en asynkron iterator och en vanlig iterator av awaitables. De awaitables som returneras av asynkron iteration inkluderar ursprungliga uppgifts- eller framtidsobjekt som skickades in, vilket gör det enklare att associera resultat med de uppgifter som slutförs. (Bidrag från Justin Arthur i gh-77714.)asyncio.loop.create_unix_server()
kommer nu automatiskt att ta bort Unix-sockeln när servern stängs. (Bidrag från Pierre Ossman i gh-111246.)DatagramTransport.sendto()
kommer nu att skicka datagram med noll längd om det anropas med ett tomt bytes-objekt. Transportflödeskontrollen tar nu också hänsyn till datagramhuvudet när buffertstorleken beräknas. (Bidrag från Jamie Phan i gh-115199.)Lägg till
Queue.shutdown
ochQueueShutDown
för att hantera köavslut. (Bidrag från Laurie Opperman och Yves Duprat i gh-104228.)Lägg till metoderna
Server.close_clients()
ochServer.abort_clients()
, som mer kraftfullt stänger en asyncio-server. (Bidrag från Pierre Ossman i gh-113538.)Accepterar en tupel av separatorer i
StreamReader.readuntil()
, och stoppar när någon av dem påträffas. (Bidrag från Bruce Merry i gh-81322.)Förbättra beteendet hos
TaskGroup
när en extern annullering kolliderar med en intern annullering. Till exempel, när två uppgiftsgrupper är nästlade och båda upplever ett undantag i en underordnad uppgift samtidigt, var det möjligt att den yttre uppgiftsgruppen skulle hänga sig, eftersom dess interna annullering svaldes av den inre uppgiftsgruppen.I det fall en uppgiftsgrupp avbryts externt och även måste skapa en
ExceptionGroup
, kommer den nu att anropa den överordnade uppgiftenscancel()
-metod. Detta säkerställer att ettCancelledError
kommer att uppstå vid nästaawait
, så att annulleringen inte går förlorad.En extra fördel med dessa ändringar är att uppgiftsgrupper nu bevarar antalet avbokningar (
cancelling()
).För att hantera vissa hörnfall kan
uncancel()
nu återställa den odokumenterade flaggan_must_cancel
när antalet avbokningar når noll.(Inspirerad av ett problem som rapporterades av Arthur Tacca i gh-116720.)
När
TaskGroup.create_task()
anropas på en inaktivTaskGroup
, kommer den givna coroutinen att stängas (vilket förhindrar enRuntimeWarning
om att den givna coroutinen aldrig väntas). (Bidrag från Arthur Tacca och Jason Zhang i gh-115957.)Funktionen och metoderna med namnet
create_task
har fått ett nytt argument**kwargs
som skickas vidare till uppgiftskonstruktorn. Denna ändring lades till av misstag i 3.13.3 och bröt API-avtalet för anpassade uppgiftsfabriker. Flera tredjeparts uppgiftsfabriker implementerade lösningar för detta. I 3.13.4 och senare utgåvor respekteras det gamla fabriksavtalet återigen (fram till 3.14). För att lösningarna ska fortsätta fungera tillåter det extra argumentet**kwargs
fortfarande att ytterligare nyckelordsargument skickas tillTask
och till anpassade uppgiftsfabriker.Detta påverkar följande funktioner och metoder:
asyncio.create_task()
,asyncio.loop.create_task()
,asyncio.TaskGroup.create_task()
. (Bidrag från Thomas Grainger i gh-128307.)
base64¶
Lägg till funktionerna
z85encode()
ochz85decode()
för kodning avbytes
som Z85 data och avkodning av Z85-kodade data tillbytes
. (Bidrag från Matan Perelman i gh-75299.)
compileall¶
Standardantalet arbetstrådar och processer väljs nu med hjälp av
os.process_cpu_count()
istället föros.cpu_count()
. (Bidrag från Victor Stinner i gh-109649.)
concurrent.futures¶
Standardantalet arbetstrådar och processer väljs nu med hjälp av
os.process_cpu_count()
istället föros.cpu_count()
. (Bidrag från Victor Stinner i gh-109649.)
configparser¶
ConfigParser
har nu stöd för icke namngivna sektioner, vilket möjliggör nyckel-värdepar på toppnivå. Detta kan aktiveras med den nya parametern allow_unnamed_section. (Bidrag från Pedro Sousa Lacerda i gh-66449.)
kopiera¶
Den nya funktionen
replace()
ochreplace protocol
gör det mycket enklare att skapa modifierade kopior av objekt. Detta är särskilt användbart när man arbetar med oföränderliga objekt. Följande typer stöder funktionenreplace()
och implementerar replace-protokollet:kollektioner.namntuple()
Alla användardefinierade klasser kan också stödja
copy.replace()
genom att definiera metoden__replace__()
. (Bidrag från Serhiy Storchaka i gh-108751.)
ctyper¶
Som en följd av en nödvändig intern refaktorisering sker initialiseringen av interna metaklasser nu i
__init__
i stället för i__new__
. Detta påverkar projekt som underklassar dessa interna metaklasser för att tillhandahålla anpassad initialisering. I allmänhet:Anpassad logik som gjordes i
__new__
efter anrop avsuper().__new__
bör flyttas till__init__
.För att skapa en klass anropar du metaklassen, inte bara metaklassens metod
__new__
.
Se gh-124520 för diskussion och länkar till ändringar i vissa berörda projekt.
ctypes.Structure
-objekt har ett nytt_align_
-attribut som gör det möjligt att explicit ange inriktningen för den struktur som packas till/från minnet. (Bidrag från Matt Sanderson i gh-112433)
dbm¶
Lägg till
dbm.sqlite3
, en ny modul som implementerar en SQLite-backend, och gör den till standarddbm
-backend. (Bidrag från Raymond Hettinger och Erlend E. Aasland i gh-100414.)Gör det möjligt att ta bort alla objekt från databasen genom de nya metoderna
gdbm.clear()
ochndbm.clear()
. (Bidrag från Donghee Na i gh-107122.)
dis¶
Ändra utdata för modulfunktionerna
dis
så att logiska etiketter för hoppmål och undantagshanterare visas i stället för offsets. Offseten kan läggas till med det nya kommandoradsalternativet-O
eller argumentet show_offsets. (Bidrag från Irit Katriel i gh-112137.)get_instructions()
representerar inte längre cacheposter som separata instruktioner. Istället returneras de som en del avInstruction
, i det nya fältet cache_info. Argumentet show_caches tillget_instructions()
är föråldrat och har inte längre någon effekt. (Bidrag från Irit Katriel i gh-112962.)
doctest¶
doctest
-utdata är nu färgade som standard. Detta kan kontrolleras via den nya miljövariabelnPYTHON_COLORS
samt de kanoniska miljövariablernaNO_COLOR
ochFORCE_COLOR
. Se även Styrning av färg. (Bidrag från Hugo van Kemenade i gh-117225.)Metoden
DocTestRunner.run()
räknar nu antalet överhoppade tester. Lägg till attributenDocTestRunner.skips
ochTestResults.skipped
. (Bidrag från Victor Stinner i gh-108794.)
e-post¶
Rubriker med inbäddade nya linjer citeras nu vid utmatning.
generator
vägrar nu att serialisera (skriva) rubriker som är felaktigt vikta eller avgränsade, så att de skulle tolkas som flera rubriker eller sammanfogas med angränsande data. Om du behöver stänga av den här säkerhetsfunktionen, angeverify_generated_headers
. (Bidrag från Bas Bloemsaat och Petr Viktorin i gh-121650.)getaddresses()
ochparseaddr()
returnerar nu('', ''')
par i fler situationer där ogiltiga e-postadresser påträffas istället för potentiellt felaktiga värden. De två funktionerna har en ny valfri strict-parameter (standardTrue
). För att få det gamla beteendet (acceptera felaktig inmatning), användstrict=False
.getattr(email.utils, 'supports_strict_parsing', False)
kan användas för att kontrollera om parametern strict är tillgänglig. (Bidrag från Thomas Dwyer och Victor Stinner för gh-102988 för att förbättra CVE 2023-27043-fixen)
enum¶
fraktioner¶
Fraction
-objekt stöder nu standard format specification mini-language-reglerna för fyllning, justering, teckenhantering, minsta bredd och gruppering. (Bidrag från Mark Dickinson i gh-111320.)
klot¶
Lägg till
translate()
, en funktion för att konvertera en sökvägsspecifikation med jokertecken i shell-stil till ett reguljärt uttryck. (Bidrag från Barney Gale i gh-72904.)
importlib¶
Följande funktioner i
importlib.resources
tillåter nu åtkomst till en katalog (eller ett träd) med resurser, med hjälp av flera positionella argument (argumenten encoding och errors i textläsningsfunktionerna är nu endast nyckelord):Dessa funktioner är inte längre föråldrade och är inte planerade att tas bort. (Bidrag från Petr Viktorin i gh-116608.)
contents()
är fortfarande föråldrad till förmån för det fullt utrustadeTraversable
API:et. Det finns dock nu ingen plan på att ta bort det. (Bidrag från Petr Viktorin i gh-116608.)
io¶
Finalizern
IOBase
loggar nu alla fel som uppstår i metodenclose()
medsys.unraisablehook
. Tidigare ignorerades fel tyst som standard, och loggades endast i Python Development Mode eller när man använde en Python debug build. (Bidrag från Victor Stinner i gh-62948.)
ipadress¶
Lägg till egenskapen
IPv4Address.ipv6_mapped
, som returnerar den IPv4-mappade IPv6-adressen. (Bidrag från Charles Machalow i gh-109466.)Åtgärdat
is_global
ochis_private
beteende iIPv4Address
,IPv6Address
,IPv4Network
, ochIPv6Network
. (Bidrag från Jakub Stasiak i gh-113171.)
itertools¶
batched()
har en ny strict parameter, som ger upphov till ettValueError
om den slutliga batchen är kortare än den angivna batchstorleken. (Bidrag från Raymond Hettinger i gh-113202.)
marshal¶
Lägg till parametern allow_code i modulfunktioner. Genom att ange
allow_code=False
förhindras serialisering och de-serialisering av kodobjekt som är inkompatibla mellan Python-versioner. (Bidrag från Serhiy Storchaka i gh-113626.)
matematik¶
Den nya funktionen
fma()
utför sammanslagna multiplicerings- och additionsoperationer. Detta beräknarx * y + z
med endast en enda omgång, och undviker sålunda någon mellanliggande förlust av precision. Den omsluter funktionenfma()
som tillhandahålls av C99 och följer specifikationen för IEEE 754 ”fusedMultiplyAdd”-operationen för specialfall. (Bidrag från Mark Dickinson och Victor Stinner i gh-73468.)
mimetyper¶
Lägg till funktionen
guess_file_type()
för att gissa en MIME-typ från en filsystemssökväg. Att använda sökvägar medguess_type()
är nu soft deprecated. (Bidrag från Serhiy Storchaka i gh-66543.)
mmap¶
mmap
är nu skyddad från att krascha i Windows när det mappade minnet är otillgängligt på grund av filsystemfel eller accessöverträdelser. (Bidrag från Jannis Weigend i gh-118209.)mmap
har en nyseekable()
-metod som kan användas när ett sökbart filliknande objekt krävs. Metodenseek()
returnerar nu den nya absoluta positionen. (Bidrag från Donghee Na och Sylvie Liberman i gh-111835.)Den nya UNIX-parametern trackfd för
mmap
kontrollerar duplicering av filbeskrivare; om den är falsk kommer filbeskrivaren som anges av fileno inte att dupliceras. (Bidrag från Zackery Spytz och Petr Viktorin i gh-78502.)
multiprocessing¶
Standardantalet arbetstrådar och processer väljs nu med hjälp av
os.process_cpu_count()
istället föros.cpu_count()
. (Bidrag från Victor Stinner i gh-109649.)
os¶
Lägg till funktionen
process_cpu_count()
för att få fram antalet logiska processorkärnor som kan användas av den anropande tråden i den aktuella processen. (Bidrag från Victor Stinner i gh-109649.)cpu_count()
ochprocess_cpu_count()
kan åsidosättas med den nya miljövariabelnPYTHON_CPU_COUNT
eller det nya kommandoradsalternativet-X cpu_count
. Detta alternativ är användbart för användare som behöver begränsa CPU-resurserna i ett containersystem utan att behöva modifiera programkoden eller själva containern. (Bidrag från Donghee Na i gh-109595.)Lägg till ett lågnivågränssnitt till Linux timer file descriptors via
timerfd_create()
,timerfd_settime()
,timerfd_settime_ns()
,timerfd_gettime()
,timerfd_gettime_ns()
,TFD_NONBLOCK
,TFD_CLOEXEC
,TFD_TIMER_ABSTIME
, ochTFD_TIMER_CANCEL_ON_SET
(Bidrag från Masaru Tsuchiyama i gh-108277.)lchmod()
och argumentet follow_symlinks ichmod()
är nu båda tillgängliga i Windows. Observera att standardvärdet för follow_symlinks ilchmod()
ärFalse
i Windows. (Bidrag från Serhiy Storchaka i gh-59616.)fchmod()
och stöd för filbeskrivare ichmod()
är nu båda tillgängliga i Windows. (Bidrag från Serhiy Storchaka i gh-113191.)I Windows har
mkdir()
ochmakedirs()
nu stöd för att skicka ett mode-värde på0o700
för att tillämpa åtkomstkontroll på den nya katalogen. Detta påverkar implicittempfile.mkdtemp()
och är en begränsning av CVE 2024-4030. Andra värden för mode fortsätter att ignoreras. (Bidrag från Steve Dower i gh-118486.)posix_spawn()
accepterar nuNone
för argumentet env, vilket gör att den nyligen skapade processen använder den aktuella processmiljön. (Bidrag från Jakub Kulik i gh-113119.)posix_spawn()
kan nu använda attributetPOSIX_SPAWN_CLOSEFROM
i parametern file_actions på plattformar som stöderposix_spawn_file_actions_addclosefrom_np()
. (Bidrag från Jakub Kulik i gh-113117.)
os.sökväg¶
Lägg till
isreserved()
för att kontrollera om en sökväg är reserverad i det aktuella systemet. Denna funktion är endast tillgänglig på Windows. (Bidrag från Barney Gale i gh-88569.)I Windows anser
isabs()
inte längre att sökvägar som börjar med exakt ett snedstreck (\``eller ``/
) är absoluta. (Bidrag från Barney Gale och Jon Foster i gh-44626.)realpath()
löser nu filnamn i MS-DOS-stil även om filen inte är tillgänglig. (Bidrag från Moonsik Park i gh-82367.)
sökväg¶
Lägg till
UnsupportedOperation
, som visas i stället förNotImplementedError
när en sökvägsoperation inte stöds. (Bidrag från Barney Gale i gh-89812.)Lägg till en ny konstruktör för att skapa
Path
-objekt från ’fil’-URI:er (file:///
),Path.from_uri()
. (Bidrag från Barney Gale i gh-107465.)Lägg till
PurePath.full_match()
för matchning av sökvägar med jokertecken i shell-stil, inklusive det rekursiva jokertecknet ”**
”. (Bidrag från Barney Gale i gh-73435.)Lägg till klassattributet
PurePath.parser
för att lagra implementeringen avos.path
som används för lågnivåanalys och sammanfogning av sökvägar. Detta kommer att vara antingenposixpath
ellerntpath
.Lägg till recurse_symlinks endast nyckelordsargument till
Path.glob()
ochrglob()
. (Bidrag från Barney Gale i gh-77609.)Path.glob()
ochrglob()
returnerar nu filer och kataloger när de får ett mönster som slutar med ”**
”. Tidigare returnerades endast kataloger. (Bidrag från Barney Gale i gh-70303.)Lägg till argumentet follow_symlinks med endast nyckelord till
Path.is_file
,Path.is_dir
,Path.owner()
ochPath.group()
. (Bidrag från Barney Gale i gh-105793 och Kamil Turek i gh-107962.)
pdb¶
breakpoint()
ochset_trace()
går nu in i felsökaren omedelbart i stället för på nästa kodrad som ska exekveras. Denna ändring förhindrar att felsökaren bryts utanför kontexten närbreakpoint()
är placerad i slutet av kontexten. (Bidrag från Tian Gao i gh-118579.)sys.path[0]
ersätts inte längre av katalogen för det skript som felsöks närsys.flags.safe_path
är inställd. (Bidrag från Tian Gao och Christian Walther i gh-111762.)zipapp
stöds nu som ett felsökningsmål. (Bidrag från Tian Gao i gh-118501.)Lägg till möjligheten att flytta mellan kedjade undantag under post-mortem-felsökning i
pm()
med det nya kommandotexceptions [exc_number]
för Pdb. (Bidrag från Matthias Bussonnier i gh-106676.)Uttryck och satser vars prefix är ett pdb-kommando identifieras och exekveras nu korrekt. (Bidrag från Tian Gao i gh-108464.)
kö¶
Lägg till
Queue.shutdown
ochShutDown
för att hantera köavslut. (Bidrag från Laurie Opperman och Yves Duprat i gh-104750.)
slumpvis¶
Lägg till ett kommandoradsgränssnitt. (Bidrag från Hugo van Kemenade i gh-118131.)
re¶
Byt namn på
re.error
tillPatternError
för ökad tydlighet.re.error
behålls för bakåtkompatibilitet.
shutil¶
plats¶
.pth
-filer avkodas nu först med UTF-8, och sedan med locale encoding om UTF-8-avkodningen misslyckas. (Bidrag från Inada Naoki i gh-117802.)
sqlite3¶
En
ResourceWarning
skickas nu ut om ettConnection
-objekt inteclosed
explicit. (Bidrag från Erlend E. Aasland i gh-105539.)Lägg till parametern filter med endast nyckelord till
Connection.iterdump()
för filtrering av databasobjekt som ska dumpas. (Bidrag från Mariusz Felisiak i gh-91602.)
ssl¶
API:et
create_default_context()
inkluderar nuVERIFY_X509_PARTIAL_CHAIN
ochVERIFY_X509_STRICT
i sina standardflaggor.Anteckning
VERIFY_X509_STRICT
kan avvisa pre-RFC 5280 eller missbildade certifikat som den underliggande OpenSSL-implementationen annars skulle kunna acceptera. Det är inte rekommenderat att inaktivera detta, men du kan göra det genom att använda:import ssl ctx = ssl.create_default_context() ctx.verify_flags &= ~ssl.VERIFY_X509_STRICT
(Bidrag från William Woodruff i gh-112389.)
statistik¶
Lägg till
kde()
för skattning av kärntäthet. Detta gör det möjligt att skatta en kontinuerlig sannolikhetstäthetsfunktion från ett fast antal diskreta prover. (Bidrag från Raymond Hettinger i gh-115863.)Lägg till
kde_random()
för provtagning från en uppskattad sannolikhetstäthetsfunktion skapad avkde()
. (Bidrag från Raymond Hettinger i gh-115863.)
delprocess¶
Modulen
subprocess
använder nu funktionenposix_spawn()
i fler situationer.När close_fds är
True
(standard) kommerposix_spawn()
att användas när C-biblioteket tillhandahållerposix_spawn_file_actions_addclosefrom_np()
, vilket inkluderar de senaste versionerna av Linux, FreeBSD och Solaris. På Linux bör detta fungera på liknande sätt som den befintliga Linuxvfork()
-baserade koden.En privat kontrollknapp
subprocess._USE_POSIX_SPAWN
kan sättas tillFalse
om du behöver tvingasubprocess
att aldrig användaposix_spawn()
. Rapportera din anledning och plattformsdetaljer i issue tracker om du ställer in detta så att vi kan förbättra vår API-valslogik för alla. (Bidrag från Jakub Kulik i gh-113117.)
system¶
Lägg till funktionen
_is_interned()
för att testa om en sträng har internerats. Det är inte säkert att den här funktionen finns i alla implementationer av Python. (Bidrag från Serhiy Storchaka i gh-78573.)
tempfil¶
I Windows begränsar standardläget
0o700
som används avtempfile.mkdtemp()
nu åtkomsten till den nya katalogen på grund av ändringar ios.mkdir()
. Detta är en begränsning av CVE 2024-4030. (Bidrag från Steve Dower i gh-118486.)
tid¶
I Windows använder
monotonic()
nu klockanQueryPerformanceCounter()
med en upplösning på 1 mikrosekund, istället för klockanGetTickCount64()
som har en upplösning på 15,6 millisekunder. (Bidrag från Victor Stinner i gh-88494.)I Windows använder
time()
nu klockanGetSystemTimePreciseAsFileTime()
med en upplösning på 1 mikrosekund, istället för klockanGetSystemTimeAsFileTime()
som har en upplösning på 15,6 millisekunder. (Bidrag från Victor Stinner i gh-63207.)
tkinter¶
Lägg till
tkinter
widgetmetoder:tk_busy_hold()
,tk_busy_configure()
,tk_busy_cget()
,tk_busy_forget()
,tk_busy_current()
, ochtk_busy_status()
. (Bidrag från Miguel, klappnase och Serhiy Storchaka i gh-72684.)Widgetmetoden
tkinter
wm_attributes()
accepterar nu attributnamnet utan minusprefixet för att få fönsterattribut, till exempelw.wm_attributes('alpha')
och tillåter att attribut och värden anges som nyckelordsargument, till exempelw.wm_attributes(alpha=0.5)
. (Bidrag från Serhiy Storchaka i gh-43457.)wm_attributes()
kan nu returnera attribut som endict
, genom att använda den nya valfria parametern return_python_dict, som endast innehåller nyckelord. (Bidrag från Serhiy Storchaka i gh-43457.)Text.count()
kan nu returnera en enkelint
när den nya valfria parametern return_ints används. Annars returneras den enskilda räkningen som en 1-tupel ellerNone
. (Bidrag från Serhiy Storchaka i gh-97928.)Stöd för elementtypen ”vsapi” i metoden
element_create()
itkinter.ttk.Style
. (Bidrag från Serhiy Storchaka i gh-68166.)Lägg till
after_info()
-metoden för Tkinter-widgetar. (Bidrag från Cheryl Sabella i gh-77020.)Lägg till en ny
copy_replace()
-metod tillPhotoImage
för att kopiera en region från en bild till en annan, eventuellt med pixelzoomning, subsampling eller båda. (Bidrag från Serhiy Storchaka i gh-118225.)Lägg till parametern from_coords i
PhotoImage
-metodernacopy()
,zoom()
ochsubsample()
. Lägg till parametrarna zoom och subsample iPhotoImage
-metodencopy()
. (Bidrag från Serhiy Storchaka i gh-118225.)Lägg till
PhotoImage
-metodernaread()
för att läsa en bild från en fil ochdata()
för att hämta bilddata. Lägg till parametrarna background och grayscale i metodenwrite()
. (Bidrag från Serhiy Storchaka i gh-118271.)
spårning¶
Lägg till attributet
exc_type_str
tillTracebackException
, som innehåller en strängvisning av exc_type. Utgå från attributetexc_type
, som innehåller själva typobjektet. Lägg till parametern save_exc_type (standardTrue
) för att ange omexc_type
ska sparas. (Bidrag från Irit Katriel i gh-112332.)Lägg till en ny show_group parameter med nyckelord endast till
TracebackException.format_exception_only()
för att (rekursivt) formatera de nästlade undantagen i enBaseExceptionGroup
-instans. (Bidrag från Irit Katriel i gh-105292.)
typer¶
SimpleNamespace
kan nu ta ett enda positionellt argument för att initiera namnrymdens argument. Detta argument måste antingen vara en mappning eller en iterabel av nyckel-värde-par. (Bidrag från Serhiy Storchaka i gh-108191.)
typing¶
PEP 705: Lägg till
ReadOnly
, en speciell typningskonstruktion för att markera ettTypedDict
-objekt som skrivskyddat för typkontrollanter.PEP 742: Lägg till
TypeIs
, en typkonstruktion som kan användas för att instruera en typkontrollant hur en typ ska begränsas.Lägg till
NoDefault
, ett sentinel-objekt som används för att representera standardvärdena för vissa parametrar i modulentyping
. (Bidrag från Jelle Zijlstra i gh-116126.)Lägg till
get_protocol_members()
för att returnera uppsättningen medlemmar som definierar entyping.Protocol
. (Bidrag från Jelle Zijlstra i gh-104873.)Lägg till
is_protocol()
för att kontrollera om en klass är enProtocol
. (Bidrag från Jelle Zijlstra i gh-104873.)ClassVar
kan nu nestas iFinal
, och vice versa. (Bidrag från Mehdi Drissi i gh-89547.)
unicodedata¶
Uppdatera Unicode-databasen till `version 15.1.0`__. (Bidrag från James Gerity i gh-109559.)
ven¶
Lägg till stöd för att skapa ignoreringsfiler för SCM (Source Control Management) i en virtuell miljös katalog. Som standard stöds Git. Detta implementeras som opt-in via API:et, som kan utökas för att stödja andra SCM:er (
EnvBuilder
ochcreate()
), och opt-out via CLI, med--without-scm-ignore-files
. (Bidrag från Brett Cannon i gh-108125.)
varningar¶
PEP 702: Den nya
warnings.deprecated()
dekoratorn ger ett sätt att kommunicera deprecations till en statisk typkontroll och att varna för användning av deprecated klasser och funktioner. EnDeprecationWarning
kan också sändas ut när en dekorerad funktion eller klass används vid körning. (Bidrag från Jelle Zijlstra i gh-104003.)
xml¶
Tillåt kontroll av Expat >=2.6.0 reparse deferral (CVE 2023-52425) genom att lägga till fem nya metoder:
xml.sax.expatreader.ExpatParser.flush()
(Bidrag från Sebastian Pipping i gh-115623.)
Lägg till metoden
close()
för iteratorn som returneras aviterparse()
för explicit rensning. (Bidrag från Serhiy Storchaka i gh-69893.)
zipimport¶
Optimeringar¶
Flera standardbiblioteksmoduler har fått sina importtider avsevärt förbättrade. Till exempel har importtiden för modulen
typing
minskats med ungefär en tredjedel genom att ta bort beroenden avre
ochcontextlib
. Andra moduler som har fått snabbare importtid äremail.utils
,enum
,functools
,importlib.metadata
ochthreading
. (Bidrag från Alex Waygood, Shantanu Jain, Adam Turner, Daniel Hollas, och andra i gh-109653.)textwrap.indent()
är nu cirka 30% faster än tidigare för stora inmatningar. (Bidrag från Inada Naoki i gh-107369.)Modulen
subprocess
använder nu funktionenposix_spawn()
i fler situationer, inklusive när close_fds ärTrue
(standard) på många moderna plattformar. Detta bör ge en märkbar prestandaökning när processer startas på FreeBSD och Solaris. Se avsnittet subprocess ovan för detaljer. (Bidrag från Jakub Kulik i gh-113117.)
Borttagna moduler och API:er¶
PEP 594: Ta bort ”döda batterier” från standardbiblioteket¶
PEP 594 föreslog att 19 moduler skulle tas bort från standardbiblioteket, i dagligt tal kallade ”döda batterier” på grund av deras historiska, föråldrade eller osäkra status. Alla följande moduler var föråldrade i Python 3.11 och tas nu bort:
aifc`
standard-aifc: Använd omfördelningen av biblioteket
aifc
från PyPI.
audioop
audioop-lts: Använd biblioteket
audioop-lts
från PyPI.
chunk
standard-chunk: Använd omfördelningen av biblioteket
chunk
från PyPI.
cgi
ochcgitb
cgi.FieldStorage
kan vanligtvis ersättas medurllib.parse.parse_qsl()
förGET
ochHEAD
förfrågningar, ochemail.message
-modulen eller multipart-biblioteket förPOST
ochPUT
förfrågningar.cgi.parse()
kan ersättas genom att anropaurllib.parse.parse_qs()
direkt på den önskade frågesträngen, såvida inte indata ärmultipart/form-data
, som bör ersättas enligt beskrivningen nedan förcgi.parse_multipart()
.cgi.parse_header()
kan ersättas med funktionaliteten i paketetemail
, som implementerar samma MIME RFC:er. Till exempel medemail.message.EmailMessage
:from email.message import EmailMessage msg = EmailMessage() msg['content-type'] = 'application/json; charset="utf8"' main, params = msg.get_content_type(), msg['content-type'].params
cgi.parse_multipart()
kan ersättas med funktionaliteten i paketetemail
, som implementerar samma MIME RFC:er, eller med biblioteket multipart. Till exempel klassernaemail.message.EmailMessage
ochemail.message.Message
.standard-cgi: och standard-cgitb: Använd omfördelningen av biblioteken
cgi
ochcgitb
från PyPI.
crypt
och det privata tillägget_crypt
. Modulenhashlib
kan vara en lämplig ersättning när det bara krävs hashning av ett värde. Annars finns olika tredjepartsbibliotek på PyPI tillgängliga:bcrypt: Modern lösenordshashing för din programvara och dina servrar.
passlib: Omfattande ramverk för hashing av lösenord med stöd för över 30 system.
argon2-cffi: Den säkra lösenordshashingalgoritmen Argon2.
legacycrypt:
ctypes
omslag till POSIX crypt-biblioteksanropet och tillhörande funktionalitet.crypt_r: Förgrening av modulen
crypt
, omslag till biblioteksanropet crypt_r(3) och tillhörande funktionalitet.standard-crypt och deprecated-crypt-alternative: Använd omfördelningen av
crypt
och återimplementeringen av_crypt
-biblioteken från PyPI.
imghdr
: Biblioteken filetype, puremagic eller python-magic bör användas som ersättare. Till exempel kan funktionenpuremagic.what()
användas för att ersätta funktionenimghdr.what()
för alla filformat som stöddes avimghdr
.standard-imghdr: Använd omfördelningen av biblioteket
imghdr
från PyPI.
mailcap
: Använd modulenmimetypes
istället.standard-mailcap: Använd omfördelningen av
mailcap
-biblioteket från PyPI.
msilib
nis
nntplib
: Använd istället biblioteket pynntp från PyPI.standard-nntplib: Använd omfördelningen av biblioteket
nntplib
från PyPI.
ossaudiodev
: För uppspelning av ljud, använd istället biblioteket pygame från PyPI.pipes
: Använd modulensubprocess
istället. Användshlex.quote()
för att ersätta den odokumenterade funktionenpipes.quote
.standard-pipes: Använd omfördelningen av biblioteket
pipes
från PyPI.
sndhdr
: Biblioteken filetype, puremagic eller python-magic bör användas som ersättare.standard-sndhdr: Använd omfördelningen av biblioteket
sndhdr
från PyPI.
spwd
: Använd biblioteket python-pam från PyPI istället.sunau
standard-sunau: Använd omfördelningen av biblioteket
sunau
från PyPI.
telnetlib
, Använd istället biblioteken telnetlib3 eller Exscript från PyPI.standard-telnetlib: Använd omfördelningen av biblioteket
telnetlib
från PyPI.
uu
: Använd modulenbase64
istället, som ett modernt alternativ.standard-uu: Använd omfördelningen av biblioteket
uu
från PyPI.
xdrlib
standard-xdrlib: Använd omfördelningen av biblioteket
xdrlib
från PyPI.
(Bidrag från Victor Stinner och Zachary Ware i gh-104773 och gh-104780.)
2to3¶
Ta bort programmet 2to3 och modulen
lib2to3
, som tidigare var föråldrade i Python 3.11. (Bidrag från Victor Stinner i gh-104780.)
inbyggda¶
Ta bort stöd för kedjade
classmethod
-beskrivare (introducerat i gh-63272). Dessa kan inte längre användas för att omsluta andra deskriptorer, t.ex.property
. Grunddesignen för denna funktion var bristfällig och ledde till flera problem. För att ”pass-through” enclassmethod
, överväg att använda attributet__wrapped__
som lades till i Python 3.10. (Bidrag från Raymond Hettinger i gh-89519.)Utlöser ett
RuntimeError
när man anroparframe.clear()
på en avbruten ram (vilket alltid har varit fallet för en exekverande ram). (Bidrag från Irit Katriel i gh-79932.)
configparser¶
Ta bort den odokumenterade
LegacyInterpolation
-klassen, som är föråldrad i dokumentsträngen sedan Python 3.2 och vid körning sedan Python 3.11. (Bidrag från Hugo van Kemenade i gh-104886.)
importlib.metadata¶
Ta bort föråldrad subscript (
__getitem__()
) åtkomst för EntryPoint objekt. (Bidrag från Jason R. Coombs i gh-113175.)
lokal¶
Ta bort
locale.resetlocale()
-funktionen, föråldrad i Python 3.11. Användlocale.setlocale(locale.LC_ALL, "")
istället. (Bidrag från Victor Stinner i gh-104783.)
opkod¶
Flytta
opcode.ENABLE_SPECIALIZATION
till_opcode.ENABLE_SPECIALIZATION
. Detta fält lades till i 3.12, det dokumenterades aldrig och är inte avsett för extern användning. (Bidrag från Irit Katriel i gh-105481.)Ta bort
opcode.is_pseudo()
,opcode.MIN_PSEUDO_OPCODE
, ochopcode.MAX_PSEUDO_OPCODE
, som lades till i Python 3.12, men varken dokumenterades eller exponerades genomdis
, och var inte avsedda att användas externt. (Bidrag från Irit Katriel i gh-105481.)
optparse¶
Denna modul anses inte längre vara soft deprecated. Medan
argparse
fortfarande är att föredra för nya projekt som inte använder ett tredjeparts kommandoradsargumentbehandlingsbibliotek, finns det aspekter av hurargparse
fungerar som innebär att den lägre modulenoptparse
kan ge en bättre grund för att skriva argumentbehandlingsbibliotek och för att implementera kommandoradsapplikationer som mer strikt änargparse
följer olika Unix kommandoradsbehandlingskonventioner som har sitt ursprung i beteendet hos Cgetopt()
-funktionen . (Bidrag från Alyssa Coghlan och Serhiy Storchaka i gh-126180.)
sökväg¶
re¶
Ta bort den odokumenterade, föråldrade och trasiga funktionen
re.template()
och flagganre.TEMPLATE
/re.T
. (Bidrag från Serhiy Storchaka och Nikita Sobolev i gh-105687.)
tkinter.tix¶
Ta bort
tkinter.tix
-modulen, föråldrad i Python 3.6. Tix-biblioteket från tredje part som modulen omslöt underhålls inte längre. (Bidrag från Zachary Ware i gh-75552.)
sköldpadda¶
Ta bort metoden
RawTurtle.settiltangle()
, som är föråldrad i dokumentationen sedan Python 3.1 och i körtid sedan Python 3.11. (Bidrag från Hugo van Kemenade i gh-104876.)
typing¶
Ta bort namnrymderna
typing.io
ochtyping.re
, föråldrade sedan Python 3.8. Objekten i dessa namnrymder kan importeras direkt från modulentyping
. (Bidrag från Sebastian Rittau i gh-92871.)Ta bort nyckelordsargumentmetoden för att skapa
TypedDict
-typer, föråldrad i Python 3.11. (Bidrag från Tomas Roun i gh-104786.)
unittest¶
Ta bort följande
unittest
-funktioner, föråldrade i Python 3.11:unittest.findTestCases()
unittest.makeSuite()
unittest.getTestCaseNames()
Använd istället
TestLoader
-metoder:(Bidrag från Hugo van Kemenade i gh-104835.)
Ta bort den otestade och odokumenterade
TestProgram.usageExit()
-metoden, föråldrad i Python 3.11. (Bidrag från Hugo van Kemenade i gh-104992.)
urllib¶
Ta bort parametrarna cafile, capath och cadefault i funktionen
urllib.request.urlopen()
, föråldrad i Python 3.6. Använd istället parametern context med en instans avSSLContext
. Funktionenssl.SSLContext.load_cert_chain()
kan användas för att ladda specifika certifikat eller låtassl.create_default_context()
välja operativsystemets betrodda certifikat från certifikatutfärdaren (CA). (Bidrag från Victor Stinner i gh-105382.)
webbläsare¶
Ta bort den otestade och odokumenterade
MacOSX
-klassen, utfasad i Python 3.11. AnvändMacOSXOSAScript
-klassen (introducerad i Python 3.2) istället. (Bidrag från Hugo van Kemenade i gh-104804.)Ta bort det föråldrade attributet
MacOSXOSAScript._name
. Använd istället attributetMacOSXOSAScript.name
. (Bidrag från Nikita Sobolev i gh-105546.)
Nya utfasningar¶
-
Avveckla den odokumenterade funktionen
SetPointerType()
, som kommer att tas bort i Python 3.15. (Bidrag från Victor Stinner i gh-105733.)Soft-deprecate funktionen
ARRAY()
till förmån för multiplikation avtyp * längd
. (Bidrag från Victor Stinner i gh-105733.)
dis
:-
Ta bort icke-integrala tal som argument till funktioner och metoder som beaktar pluralformer i modulen
gettext
, även om ingen översättning hittades. (Bidrag från Serhiy Storchaka i gh-88434.)
glob
:Utgå från de odokumenterade funktionerna
glob0()
ochglob1()
. Användglob()
och skicka ett path-like object som anger rotkatalogen till parametern root_dir istället. (Bidrag från Barney Gale i gh-117337.)
-
Avveckla
CGIHTTPRequestHandler
, tas bort i Python 3.15. Processbaserade CGI HTTP-servrar har varit i onåd under en mycket lång tid. Denna kod var föråldrad, ounderhållen och användes sällan. Den har en hög potential för både säkerhets- och funktionsbuggar. (Bidrag från Gregory P. Smith i gh-109096.)Avveckla
--cgi
-flaggan till python -m http.server-kommandoradsgränssnittet, som kommer att tas bort i Python 3.15. (Bidrag från Gregory P. Smith i gh-109096.)
-
Soft-deprecate filvägsargument till
guess_type()
, användguess_file_type()
istället. (Bidrag från Serhiy Storchaka i gh-66543.)
re
:Avstå från att skicka de valfria argumenten maxsplit, count eller flags som positionella argument till modulnivåfunktionerna
split()
,sub()
ochsubn()
. Dessa parametrar kommer att bli keyword-only i en framtida version av Python. (Bidrag från Serhiy Storchaka i gh-56166.)
-
Avveckla
PurePath.is_reserved()
, kommer att tas bort i Python 3.15. Användos.path.isreserved()
för att upptäcka reserverade sökvägar på Windows. (Bidrag från Barney Gale i gh-88569.)
plattform
:Utgå
java_ver()
, kommer att tas bort i Python 3.15. Denna funktion är endast användbar för Jython-stöd, har ett förvirrande API och är i stort sett otestad. (Bidrag från Nikita Sobolev i gh-116349.)
-
Avveckla den odokumenterade funktionen
ispackage()
. (Bidrag från Zackery Spytz i gh-64020.)
-
Avskaffa att skicka mer än ett positionellt argument till funktionen
connect()
och konstruktörenConnection
. De återstående parametrarna kommer att bli nyckelordsbundna i Python 3.15. (Bidrag från Erlend E. Aasland i gh-107948.)Utgå från att skicka namn, antal argument och anropbar som nyckelordsargument för
Connection.create_function()
ochConnection.create_aggregate()
Dessa parametrar kommer att bli enbart positionella i Python 3.15. (Bidrag från Erlend E. Aasland i gh-108278.)Avskaffa att skicka callback callable med nyckelord för metoderna
set_authorizer()
,set_progress_handler()
ochset_trace_callback()
Connection
. Callback callables kommer att bli positional-only i Python 3.15. (Bidrag från Erlend E. Aasland i gh-108278.)
sys
:Utgå från funktionen
_enablelegacywindowsfsencoding()
, som kommer att tas bort i Python 3.16. Använd miljövariabelnPYTHONLEGACYWINDOWSFSENCODING
istället. (Bidrag från Inada Naoki i gh-73427.)
-
Avveckla det odokumenterade och oanvända attributet
TarFile.tarfile
, som ska tas bort i Python 3.16. (Bidrag från gh-115256.)
-
Utgå från attributet
TracebackException.exc_type
. AnvändTracebackException.exc_type_str
istället. (Bidrag från Irit Katriel i gh-112332.)
typning
:Avveckla den odokumenterade syntaxen för nyckelordsargument för att skapa
NamedTuple
-klasser (t.ex.Point = NamedTuple("Point", x=int, y=int)
), kommer att tas bort i Python 3.15. Använd den klassbaserade syntaxen eller den funktionella syntaxen istället. (Bidrag från Alex Waygood i gh-105566.)Avstå från att utelämna fields-parametern när du skapar en
NamedTuple
- ellertyping.TypedDict
-klass, och avstå från att skickaNone
till fields-parametern för båda typerna. Python 3.15 kommer att kräva en giltig sekvens för parametern fields. För att skapa en NamedTuple-klass med noll fält, användclass NT(NamedTuple): pass
ellerNT = NamedTuple("NT", ())
. För att skapa en TypedDict-klass med noll fält, användclass TD(TypedDict): pass
ellerTD = TypedDict("TD", {})
. (Bidrag från Alex Waygood i gh-105566 och gh-105570.)Avveckla dekoratorfunktionen
typing.no_type_check_decorator()
, som kommer att tas bort i Python 3.15. Efter åtta år i modulentyping
har den ännu inte fått stöd av någon större typkontroll. (Bidrag från Alex Waygood i gh-106309.)Avveckla
typing.AnyStr
. I Python 3.16 kommer den att tas bort fråntyping.__all__
, och enDeprecationWarning
kommer att skickas ut vid körning när den importeras eller används. Den kommer att tas bort helt i Python 3.18. Använd den nya typ-parametersyntaxen istället. (Bidrag från Michael The i gh-107116.)
våg
:Avveckla metoderna
getmark()
,setmark()
, ochgetmarkers()
i klassernaWave_read
ochWave_write
, tas bort i Python 3.15. (Bidrag från Victor Stinner i gh-105096.)
Väntar på borttagning i Python 3.14¶
argparse
: Parametrarna type, choices och metavar iargparse.BooleanOptionalAction
är föråldrade och kommer att tas bort i 3.14. (Bidrag från Nikita Sobolev i gh-92248.)ast
: Följande funktioner har varit föråldrade i dokumentationen sedan Python 3.8, orsakar nu enDeprecationWarning
vid körning när de nås eller används, och kommer att tas bort i Python 3.14:ast.Num
ast.Str
ast.Bytes
ast.NamnKonstant
ast.Ellipsis
Använd
ast.Constant
istället. (Bidrag från Serhiy Storchaka i gh-90953.)-
Barnvaktklasserna
asyncio.MultiLoopChildWatcher
,asyncio.FastChildWatcher
,asyncio.AbstractChildWatcher
ochasyncio.SafeChildWatcher
är föråldrade och kommer att tas bort i Python 3.14. (Bidrag från Kumar Aditya i gh-94597.)asyncio.set_child_watcher()
,asyncio.get_child_watcher()
,asyncio.AbstractEventLoopPolicy.set_child_watcher()
ochasyncio.AbstractEventLoopPolicy.get_child_watcher()
är föråldrade och kommer att tas bort i Python 3.14. (Bidrag från Kumar Aditya i gh-94597.)Metoden
get_event_loop()
för standardpolicyn för händelseslingor avger nu enDeprecationWarning
om det inte finns någon aktuell händelseslinga och den bestämmer sig för att skapa en. (Bidrag från Serhiy Storchaka och Guido van Rossum i gh-100160.)
collections.abc
: Föråldradcollections.abc.ByteString
. FöredraSequence
ellerBuffer
. För användning vid typning, föredra en union, sombytes | bytearray
, ellercollections.abc.Buffer
. (Bidrag från Shantanu Jain i gh-91896.)email
: Föråldrad isdst parameter iemail.utils.localtime()
. (Bidrag från Alan Williams i gh-72346.)importlib.abc
föråldrade klasser:importlib.abc.ResourceReader
importlib.abc.Traversable
importlib.abc.TraversableResources
Använd
importlib.resources.abc
-klasser istället:(Bidrag från Jason R. Coombs och Hugo van Kemenade i gh-93963.)
itertools
hade odokumenterat, ineffektivt, historiskt buggigt och inkonsekvent stöd för copy-, deepcopy- och pickle-operationer. Detta kommer att tas bort i 3.14 för en betydande minskning av kodvolymen och underhållsbördan. (Bidrag från Raymond Hettinger i gh-101588.)multiprocessing
: Standardstartmetoden kommer att ändras till en säkrare metod på Linux, BSD och andra POSIX-plattformar som inte är MacOS där'fork'
för närvarande är standard (gh-84559). Att lägga till en körtidsvarning om detta ansågs vara alltför störande eftersom majoriteten av koden inte förväntas bry sig. Använd API:ernaget_context()
ellerset_start_method()
för att uttryckligen ange när din kod kräver'fork'
. Se Sammanhang och startmetoder.pathlib
:is_relative_to()
ochrelative_to()
: att skicka ytterligare argument är föråldrat.pkgutil
:pkgutil.find_loader()
ochpkgutil.get_loader()
ger nu upphov tillDeprecationWarning
; användimportlib.util.find_spec()
istället. (Bidrag från Nikita Sobolev i gh-97850.)pty
:master_open()
: användpty.openpty()
.slave_open()
: användpty.openpty()
.
-
version
ochversion_info
.execute()
ochexecutemany()
om named placeholders används och parameters är en sekvens istället för endict
.
typing
:typing.ByteString
, föråldrad sedan Python 3.9, orsakar nu att enDeprecationWarning
sänds ut när den används.urllib
:urllib.parse.Quoter
is deprecated: det var inte avsett att vara ett offentligt API. (Bidrag från Gregory P. Smith i gh-88168.)
Väntar på borttagning i Python 3.15¶
Importsystemet:
Att ställa in
__cached__
på en modul samtidigt som man misslyckas med att ställa in__spec__.cached
är föråldrat. I Python 3.15 kommer__cached__
inte längre att anges eller tas i beaktande av importsystemet eller standardbiblioteket. (gh-97879)Att ställa in
__package__
på en modul utan att ställa in__spec__.parent
är föråldrat. I Python 3.15 kommer__package__
inte längre att anges eller tas i beaktande av importsystemet eller standardbiblioteket. (gh-97879)
-
Den odokumenterade
ctypes.SetPointerType()
-funktionen är föråldrad sedan Python 3.13.
-
Den föråldrade och sällan använda
CGIHTTPRequestHandler
har utgått sedan Python 3.13. Ingen direkt ersättare finns. Anything är bättre än CGI för att koppla en webbserver till en request-hanterare.Flaggan
--cgi
till kommandoradsgränssnittet python -m http.server har utgått sedan Python 3.13.
-
load_module()
metod: användexec_module()
istället.
-
Funktionen
getdefaultlocale()
har varit föråldrad sedan Python 3.11. Dess borttagning var ursprungligen planerad till Python 3.13 (gh-90817), men har skjutits upp till Python 3.15. Användgetlocale()
,setlocale()
, ochgetencoding()
istället. (Bidrag från Hugo van Kemenade i gh-111187.)
-
PurePath.is_reserved()
har utgått sedan Python 3.13. Användos.path.isreserved()
för att upptäcka reserverade sökvägar i Windows.
plattform
:java_ver()
har utgått sedan Python 3.13. Denna funktion är endast användbar för Jython-stöd, har ett förvirrande API och är i stort sett otestad.
-
Argumentet check_home i
sysconfig.is_python_build()
har utgått sedan Python 3.12.
-
RLock()
kommer inte att ta några argument i Python 3.15. Att skicka några argument har varit föråldrat sedan Python 3.14, eftersom Python-versionen inte tillåter några argument, men C-versionen tillåter valfritt antal positionella eller nyckelordsargument och ignorerar varje argument.
-
types.CodeType
: Accessingco_lnotab
was deprecated in PEP 626 since 3.10 and was planned to be removed in 3.12, but it only got a properDeprecationWarning
in 3.12. Kan komma att tas bort i 3.15. (Bidrag från Nikita Sobolev i gh-101866.)
typning
:Den odokumenterade syntaxen för nyckelordsargument för att skapa
NamedTuple
-klasser (till exempelPoint = NamedTuple("Point", x=int, y=int)
) har utgått sedan Python 3.13. Använd den klassbaserade syntaxen eller den funktionella syntaxen istället.När man använder den funktionella syntaxen för
TypedDict
s, att inte skicka ett värde till parametern fields (TD = TypedDict("TD")
) eller att skickaNone
(TD = TypedDict("TD", None)
) har varit föråldrat sedan Python 3.13. Användclass TD(TypedDict): pass
ellerTD = TypedDict("TD", {})
för att skapa en TypedDict med noll fält.Dekoratorfunktionen
typing.no_type_check_decorator()
har varit föråldrad sedan Python 3.13. Efter åtta år i modulentyping
har den ännu inte fått stöd av någon större typkontroll.
våg
:Metoderna
getmark()
,setmark()
ochgetmarkers()
i klassernaWave_read
ochWave_write
har utgått sedan Python 3.13.
-
load_module()
är föråldrad sedan Python 3.10. Användexec_module()
istället. (Bidrag från Jiahao Li i gh-125746.)
Väntar på borttagning i Python 3.16¶
Importsystemet:
Att ställa in
__loader__
på en modul medan man misslyckas med att ställa in__spec__.loader
är föråldrat. I Python 3.16 kommer__loader__
inte längre att anges eller tas i beaktande av importsystemet eller standardbiblioteket.
-
Formatkoden
'u'
(wchar_t
) har utgått i dokumentation sedan Python 3.3 och vid körning sedan Python 3.13. Använd istället formatkoden'w'
(Py_UCS4
) för Unicode-tecken.
-
asyncio.iscoroutinefunction()
är föråldrad och kommer att tas bort i Python 3.16; användinspect.iscoroutinefunction()
istället. (Bidrag från Jiahao Li och Kumar Aditya i gh-122875.)asyncio
-policysystemet är föråldrat och kommer att tas bort i Python 3.16. I synnerhet är följande klasser och funktioner föråldrade:Användare bör använda
asyncio.run()
ellerasyncio.Runner
med loop_factory för att använda önskad implementering av händelseslingan.Till exempel, för att använda
asyncio.SelectorEventLoop
på Windows:import asyncio async def main(): ... asyncio.run(main(), loop_factory=asyncio.SelectorEventLoop)
(Bidrag från Kumar Aditya i gh-127949.)
-
Bitvis invertering på booleska typer,
~True
eller~False
har varit föråldrad sedan Python 3.12, eftersom det ger överraskande och ointuitiva resultat (-2
och-1
). Användnot x
istället för den logiska negationen av en booleansk formel. I det sällsynta fallet att du behöver den bitvisa inverteringen av det underliggande heltalet, konvertera tillint
explicit (~int(x)
).
-
Att anropa Python-implementationen av
functools.reduce()
med function eller sequence som nyckelordsargument är inte längre aktuellt sedan Python 3.14.
-
Stöd för anpassade logghanterare med strm-argumentet är föråldrat och planeras att tas bort i Python 3.16. Definiera hanterare med stream-argumentet istället. (Bidrag från Mariusz Felisiak i gh-115032.)
-
Giltiga tillägg börjar med en ’.’ eller är tomma för
mimetypes.MimeTypes.add_type()
. Okommenterade tillägg är föråldrade och kommer att ge upphov till ettValueError
i Python 3.16. (Bidrag från Hugo van Kemenade i gh-75223.)
-
Undantaget
ExecError
har varit föråldrat sedan Python 3.14. Det har inte använts av någon funktion ishutil
sedan Python 3.4, och är nu ett alias förRuntimeError
.
-
Metoden
Class.get_methods
har utgått sedan Python 3.14.
sys
:Funktionen
_enablelegacywindowsfsencoding()
är föråldrad sedan Python 3.13. Använd miljövariabelnPYTHONLEGACYWINDOWSFSENCODING
istället.
-
Funktionen
sysconfig.expand_makefile_vars()
är föråldrad sedan Python 3.14. Användvars
-argumentet isysconfig.get_paths()
istället.
-
Det odokumenterade och oanvända attributet
TarFile.tarfile
är föråldrat sedan Python 3.13.
Väntar på borttagning i Python 3.17¶
typning
:Före Python 3.14 implementerades gamla tiders unioner med hjälp av den privata klassen
typing._UnionGenericAlias
. Denna klass behövs inte längre för implementationen, men den har behållits för bakåtkompatibilitet, med borttagning planerad till Python 3.17. Användare bör använda dokumenterade introspektionshjälpmedel somtyping.get_origin()
ochtyping.get_args()
istället för att förlita sig på privata implementationsdetaljer.
Avser att tas bort i framtida versioner¶
Följande API:er kommer att tas bort i framtiden, även om det för närvarande inte finns något datum för när de ska tas bort.
-
Nesting av argumentgrupper och nesting av ömsesidigt uteslutande grupper är avförda.
Att skicka det odokumenterade nyckelordsargumentet prefix_chars till
add_argument_group()
är nu föråldrat.Typomvandlaren
argparse.FileType
är föråldrad.
-
bool(NotImplemented)
.Generatorer:
throw(type, exc, tb)
ochathrow(type, exc, tb)
signaturen är förbrukad: användthrow(exc)
ochathrow(exc)
istället, signaturen med ett enda argument.För närvarande accepterar Python numeriska literaler omedelbart följt av nyckelord, till exempel
0in x
,1or x
,0if 1else 2
. Det tillåter förvirrande och tvetydiga uttryck som[0x1for x in y]
(som kan tolkas som[0x1 for x in y]
eller[0x1f or x in y]
). En syntaxvarning visas om den numeriska litteralen omedelbart följs av något av nyckelordenand
,else
,for
,if
,in
,is
ochor
. I en framtida version kommer det att ändras till ett syntaxfel. (gh-87999)Stöd för metoderna
__index__()
och__int__()
som returnerar icke-int-typer: dessa metoder kommer att behöva returnera en instans av en strikt underklass avint
.Stöd för metoden
__float__()
som returnerar en strikt underklass avfloat
: dessa metoder måste returnera en instans avfloat
.Stöd för metoden
__complex__()
som returnerar en strikt underklass avcomplex
: dessa metoder måste returnera en instans avcomplex
.Delegering av
int()
till metoden__trunc__()
.Att skicka ett komplext tal som real eller imag argument i
complex()
-konstruktorn är nu föråldrat; det bör endast skickas som ett enda positionellt argument. (Bidrag från Serhiy Storchaka i gh-109218.)
calendar
: Konstanternacalendar.January
ochcalendar.February
är föråldrade och ersätts avcalendar.JANUARY
ochcalendar.FEBRUARY
. (Bidrag från Prince Roshan i gh-103636.)codecs
: användopen()
istället förcodecs.open()
. (gh-133038)codeobject.co_lnotab
: använd istället metodencodeobject.co_lines()
.-
utcnow()
: använddatetime.datetime.now(tz=datetime.UTC)
.utcfromtimestamp()
: använddatetime.datetime.fromtimestamp(timestamp, tz=datetime.UTC)
.
gettext
: Pluralvärdet måste vara ett heltal.-
cache_from_source()
Parametern debug_override är föråldrad: använd parametern optimization istället.
-
EntryPoints
tuple-gränssnitt.Implicit
None
på returvärden.
logging
: metodenwarn()
har utgått sedan Python 3.3, användwarning()
istället.mailbox
: Användning av StringIO-ingång och textläge är föråldrad, använd BytesIO och binärt läge istället.os
: Anroparos.register_at_fork()
i flertrådad process.pydoc.ErrorDuringImport
: Ett tupelvärde för parametern exc_info är föråldrat, använd en undantagsinstans.re
: Strängare regler tillämpas nu för numeriska gruppreferenser och gruppnamn i reguljära uttryck. Endast sekvenser av ASCII-siffror accepteras nu som numeriska referenser. Gruppnamnet i bytesmönster och ersättningssträngar kan nu endast innehålla ASCII-bokstäver och siffror samt understreck. (Bidrag från Serhiy Storchaka i gh-91760.)modulerna
sre_compile
,sre_constants
ochsre_parse
.shutil
:rmtree()
:s parameter onerror är föråldrad i Python 3.12; använd istället parametern onexc.ssl
alternativ och protokoll:ssl.SSLContext
utan protokollargument är föråldrad.ssl.SSLContext
:set_npn_protocols()
andselected_npn_protocol()
are deprecated: use ALPN instead.ssl.OP_NO_SSL*
alternativssl.OP_NO_TLS*
alternativssl.PROTOCOL_SSLv3
ssl.PROTOCOL_TLS
ssl.PROTOCOL_TLSv1
ssl.PROTOCOL_TLSv1_1
ssl.PROTOCOL_TLSv1_2
ssl.TLSVersion.SSLv3
ssl.TLSVersion.TLSv1
ssl.TLSVersion.TLSv1_1
threading
metoder:threading.Condition.notifyAll()
: usenotify_all()
.threading.Event.isSet()
: användis_set()
.threading.Thread.isDaemon()
,threading.Thread.setDaemon()
: använd attributetthreading.Thread.daemon
.threading.Thread.getName()
,threading.Thread.setName()
: använd attributetthreading.Thread.name
.threading.currentThread()
: usethreading.current_thread()
.threading.activeCount()
: usethreading.active_count()
.
Den interna klassen
typing._UnionGenericAlias
används inte längre för att implementeratyping.Union
. För att bevara kompatibiliteten med användare som använder denna privata klass, kommer en kompatibilitets-shim att tillhandahållas åtminstone fram till Python 3.17. (Bidrag från Jelle Zijlstra i gh-105499.)unittest.IsolatedAsyncioTestCase
: det är förkastligt att returnera ett värde som inte ärNone
från ett testfall.urllib.parse
föråldrade funktioner:urlparse()
iställetsplitattr()
splithost()
splitnport()
splitpasswd()
splitport()
splitquery()
splittag()
splittype()
splituser()
splitvärde()
to_bytes()
wsgiref
:SimpleHandler.stdout.write()
bör inte göra partiella skrivningar.xml.etree.ElementTree
: Att testa sanningsvärdet för enElement
är föråldrat. I en framtida version kommer det alltid att returneraTrue
. Föredra istället explicitalen(elem)
ellerelem is not None
tester.sys._clear_type_cache()
är föråldrad: användsys._clear_internal_caches()
istället.
CPython Bytecode-ändringar¶
Oparg för
YIELD_VALUE
är nu1
om yield är en del av en yield-from eller await, och0
annars. Oparg förRESUME
ändrades för att lägga till en bit som anger om except-depth är 1, vilket behövs för att optimera stängning av generatorer. (Bidrag från Irit Katriel i gh-111354.)
Ändringar i C API¶
Nya funktioner¶
Lägg till PyMonitoring C API för att generera PEP 669 övervakningshändelser:
PyMonitoring_FireBranchEvent
(Bidrag från Irit Katriel i gh-111997).
Lägg till
PyMutex
, en lättviktig mutex som tar upp en enda byte, och de nya funktionernaPyMutex_Lock()
ochPyMutex_Unlock()
.PyMutex_Lock()
kommer att släppa GIL (om den för närvarande hålls) om operationen behöver blockeras. (Bidrag från Sam Gross i gh-108724.)Lägg till PyTime C API för att ge åtkomst till systemklockor:
PyTime_MIN
ochPyTime_MAX
.
(Bidrag från Victor Stinner och Petr Viktorin i gh-110850.)
Lägg till funktionen
PyDict_ContainsString()
med samma beteende somPyDict_Contains()
, men key anges som en const char* UTF-8-kodad bytessträng, snarare än ett PyObject*. (Bidrag från Victor Stinner i gh-108314.)Lägg till funktionerna
PyDict_GetItemRef()
ochPyDict_GetItemStringRef()
, som beter sig på liknande sätt somPyDict_GetItemWithError()
, men returnerar en strong reference istället för en borrowed reference. Dessutom returnerar dessa funktioner-1
vid fel, vilket tar bort behovet av att kontrolleraPyErr_Occurred()
. (Bidrag från Victor Stinner i gh-106004.)Lägg till funktionen
PyDict_SetDefaultRef()
, som beter sig på samma sätt somPyDict_SetDefault()
, men returnerar en strong reference istället för en borrowed reference. Denna funktion returnerar-1
vid fel,0
vid infogning och1
om nyckeln redan fanns i ordlistan. (Bidrag från Sam Gross i gh-112066.)Lägg till funktionerna
PyDict_Pop()
ochPyDict_PopString()
för att ta bort en nyckel från en ordbok och eventuellt returnera det borttagna värdet. Detta liknardict.pop()
, även om det inte finns något standardvärde ochKeyError
inte tas upp för saknade nycklar. (Bidrag från Stefan Behnel och Victor Stinner i gh-111262.)Lägg till funktionerna
PyMapping_GetOptionalItem()
ochPyMapping_GetOptionalItemString()
som alternativ tillPyObject_GetItem()
respektivePyMapping_GetItemString()
. De nya funktionerna ger inte upphov tillKeyError
om den begärda nyckeln saknas i mappningen. Dessa varianter är mer praktiska och snabbare om en saknad nyckel inte ska behandlas som ett fel. (Bidrag från Serhiy Storchaka i gh-106307.)Lägg till funktionerna
PyObject_GetOptionalAttr()
ochPyObject_GetOptionalAttrString()
som alternativ tillPyObject_GetAttr()
respektivePyObject_GetAttrString()
. De nya funktionerna ger inte upphov tillAttributeError
om det begärda attributet inte finns på objektet. Dessa varianter är mer praktiska och snabbare om det saknade attributet inte ska behandlas som ett fel. (Bidrag från Serhiy Storchaka i gh-106521.)Lägg till funktionen
PyErr_FormatUnraisable()
som ett tillägg tillPyErr_WriteUnraisable()
som gör det möjligt att anpassa varningsmeddelandet. (Bidrag från Serhiy Storchaka i gh-108082.)Lägg till nya funktioner som returnerar en strong reference istället för en borrowed reference för frame locals, globals och builtins, som en del av PEP 667:
(Bidrag från Mark Shannon och Tian Gao i gh-74929.)
Lägg till funktionerna
Py_GetConstant()
ochPy_GetConstantBorrowed()
för att få strong eller borrowed referenser till konstanter. Till exempel,Py_GetConstant(Py_CONSTANT_ZERO)
returnerar en stark referens till konstanten noll. (Bidrag från Victor Stinner i gh-115754.)Lägg till funktionen
PyImport_AddModuleRef()
som ersättning förPyImport_AddModule()
som returnerar en strong reference istället för en borrowed reference. (Bidrag från Victor Stinner i gh-105922.)Lägg till funktionen
Py_IsFinalizing()
för att kontrollera om huvudtolken för Python stänger ner. (Bidrag från Victor Stinner i gh-108014.)Lägg till funktionen
PyList_GetItemRef()
som ersättning förPyList_GetItem()
som returnerar en strong reference istället för en borrowed reference. (Bidrag från Sam Gross i gh-114329.)Lägg till funktionerna
PyList_Extend()
ochPyList_Clear()
, som speglar Pythons metoderlist.extend()
ochlist.clear()
. (Bidrag från Victor Stinner i gh-111138.)Lägg till funktionen
PyLong_AsInt()
. Den beter sig på liknande sätt somPyLong_AsLong()
, men lagrar resultatet i en C int istället för en C long. (Bidrag från Victor Stinner i gh-108014.)Lägg till funktionerna
PyLong_AsNativeBytes()
,PyLong_FromNativeBytes()
ochPyLong_FromUnsignedNativeBytes()
för att förenkla konvertering mellan inbyggda heltalstyper och Pythonint
-objekt. (Bidrag från Steve Dower i gh-111140.)Lägg till funktionen
PyModule_Add()
, som liknarPyModule_AddObjectRef()
ochPyModule_AddObject()
, men som alltid stjäl en referens till värdet. (Bidrag från Serhiy Storchaka i gh-86493.)Lägg till funktionen
PyObject_GenericHash()
som implementerar standardhashfunktionen för ett Python-objekt. (Bidrag från Serhiy Storchaka i gh-113024.)Lägg till funktionen
Py_HashPointer()
för att hasha en rå pekare. (Bidrag från Victor Stinner i gh-111545.)Lägg till funktionerna
PyObject_VisitManagedDict()
ochPyObject_ClearManagedDict()
. som måste anropas av funktionerna traverse och clear för en typ som använder flagganPy_TPFLAGS_MANAGED_DICT
. Projektet pythoncapi-compat kan användas för att använda dessa funktioner med Python 3.11 och 3.12. (Bidrag från Victor Stinner i gh-107073.)Lägg till funktionerna
PyRefTracer_SetTracer()
ochPyRefTracer_GetTracer()
, som gör det möjligt att spåra skapande och förstörelse av objekt på samma sätt som modulentracemalloc
gör. (Bidrag från Pablo Galindo i gh-93502.)Lägg till funktionen
PySys_AuditTuple()
som ett alternativ tillPySys_Audit()
som tar händelseargument som ett Pythontuple
-objekt. (Bidrag från Victor Stinner i gh-85283.)Lägg till funktionen
PyThreadState_GetUnchecked()
som ett alternativ tillPyThreadState_Get()
som inte dödar processen med ett fatalt fel om den ärNULL
. Den som anropar är ansvarig för att kontrollera om resultatet ärNULL
. (Bidrag från Victor Stinner i gh-108867.)Lägg till funktionen
PyType_GetFullyQualifiedName()
för att hämta typens fullständigt kvalificerade namn. Modulnamnet läggs till omtype.__module__
är en sträng och inte är lika med antingen'builtins'
eller'__main__'
. (Bidrag från Victor Stinner i gh-111696.)Lägg till funktionen
PyType_GetModuleName()
för att hämta typens modulnamn. Detta motsvarar att hämta attributettype.__module__
. (Bidrag från Eric Snow och Victor Stinner i gh-111696.)Lägg till funktionerna
PyUnicode_EqualToUTF8AndSize()
ochPyUnicode_EqualToUTF8()
för att jämföra ett Unicode-objekt med en const char* UTF-8-kodad sträng och1
om de är lika eller0
annars. Dessa funktioner ger inte upphov till undantag. (Bidrag från Serhiy Storchaka i gh-110289.)Lägg till funktionen
PyWeakref_GetRef()
som ett alternativ tillPyWeakref_GetObject()
som returnerar en strong reference ellerNULL
om referenten inte längre är live. (Bidrag från Victor Stinner i gh-105927.)Lägg till fasta varianter av funktioner som tyst ignorerar fel:
PyObject_HasAttrStringWithError()
ersätterPyObject_HasAttrString()
.PyMapping_HasKeyStringWithError()
ersätterPyMapping_HasKeyString()
.
De nya funktionerna returnerar
-1
för fel och standard1
för sant och0
för falskt.(Bidrag från Serhiy Storchaka i gh-108511.)
Ändrade C API:er¶
Parametern keywords i
PyArg_ParseTupleAndKeywords()
ochPyArg_VaParseTupleAndKeywords()
har nu typen char *const* i C och const char *const* i C++, istället för char**. I C++ gör detta dessa funktioner kompatibla med argument av typen const char *const*, const char** eller char *const* utan en explicit typcast. I C stöder funktionerna endast argument av typen char *const*. Detta kan åsidosättas med makrotPY_CXX_CONST
. (Bidrag från Serhiy Storchaka i gh-65210.)PyArg_ParseTupleAndKeywords()
stöder nu parameternamn för nyckelord som inte är ASCII. (Bidrag från Serhiy Storchaka i gh-110815.)Funktionen
PyCode_GetFirstFree()
är nu ett instabilt API och heter nuPyUnstable_Code_GetFirstFree()
. (Bidrag från Bogdan Romanyuk i gh-115781.)Funktionerna
PyDict_GetItem()
,PyDict_GetItemString()
,PyMapping_HasKey()
,PyMapping_HasKeyString()
,PyObject_HasAttr()
,PyObject_HasAttrString()
, ochPySys_GetObject()
funktioner, som var och en rensar alla fel som uppstod när de anropades, rapporterar nu dessa fel medsys.unraisablehook()
. Du kan ersätta dem med andra funktioner enligt rekommendationerna i dokumentationen. (Bidrag från Serhiy Storchaka i gh-106672.)Lägg till stöd för formaten
%T
,%#T
,%N
och%#N
tillPyUnicode_FromFormat()
:%T
: Hämta det fullständigt kvalificerade namnet på en objekttyp%#T
: Som ovan, men använd ett kolon som avgränsare%N
: Hämta det fullständigt kvalificerade namnet på en typ%#N
: Som ovan, men använd ett kolon som separator
Se PEP 737 för mer information. (Bidrag från Victor Stinner i gh-111696.)
Du behöver inte längre definiera makrot
PY_SSIZE_T_CLEAN
innan du inkluderarPython.h
när du använder#
-format i formatkoder. API:er som accepterar formatkoderna använder alltidPy_ssize_t
för#
-format. (Bidrag från Inada Naoki i gh-104922.)Om Python är byggt i debugläge eller
med assertions
, kontrollerar nuPyTuple_SET_ITEM()
ochPyList_SET_ITEM()
index-argumentet med en assertion. (Bidrag från Victor Stinner i gh-106168.)
Ändringar i API för begränsad C¶
Följande funktioner ingår nu i det begränsade C API:et:
(Bidrag från Victor Stinner i gh-85283, gh-85283, och gh-116936.)
Python byggt med
--with-trace-refs
(spårning av referenser) stöder nu Limited API. (Bidrag från Victor Stinner i gh-108634.)
Borttagna C API:er¶
Ta bort flera funktioner, makron, variabler, etc med namn som inleds med
_Py
eller_PY
(som anses vara privata). Om ditt projekt påverkas av en av dessa borttagningar och du anser att det borttagna API:et bör förbli tillgängligt, öppna ett nytt ärende för att begära ett offentligt C API och lägg tillcc: @vstinner
till frågan för att meddela Victor Stinner. (Bidrag från Victor Stinner i gh-106320.)Ta bort gamla buffertprotokoll som är föråldrade i Python 3.0. Använd Buffertprotokoll istället.
PyObject_CheckReadBuffer()
: AnvändPyObject_CheckBuffer()
för att testa om objektet stöder buffertprotokollet. Observera attPyObject_CheckBuffer()
inte garanterar attPyObject_GetBuffer()
kommer att lyckas. För att testa om objektet faktiskt är läsbart, se nästa exempel påPyObject_GetBuffer()
.PyObject_AsCharBuffer()
,PyObject_AsReadBuffer()
: AnvändPyObject_GetBuffer()
ochPyBuffer_Release()
istället:Py_buffer vy; if (PyObject_GetBuffer(obj, &view, PyBUF_SIMPLE) < 0) { returnera NULL; } // Använd `view.buf` och `view.len` för att läsa från bufferten. // Du kan behöva casta buf som `(const char*)view.buf`. PyBuffer_Release(&view);
PyObject_AsWriteBuffer()
: AnvändPyObject_GetBuffer()
ochPyBuffer_Release()
istället:Py_buffer vy; if (PyObject_GetBuffer(obj, &view, PyBUF_WRITABLE) < 0) { returnera NULL; } // Använd `view.buf` och `view.len` för att skriva till bufferten. PyBuffer_Release(&view);
(Bidrag från Inada Naoki i gh-85275.)
Ta bort olika funktioner som är föråldrade i Python 3.9:
PyEval_CallObject()
,PyEval_CallObjectWithKeywords()
: AnvändPyObject_CallNoArgs()
ellerPyObject_Call()
istället.Varning
I
PyObject_Call()
måste positionella argument vara entuple
och får inte varaNULL
, och nyckelordsargument måste vara endict
ellerNULL
, medan de borttagna funktionerna kontrollerade argumenttyper och accepteradeNULL
positionella och nyckelordsargument. För att ersättaPyEval_CallObjectWithKeywords(func, NULL, kwargs)
medPyObject_Call()
, skicka en tom tupel som positionella argument medPyTuple_New(0)
.PyEval_CallFunction()
: AnvändPyObject_CallFunction()
istället.PyEval_CallMethod()
: AnvändPyObject_CallMethod()
istället.PyCFunction_Call()
: AnvändPyObject_Call()
istället.
(Bidrag från Victor Stinner i gh-105107.)
Ta bort följande gamla funktioner för att konfigurera Python-initialiseringen, föråldrade i Python 3.11:
PySys_AddWarnOptionUnicode()
: AnvändPyConfig.warnoptions
istället.PySys_AddWarnOption()
: AnvändPyConfig.warnoptions
istället.PySys_AddXOption()
: AnvändPyConfig.xoptions
istället.PySys_HasWarnOptions()
: AnvändPyConfig.xoptions
istället.PySys_SetPath()
: Ställ inPyConfig.module_search_paths
istället.Py_SetPath()
: Ställ inPyConfig.module_search_paths
istället.Py_SetStandardStreamEncoding()
: Ställ inPyConfig.stdio_encoding
istället, och ställ kanske också inPyConfig.legacy_windows_stdio
(på Windows)._Py_SetProgramFullPath()
: Ställ inPyConfig.executable
istället.
Använd istället det nya
PyConfig
API:et i Python Initialization Configuration (PEP 587), som tillkommit i Python 3.8. (Bidrag från Victor Stinner i gh-105145.)Ta bort funktionerna
PyEval_AcquireLock()
ochPyEval_ReleaseLock()
, föråldrade i Python 3.2. De uppdaterade inte det aktuella trådtillståndet. De kan ersättas med:lågnivå
PyEval_AcquireThread()
ochPyEval_RestoreThread()
;eller
PyGILState_Ensure()
ochPyGILState_Release()
.
(Bidrag från Victor Stinner i gh-105182.)
Ta bort funktionen
PyEval_ThreadsInitialized()
, föråldrad i Python 3.9. Sedan Python 3.7 skaparPy_Initialize()
alltid GIL: att anropaPyEval_InitThreads()
gör ingenting ochPyEval_ThreadsInitialized()
returnerar alltid icke-noll. (Bidrag från Victor Stinner i gh-105182.)Ta bort
_PyInterpreterState_Get()
-aliaset tillPyInterpreterState_Get()
som behölls för bakåtkompatibilitet med Python 3.8. Projektet pythoncapi-compat kan användas för att fåPyInterpreterState_Get()
på Python 3.8 och äldre. (Bidrag från Victor Stinner i gh-106320.)Ta bort den privata funktionen
_PyObject_FastCall()
: användPyObject_Vectorcall()
som är tillgänglig sedan Python 3.8 (PEP 590). (Bidrag från Victor Stinner i gh-106023.)Ta bort huvudfilen
cpython/pytime.h
, som endast innehöll privata funktioner. (Bidrag från Victor Stinner i gh-106316.)Ta bort den odokumenterade konstanten
PY_TIMEOUT_MAX
från det begränsade C API:et. (Bidrag från Victor Stinner i gh-110014.)Ta bort de gamla papperskorgsmakrot
Py_TRASHCAN_SAFE_BEGIN
ochPy_TRASHCAN_SAFE_END
. Ersätt båda med de nya makronaPy_TRASHCAN_BEGIN
ochPy_TRASHCAN_END
. (Bidrag från Irit Katriel i gh-105111.)
Föråldrade C API:er¶
Avveckla gamla Python-initialiseringsfunktioner:
PySys_ResetWarnOptions()
: Rensasys.warnoptions
ochwarnings.filters
istället.Py_GetExecPrefix()
: Hämtasys.exec_prefix
istället.Py_GetPath()
: Hämtasys.path
istället.Py_GetPrefix()
: Hämtasys.prefix
istället.Py_GetProgramFullPath()
: Hämtasys.executable
istället.Py_GetProgramName()
: Hämtasys.executable
istället.Py_GetPythonHome()
: HämtaPyConfig.home
eller miljövariabelnPYTHONHOME
istället.
(Bidrag från Victor Stinner i gh-105145.)
Soft deprecate funktionerna
PyEval_GetBuiltins()
,PyEval_GetGlobals()
, ochPyEval_GetLocals()
, som returnerar en lånad referens. (Mjukt föråldrad som en del av PEP 667.)Avveckla funktionen
PyImport_ImportModuleNoBlock()
, som bara är ett alias tillPyImport_ImportModule()
sedan Python 3.3. (Bidrag från Victor Stinner i gh-105396.)Soft deprecate funktionen
PyModule_AddObject()
. Den bör ersättas medPyModule_Add()
ellerPyModule_AddObjectRef()
. (Bidrag från Serhiy Storchaka i gh-86493.)Utgå från de gamla typerna
Py_UNICODE
ochPY_UNICODE_TYPE
ochPy_UNICODE_WIDE
-definitionen. Använd typenwchar_t
direkt istället. Sedan Python 3.3 ärPy_UNICODE
ochPY_UNICODE_TYPE
bara alias tillwchar_t
. (Bidrag från Victor Stinner i gh-105156.)Avveckla funktionerna
PyWeakref_GetObject()
ochPyWeakref_GET_OBJECT()
, som returnerar en lånad referens. Ersätt dem med den nya funktionenPyWeakref_GetRef()
, som returnerar en strong reference. Projektet pythoncapi-compat kan användas för att fåPyWeakref_GetRef()
på Python 3.12 och äldre. (Bidrag från Victor Stinner i gh-105927.)
Väntar på borttagning i Python 3.14¶
Fältet
ma_version_tag
iPyDictObject
för tilläggsmoduler (PEP 699; gh-101193).Skapar
immutable types
med mutabla baser (gh-95388).
Väntar på borttagning i Python 3.15¶
PyImport_ImportModuleNoBlock()
: AnvändPyImport_ImportModule()
istället.PyWeakref_GetObject()
ochPyWeakref_GET_OBJECT()
: AnvändPyWeakref_GetRef()
istället. Projektet pythoncapi-compat kan användas för att hämtaPyWeakref_GetRef()
på Python 3.12 och äldre.Py_UNICODE
typ ochPy_UNICODE_WIDE
makro: Användwchar_t
istället.PyUnicode_AsDecodedObject()
: AnvändPyCodec_Decode()
istället.PyUnicode_AsDecodedUnicode()
: AnvändPyCodec_Decode()
istället; Observera att vissa codecs (t.ex. ”base64”) kan returnera en annan typ änstr
, t.ex.bytes
.PyUnicode_AsEncodedObject()
: AnvändPyCodec_Encode()
istället.PyUnicode_AsEncodedUnicode()
: AnvändPyCodec_Encode()
istället; Observera att vissa codecs (t.ex. ”base64”) kan returnera en annan typ änbytes
, t.ex.str
.Python-initialiseringsfunktioner, föråldrade i Python 3.13:
Py_GetPath()
: AnvändPyConfig_Get("module_search_paths")
(sys.path
) istället.Py_GetPrefix()
: AnvändPyConfig_Get("base_prefix")
(sys.base_prefix
) istället. AnvändPyConfig_Get("prefix")
(sys.prefix
) om virtuella miljöer behöver hanteras.Py_GetExecPrefix()
: AnvändPyConfig_Get("base_exec_prefix")
(sys.base_exec_prefix
) istället. AnvändPyConfig_Get("exec_prefix")
(sys.exec_prefix
) om virtuella miljöer behöver hanteras.Py_GetProgramFullPath()
: AnvändPyConfig_Get("executable")
(sys.executable
) istället.Py_GetProgramName()
: AnvändPyConfig_Get("executable")
(sys.executable
) istället.Py_GetPythonHome()
: AnvändPyConfig_Get("home")
eller miljövariabelnPYTHONHOME
istället.
Projektet pythoncapi-compat kan användas för att få
PyConfig_Get()
på Python 3.13 och äldre.Funktioner för att konfigurera Pythons initialisering, föråldrad i Python 3.11:
PySys_SetArgvEx()
: Ställ inPyConfig.argv
istället.PySys_SetArgv()
: Ställ inPyConfig.argv
istället.Py_SetProgramName()
: Ställ inPyConfig.program_name
istället.Py_SetPythonHome()
: Ställ inPyConfig.home
istället.PySys_ResetWarnOptions()
: Rensasys.warnoptions
ochwarnings.filters
istället.
API:t
Py_InitializeFromConfig()
bör användas medPyConfig
istället.Variabler för global konfiguration:
Py_DebugFlag
: AnvändPyConfig.parser_debug
ellerPyConfig_Get("parser_debug")
istället.Py_VerboseFlag
: AnvändPyConfig.verbose
ellerPyConfig_Get("verbose")
istället.Py_QuietFlag
: AnvändPyConfig.quiet
ellerPyConfig_Get("quiet")
istället.Py_InteractiveFlag
: AnvändPyConfig.interactive
ellerPyConfig_Get("interactive")
istället.Py_InspectFlag
: AnvändPyConfig.inspect
ellerPyConfig_Get("inspect")
istället.Py_OptimizeFlag
: AnvändPyConfig.optimization_level
ellerPyConfig_Get("optimization_level")
istället.Py_NoSiteFlag
: AnvändPyConfig.site_import
ellerPyConfig_Get("site_import")
istället.Py_BytesWarningFlag
: AnvändPyConfig.bytes_warning
ellerPyConfig_Get("bytes_warning")
istället.Py_FrozenFlag
: AnvändPyConfig.pathconfig_warnings
ellerPyConfig_Get("pathconfig_warnings")
istället.Py_IgnoreEnvironmentFlag
: AnvändPyConfig.use_environment
ellerPyConfig_Get("use_environment")
istället.Py_DontWriteBytecodeFlag
: AnvändPyConfig.write_bytecode
ellerPyConfig_Get("write_bytecode")
istället.Py_NoUserSiteDirectory
: AnvändPyConfig.user_site_directory
ellerPyConfig_Get("user_site_directory")
istället.Py_UnbufferedStdioFlag
: AnvändPyConfig.buffered_stdio
ellerPyConfig_Get("buffered_stdio")
istället.Py_HashRandomizationFlag
: AnvändPyConfig.use_hash_seed
ochPyConfig.hash_seed
ellerPyConfig_Get("hash_seed")
istället.Py_IsolatedFlag
: AnvändPyConfig.isolated
ellerPyConfig_Get("isolated")
istället.Py_LegacyWindowsFSEncodingFlag
: AnvändPyPreConfig.legacy_windows_fs_encoding
ellerPyConfig_Get("legacy_windows_fs_encoding")
istället.Py_LegacyWindowsStdioFlag
: AnvändPyConfig.legacy_windows_stdio
ellerPyConfig_Get("legacy_windows_stdio")
istället.Py_FileSystemDefaultEncoding
,Py_HasFileSystemDefaultEncoding
: AnvändPyConfig.filesystem_encoding
ellerPyConfig_Get("filesystem_encoding")
istället.Py_FileSystemDefaultEncodeErrors
: AnvändPyConfig.filesystem_errors
ellerPyConfig_Get("filesystem_errors")
istället.Py_UTF8Mode
: AnvändPyPreConfig.utf8_mode
ellerPyConfig_Get("utf8_mode")
istället. (sePy_PreInitialize()
)
API:et
Py_InitializeFromConfig()
bör användas medPyConfig
för att ställa in dessa alternativ. Eller så kanPyConfig_Get()
användas för att hämta dessa alternativ vid körning.
Väntar på borttagning i Python 3.16¶
Den medföljande kopian av
libmpdec
.
Väntar på borttagning i Python 3.18¶
Föråldrade privata funktioner (gh-128863):
_PyBytes_Join()
: användPyBytes_Join()
._PyDict_GetItemStringWithError()
: användPyDict_GetItemStringRef()
._PyDict_Pop()
:PyDict_Pop()
._PyLong_Sign()
: användPyLong_GetSign()
._PyLong_FromDigits()
och_PyLong_New()
: användPyLongWriter_Create()
._PyThreadState_UncheckedGet()
: användPyThreadState_GetUnchecked()
._PyUnicode_AsString()
: användPyUnicode_AsUTF8()
._PyUnicodeWriter_Init()
: ersätt_PyUnicodeWriter_Init(&writer)
medwriter = PyUnicodeWriter_Create(0)
._PyUnicodeWriter_Finish()
: ersätt_PyUnicodeWriter_Finish(&writer)
medPyUnicodeWriter_Finish(writer)
._PyUnicodeWriter_Dealloc()
: ersätt_PyUnicodeWriter_Dealloc(&writer)
medPyUnicodeWriter_Discard(writer)
._PyUnicodeWriter_WriteChar()
: ersätt_PyUnicodeWriter_WriteChar(&writer, ch)
medPyUnicodeWriter_WriteChar(writer, ch)
._PyUnicodeWriter_WriteStr()
: ersätt_PyUnicodeWriter_WriteStr(&writer, str)
medPyUnicodeWriter_WriteStr(writer, str)
._PyUnicodeWriter_WriteSubstring()
: ersätt_PyUnicodeWriter_WriteSubstring(&writer, str, start, end)
medPyUnicodeWriter_WriteSubstring(writer, str, start, end)
._PyUnicodeWriter_WriteASCIIString()
: ersätt_PyUnicodeWriter_WriteASCIIString(&writer, str)
medPyUnicodeWriter_WriteUTF8(writer, str)
._PyUnicodeWriter_WriteLatin1String()
: ersätt_PyUnicodeWriter_WriteLatin1String(&writer, str)
medPyUnicodeWriter_WriteUTF8(writer, str)
._PyUnicodeWriter_Prepare()
: (ingen ersättning)._PyUnicodeWriter_PrepareKind()
: (ingen ersättning)._Py_HashPointer()
: användPy_HashPointer()
._Py_fopen_obj()
: användPy_fopen()
.
Projektet pythoncapi-compat kan användas för att få dessa nya offentliga funktioner på Python 3.13 och äldre.
Avser att tas bort i framtida versioner¶
Följande API:er är föråldrade och kommer att tas bort, även om det för närvarande inte finns något datum för när de ska tas bort.
Py_TPFLAGS_HAVE_FINALIZE
: Behövs inte sedan Python 3.8.PyErr_Fetch()
: AnvändPyErr_GetRaisedException()
istället.PyErr_NormalizeException()
: AnvändPyErr_GetRaisedException()
istället.PyErr_Restore()
: AnvändPyErr_SetRaisedException()
istället.PyModule_GetFilename()
: AnvändPyModule_GetFilenameObject()
istället.PyOS_AfterFork()
: AnvändPyOS_AfterFork_Child()
istället.PySlice_GetIndicesEx()
: AnvändPySlice_Unpack()
ochPySlice_AdjustIndices()
istället.PyUnicode_READY()
: Behövs inte sedan Python 3.12PyErr_Display()
: AnvändPyErr_DisplayException()
istället._PyErr_ChainExceptions()
: Använd_PyErr_ChainExceptions1()
istället.PyBytesObject.ob_shash
member: anropaPyObject_Hash()
istället.API för lokal lagring av trådar (TLS):
PyThread_create_key()
: AnvändPyThread_tss_alloc()
istället.PyThread_delete_key()
: AnvändPyThread_tss_free()
istället.PyThread_set_key_value()
: AnvändPyThread_tss_set()
istället.PyThread_get_key_value()
: AnvändPyThread_tss_get()
istället.PyThread_delete_key_value()
: AnvändPyThread_tss_delete()
istället.PyThread_ReInitTLS()
: Behövs inte sedan Python 3.7.
Förändringar i byggning¶
arm64-apple-ios
ocharm64-apple-ios-simulator
är nu båda PEP 11 tier 3 plattformar. (PEP 730 skriven och implementerad av Russell Keith-Magee i gh-114099.)aarch64-linux-android
ochx86_64-linux-android
är nu båda PEP 11 tier 3-plattformar. (PEP 738 skriven och implementationen bidragit av Malcolm Smith i gh-116622.)wasm32-wasi
är nu en PEP 11 tier 2 plattform. (Bidrag från Brett Cannon i gh-115192.)wasm32-emscripten
är inte längre en plattform som stöds av PEP 11. (Bidrag från Brett Cannon i gh-115192.)För att bygga CPython krävs nu en kompilator med stöd för C11 Atomic Library, GCC:s inbyggda atomfunktioner eller MSVC:s interlocked intrinsics.
Autoconf 2.71 och aclocal 1.16.5 krävs nu för att regenerera
configure
-skriptet. (Bidrag från Christian Heimes i gh-89886 och av Victor Stinner i gh-112090.)SQLite 3.15.2 eller nyare krävs för att bygga tilläggsmodulen
sqlite3
. (Bidrag från Erlend Aasland i gh-105875.)CPython innehåller nu mimalloc library som standard. Det är licensierat under MIT-licensen; se mimalloc license. Den medföljande mimalloc har anpassade ändringar, se gh-113141 för detaljer. (Bidrag från Dino Viehland i gh-109914.)
Alternativet
configure
--with-system-libmpdec
har nuyes
som standard. Den medföljande kopian avlibmpdec
kommer att tas bort i Python 3.16.Python byggt med
configure
--with-trace-refs
(spårningsreferenser) är nu ABI-kompatibelt med Python release build och debug build. (Bidrag från Victor Stinner i gh-108634.)På POSIX-system innehåller filnamnen för pkg-config (
.pc
) nu ABI-flaggorna. Till exempel genererar free-threaded buildpython-3.13t.pc
och debug build genererarpython-3.13d.pc
.Funktionerna
errno
,fcntl
,grp
,md5
,pwd
,resource
,termios
,winsound
,_ctypes_test
,_multiprocessing.posixshmem
,_scproxy
,_stat
,_statistics
,_testconsole
,_testimportmultiple
och_uuid
C-tillägg är nu byggda med limited C API. (Bidrag från Victor Stinner i gh-85283.)
Portning till Python 3.13¶
I det här avsnittet listas tidigare beskrivna ändringar och andra buggfixar som kan kräva ändringar i din kod.
Ändringar i Python API¶
PEP 667 inför flera ändringar i semantiken för
locals()
ochf_locals
:Anrop av
locals()
i en optimized scope producerar nu en oberoende ögonblicksbild vid varje anrop och uppdaterar därför inte längre implicit tidigare returnerade referenser. För att få det gamla CPython-beteendet krävs nu uttryckliga anrop för att uppdatera den ursprungligen returnerade ordlistan med resultaten av efterföljande anrop tilllocals()
. Funktioner för exekvering av kod som implicit riktar sig tilllocals()
(t.ex.exec
ocheval
) måste ges en explicit namnrymd för att komma åt deras resultat i ett optimerat scope. (Ändrad som en del av PEP 667.)Anrop av
locals()
från en förståelse i modul- eller klasscope (inklusive viaexec
ellereval
) beter sig återigen som om förståelsen kördes som en oberoende nästlad funktion (dvs. de lokala variablerna från det innehållande scopet inkluderas inte). I Python 3.12 hade detta ändrats till att inkludera de lokala variablerna från det innehållande omfånget vid implementering av PEP 709. (Ändrat som en del av PEP 667.)Åtkomst till
FrameType.f_locals
i en optimized scope returnerar nu en skrivbar proxy snarare än en ögonblicksbild som uppdateras vid ospecificerade tidpunkter. Om en ögonblicksbild önskas måste den skapas explicit meddict
eller proxyns metod.copy()
. (Ändrad som en del av PEP 667.)
functools.partial
avger nu enFutureWarning
när den används som en metod. Beteendet kommer att ändras i framtida Python-versioner. Packa in den istaticmethod()
om du vill bevara det gamla beteendet. (Bidrag från Serhiy Storchaka i gh-121027.)Nu genereras ett
OSError
avgetpass.getuser()
om det inte går att hämta ett användarnamn, istället förImportError
på plattformar som inte är Unix ellerKeyError
på Unix-plattformar där lösenordsdatabasen är tom.Värdet på attributet
mode
igzip.GzipFile
är nu en sträng ('rb'
eller'wb'
) i stället för ett heltal (1
eller2
). Värdet på attributetmode
i det läsbara filliknande objektet som returneras avzipfile.ZipFile.open()
är nu'rb'
istället för'r'
. (Bidrag från Serhiy Storchaka i gh-115961.)mailbox.Maildir
ignorerar nu filer med en inledande punkt (.
). (Bidrag från Zackery Spytz i gh-65559.)pathlib.Path.glob()
ochrglob()
returnerar nu både filer och kataloger om ett mönster som slutar med ”**
” anges, i stället för bara kataloger. Lägg till ett efterföljande snedstreck för att behålla det tidigare beteendet och bara matcha kataloger.Modulen
threading
förväntar sig nu att modulen_thread
har en funktion_is_main_interpreter()
. Denna funktion tar inga argument och returnerarTrue
om den aktuella tolken är huvudtolken.Alla bibliotek eller program som tillhandahåller en anpassad
_thread
-modul måste tillhandahålla_is_main_interpreter()
, precis som modulens andra ”privata” attribut. (gh-112826.)
Förändringar i C API¶
Python.h
innehåller inte längre standardhuvudet<ieeefp.h>
. Det inkluderades för funktionenfinite()
, som nu tillhandahålls av huvudet<math.h>
. Det bör nu inkluderas explicit om det behövs. Ta också bort makrotHAVE_IEEEFP_H
. (Bidrag från Victor Stinner i gh-108765.)Python.h
innehåller inte längre dessa standardhuvudfiler:<time.h>
,<sys/select.h>
och<sys/time.h>
. Om det behövs ska de nu inkluderas explicit. Till exempel innehåller<time.h>
funktionernaclock()
ochgmtime()
,<sys/select.h>
innehåller funktionenselect()
och<sys/time.h>
innehåller funktionernafutimes()
,gettimeofday()
ochsetitimer()
. (Bidrag från Victor Stinner i gh-108765.)På Windows inkluderar inte längre
Python.h
standardhuvudfilen<stddef.h>
. Om det behövs bör den nu inkluderas explicit. Den tillhandahåller till exempeloffsetof()
-funktionen och typernasize_t
ochptrdiff_t
. Att inkludera<stddef.h>
explicit behövdes redan av alla andra plattformar, makrotHAVE_STDDEF_H
är endast definierat på Windows. (Bidrag från Victor Stinner i gh-108765.)Om makrot
Py_LIMITED_API
är definierat, är makrotPy_BUILD_CORE
,Py_BUILD_CORE_BUILTIN
ochPy_BUILD_CORE_MODULE
nu odefinierade av<Python.h>
. (Bidrag från Victor Stinner i gh-85283.)De gamla papperskorgsmakrot
Py_TRASHCAN_SAFE_BEGIN
ochPy_TRASHCAN_SAFE_END
har tagits bort. De bör ersättas av de nya makronaPy_TRASHCAN_BEGIN
ochPy_TRASHCAN_END
.En
tp_dealloc
-funktion som har de gamla makron, som t.ex:statiskt void mytype_dealloc(mytype *p) { PyObject_GC_UnTrack(p); Py_TRASHCAN_SAFE_BEGIN(p); ... Py_TRASHCAN_SAFE_END }
bör övergå till de nya makron enligt följande:
statiskt void mytype_dealloc(mytype *p) { PyObject_GC_UnTrack(p); Py_TRASHCAN_BEGIN(p, mytype_dealloc) ... Py_TRASHCAN_END }
Observera att
Py_TRASHCAN_BEGIN
har ett andra argument som bör vara den deallokeringsfunktion den befinner sig i. De nya makrona lades till i Python 3.8 och de gamla makrona togs bort i Python 3.11. (Bidrag från Irit Katriel i gh-105111.)
PEP 667 introducerar flera ändringar av ramrelaterade funktioner:
Effekterna av att mutera den ordbok som returneras från
PyEval_GetLocals()
i en optimized scope har ändrats. Nya dict-poster som läggs till på detta sätt kommer nu bara att vara synliga för efterföljandePyEval_GetLocals()
-anrop i den ramen, eftersomPyFrame_GetLocals()
,locals()
ochFrameType.f_locals
inte längre har tillgång till samma underliggande cachade dictionary. Ändringar som görs i poster för faktiska variabelnamn och namn som läggs till via write-through proxy-gränssnitt kommer att skrivas över vid efterföljande anrop tillPyEval_GetLocals()
i den ramen. Den rekommenderade koduppdateringen beror på hur funktionen användes, så se funktionens meddelande om utfasning för mer information.Anrop av
PyFrame_GetLocals()
i en optimized scope returnerar nu en skrivbar proxy snarare än en ögonblicksbild som uppdateras vid ospecificerade tidpunkter. Om en ögonblicksbild önskas måste den skapas explicit (t.ex. medPyDict_Copy()
), eller genom att anropa det nyaPyEval_GetFrameLocals()
API:et.PyFrame_FastToLocals()
ochPyFrame_FastToLocalsWithError()
har inte längre någon effekt. Anrop av dessa funktioner har varit överflödiga sedan Python 3.11, dåPyFrame_GetLocals()
först introducerades.PyFrame_LocalsToFast()
har inte längre någon effekt. Anrop av denna funktion är överflödig nu närPyFrame_GetLocals()
returnerar en skrivbar proxy för optimized scopes.
Python 3.13 tog bort många privata funktioner. Några av dem kan ersättas med dessa alternativ:
_PyDict_Pop()
:PyDict_Pop()
ellerPyDict_PopString()
;_PyDict_GetItemWithError()
:PyDict_GetItemRef()
;_PyErr_WriteUnraisableMsg()
:PyErr_FormatUnraisable()
;_PyEval_SetTrace()
:PyEval_SetTrace()
ellerPyEval_SetTraceAllThreads()
;_PyList_Extend()
:PyList_Extend()
;_PyLong_AsInt()
:PyLong_AsInt()
;_PyMem_RawStrdup()
:strdup()
;_PyMem_Strdup()
:strdup()
;_PyObject_ClearManagedDict()
:PyObject_ClearManagedDict()
;_PyObject_VisitManagedDict()
:PyObject_VisitManagedDict()
;_PyThreadState_UncheckedGet()
:PyThreadState_GetUnchecked()
;_PyTime_AsSecondsDouble()
:PyTime_AsSecondsDouble()
;_PyTime_GetMonotonicClock()
:PyTime_Monotonic()
ellerPyTime_MonotonicRaw()
;_PyTime_GetPerfCounter()
:PyTime_PerfCounter()
ellerPyTime_PerfCounterRaw()
;_PyTime_GetSystemClock()
:PyTime_Time()
ellerPyTime_TimeRaw()
;_PyTime_MAX
:PyTime_MAX
;_PyTime_MIN
:PyTime_MIN
;_PyTime_t
:PyTime_t
;_Py_HashPointer()
:Py_HashPointer()
;_Py_IsFinalizing()
:Py_IsFinalizing()
.
Projektet pythoncapi-compat kan användas för att få de flesta av dessa nya funktioner på Python 3.12 och äldre.
Ändringar i regressionstest¶
Python byggd med
configure
--with-pydebug
stöder nu kommandoradsoptionen-X presite=package.module
. Om det används specificerar det en modul som ska importeras tidigt i tolkens livscykel, innansite.py
exekveras. (Bidrag från Łukasz Langa i gh-110769.)