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:

Förbättringar av Python-datamodellen:

Betydande förbättringar i standardbiblioteket:

Förbättringar av säkerheten:

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:

Stöd för 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 och xdrlib.

  • 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 och typing.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övariablerna NO_COLOR och FORCE_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övariabeln PYTHON_JIT=0.

  • yes-off: Bygg JIT men inaktivera den som standard. För att aktivera JIT vid körning, skicka miljövariabeln PYTHON_JIT=1.

  • tolk: Aktiverar Tier 2-tolken men inaktiverar JIT. Tolken kan avaktiveras genom att köra med PYTHON_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

PEP 744

(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.)

Se även

PEP 730, PEP 738

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 i sqlalchemy.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
    

    (Bidrag från Jelle Zijlstra i gh-109118 och gh-118160.)

  • Framtida satser utlöses inte längre av relativa importer av modulen __future__, vilket innebär att satser av formen from .__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 i except-block när den globala används i else-blocket. Tidigare gav detta upphov till ett felaktigt SyntaxError. (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 nya PYTHON_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 genom self.<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() och eval() 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 liknar ast.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ån RuntimeError och som används för att signalera när operationer blockeras under finalization. Följande anropsbara filer ger nu PythonFinalizationError, istället för RuntimeError:

    (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 och mode för komprimerade och arkiverade filliknande objekt i modulerna bz2, lzma, tarfile och zipfile. (Bidrag från Serhiy Storchaka i gh-115961.)

Nya moduler

Förbättrade moduler

argparse

  • Lägg till parametern deprecated i metoderna add_argument() och add_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 en MutableSequence genom att implementera metoden clear(). (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 ett expr_context-fält utelämnas, kommer det som standard att sättas till Load(). (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 definiera AST._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 till compile(). 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 och QueueShutDown för att hantera köavslut. (Bidrag från Laurie Opperman och Yves Duprat i gh-104228.)

  • Lägg till metoderna Server.close_clients() och Server.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 uppgiftens cancel()-metod. Detta säkerställer att ett CancelledError kommer att uppstå vid nästa await, 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 inaktiv TaskGroup, kommer den givna coroutinen att stängas (vilket förhindrar en RuntimeWarning 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 till Task 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

compileall

concurrent.futures

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

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 av super().__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 standard dbm-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() och ndbm.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 av Instruction, i det nya fältet cache_info. Argumentet show_caches till get_instructions() är föråldrat och har inte längre någon effekt. (Bidrag från Irit Katriel i gh-112962.)

doctest

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, ange verify_generated_headers. (Bidrag från Bas Bloemsaat och Petr Viktorin i gh-121650.)

  • getaddresses() och parseaddr() 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 (standard True). För att få det gamla beteendet (acceptera felaktig inmatning), använd strict=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

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 utrustade Traversable API:et. Det finns dock nu ingen plan på att ta bort det. (Bidrag från Petr Viktorin i gh-116608.)

io

ipadress

itertools

  • batched() har en ny strict parameter, som ger upphov till ett ValueError 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äknar x * y + z med endast en enda omgång, och undviker sålunda någon mellanliggande förlust av precision. Den omsluter funktionen fma() 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

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 ny seekable()-metod som kan användas när ett sökbart filliknande objekt krävs. Metoden seek() 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

os

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

pdb

  • breakpoint() och set_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är breakpoint() ä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är sys.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 kommandot exceptions [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.)

slumpvis

re

  • Byt namn på re.error till PatternError för ökad tydlighet. re.error behålls för bakåtkompatibilitet.

shutil

  • Stöd för nyckelordsargumenten dir_fd och follow_symlinks i chown(). (Bidrag från Berker Peksag och Tahia K i gh-62308)

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

ssl

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 av kde(). (Bidrag från Raymond Hettinger i gh-115863.)

delprocess

  • Modulen subprocess använder nu funktionen posix_spawn() i fler situationer.

    När close_fds är True (standard) kommer posix_spawn() att användas när C-biblioteket tillhandahåller posix_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 Linux vfork()-baserade koden.

    En privat kontrollknapp subprocess._USE_POSIX_SPAWN kan sättas till False om du behöver tvinga subprocess att aldrig använda posix_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

tid

  • I Windows använder monotonic() nu klockan QueryPerformanceCounter() med en upplösning på 1 mikrosekund, istället för klockan GetTickCount64() som har en upplösning på 15,6 millisekunder. (Bidrag från Victor Stinner i gh-88494.)

  • I Windows använder time() nu klockan GetSystemTimePreciseAsFileTime() med en upplösning på 1 mikrosekund, istället för klockan GetSystemTimeAsFileTime() 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(), och tk_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 exempel w.wm_attributes('alpha') och tillåter att attribut och värden anges som nyckelordsargument, till exempel w.wm_attributes(alpha=0.5). (Bidrag från Serhiy Storchaka i gh-43457.)

  • wm_attributes() kan nu returnera attribut som en dict, 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 enkel int när den nya valfria parametern return_ints används. Annars returneras den enskilda räkningen som en 1-tupel eller None. (Bidrag från Serhiy Storchaka i gh-97928.)

  • Stöd för elementtypen ”vsapi” i metoden element_create() i tkinter.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 till PhotoImage 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-metoderna copy(), zoom() och subsample(). Lägg till parametrarna zoom och subsample i PhotoImage-metoden copy(). (Bidrag från Serhiy Storchaka i gh-118225.)

  • Lägg till PhotoImage-metoderna read() för att läsa en bild från en fil och data() för att hämta bilddata. Lägg till parametrarna background och grayscale i metoden write(). (Bidrag från Serhiy Storchaka i gh-118271.)

spårning

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 ett TypedDict-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 modulen typing. (Bidrag från Jelle Zijlstra i gh-116126.)

  • Lägg till get_protocol_members() för att returnera uppsättningen medlemmar som definierar en typing.Protocol. (Bidrag från Jelle Zijlstra i gh-104873.)

  • Lägg till is_protocol() för att kontrollera om en klass är en Protocol. (Bidrag från Jelle Zijlstra i gh-104873.)

  • ClassVar kan nu nestas i Final, och vice versa. (Bidrag från Mehdi Drissi i gh-89547.)

unicodedata

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 och create()), och opt-out via CLI, med --without-scm-ignore-files. (Bidrag från Brett Cannon i gh-108125.)

varningar

xml

zipimport

  • Lägg till stöd för filer i ZIP64-format. Alla älskar stora datamängder, eller hur? (Bidrag från Tim Hatch i gh-94146.)

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 av re och contextlib. Andra moduler som har fått snabbare importtid är email.utils, enum, functools, importlib.metadata och threading. (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 funktionen posix_spawn() i fler situationer, inklusive när close_fds är True (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 och cgitb

    • cgi.FieldStorage kan vanligtvis ersättas med urllib.parse.parse_qsl() för GET och HEAD förfrågningar, och email.message-modulen eller multipart-biblioteket för POST och PUT förfrågningar.

    • cgi.parse() kan ersättas genom att anropa urllib.parse.parse_qs() direkt på den önskade frågesträngen, såvida inte indata är multipart/form-data, som bör ersättas enligt beskrivningen nedan för cgi.parse_multipart().

    • cgi.parse_header() kan ersättas med funktionaliteten i paketet email, som implementerar samma MIME RFC:er. Till exempel med email.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 paketet email, som implementerar samma MIME RFC:er, eller med biblioteket multipart. Till exempel klasserna email.message.EmailMessage och email.message.Message.

    • standard-cgi: och standard-cgitb: Använd omfördelningen av biblioteken cgi och cgitb från PyPI.

  • crypt och det privata tillägget _crypt. Modulen hashlib 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 funktionen puremagic.what() användas för att ersätta funktionen imghdr.what() för alla filformat som stöddes av imghdr.

    • standard-imghdr: Använd omfördelningen av biblioteket imghdr från PyPI.

  • mailcap: Använd modulen mimetypes istället.

  • msilib

  • nis

  • nntplib: Använd istället biblioteket pynntp från PyPI.

  • ossaudiodev: För uppspelning av ljud, använd istället biblioteket pygame från PyPI.

  • pipes: Använd modulen subprocess istället. Använd shlex.quote() för att ersätta den odokumenterade funktionen pipes.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.

  • uu: Använd modulen base64 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” en classmethod, ö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 anropar frame.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

lokal

  • Ta bort locale.resetlocale()-funktionen, föråldrad i Python 3.11. Använd locale.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, och opcode.MAX_PSEUDO_OPCODE, som lades till i Python 3.12, men varken dokumenterades eller exponerades genom dis, 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 hur argparse fungerar som innebär att den lägre modulen optparse kan ge en bättre grund för att skriva argumentbehandlingsbibliotek och för att implementera kommandoradsapplikationer som mer strikt än argparse följer olika Unix kommandoradsbehandlingskonventioner som har sitt ursprung i beteendet hos C getopt()-funktionen . (Bidrag från Alyssa Coghlan och Serhiy Storchaka i gh-126180.)

sökväg

  • Ta bort möjligheten att använda Path-objekt som kontexthanterare. Denna funktionalitet var föråldrad och har inte haft någon effekt sedan Python 3.9. (Bidrag från Barney Gale i gh-83863.)

re

  • Ta bort den odokumenterade, föråldrade och trasiga funktionen re.template() och flaggan re.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 och typing.re, föråldrade sedan Python 3.8. Objekten i dessa namnrymder kan importeras direkt från modulen typing. (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

urllib

webbläsare

  • Ta bort den otestade och odokumenterade MacOSX-klassen, utfasad i Python 3.11. Använd MacOSXOSAScript-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 attributet MacOSXOSAScript.name. (Bidrag från Nikita Sobolev i gh-105546.)

Nya utfasningar

  • Användardefinierade funktioner:

    • Avskaffa tilldelning till en funktions __code__-attribut, där det nya kodobjektets typ inte överensstämmer med funktionens typ. De olika typerna är: vanlig funktion, generator, async-generator och coroutine. (Bidrag från Irit Katriel i gh-81137.)

  • array:

    • Avskaffa formatkoden 'u' (wchar_t) vid körning. Denna formatkod har varit föråldrad i dokumentation sedan Python 3.3 och kommer att tas bort i Python 3.16. Använd formatkoden 'w' (Py_UCS4) för Unicode-tecken istället. (Bidrag från Hugo van Kemenade i gh-80480.)

  • ctypes:

    • 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 av typ * längd. (Bidrag från Victor Stinner i gh-105733.)

  • decimal:

    • Avskaffa den icke-standardiserade och odokumenterade Decimal-formatspecificeraren 'N', som endast stöds i decimal-modulens C-implementering. (Bidrag från Serhiy Storchaka i gh-89902.)

  • dis:

    • Avveckla HAVE_ARGUMENT-avgränsaren. Kontrollera medlemskap i hasarg istället. (Bidrag från Irit Katriel i gh-109319.)

  • gettext:

    • 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() och glob1(). Använd glob() och skicka ett path-like object som anger rotkatalogen till parametern root_dir istället. (Bidrag från Barney Gale i gh-117337.)

  • http.server:

    • 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.)

  • mimetypes:

  • re:

    • Avstå från att skicka de valfria argumenten maxsplit, count eller flags som positionella argument till modulnivåfunktionerna split(), sub() och subn(). Dessa parametrar kommer att bli keyword-only i en framtida version av Python. (Bidrag från Serhiy Storchaka i gh-56166.)

  • pathlib:

  • 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.)

  • pydoc:

    • Avveckla den odokumenterade funktionen ispackage(). (Bidrag från Zackery Spytz i gh-64020.)

  • sqlite3:

  • sys:

  • tarfile:

    • Avveckla det odokumenterade och oanvända attributet TarFile.tarfile, som ska tas bort i Python 3.16. (Bidrag från gh-115256.)

  • traceback:

  • 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- eller typing.TypedDict-klass, och avstå från att skicka None 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änd class NT(NamedTuple): pass eller NT = NamedTuple("NT", ()). För att skapa en TypedDict-klass med noll fält, använd class TD(TypedDict): pass eller TD = 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 modulen typing 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ån typing.__all__, och en DeprecationWarning 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:

Väntar på borttagning i Python 3.14

  • argparse: Parametrarna type, choices och metavar i argparse.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 en DeprecationWarning 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.)

  • asyncio:

    • Barnvaktklasserna asyncio.MultiLoopChildWatcher, asyncio.FastChildWatcher, asyncio.AbstractChildWatcher och asyncio.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() och asyncio.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 en DeprecationWarning 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åldrad collections.abc.ByteString. Föredra Sequence eller Buffer. För användning vid typning, föredra en union, som bytes | bytearray, eller collections.abc.Buffer. (Bidrag från Shantanu Jain i gh-91896.)

  • email: Föråldrad isdst parameter i email.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:erna get_context() eller set_start_method() för att uttryckligen ange när din kod kräver 'fork'. Se Sammanhang och startmetoder.

  • pathlib: is_relative_to() och relative_to(): att skicka ytterligare argument är föråldrat.

  • pkgutil: pkgutil.find_loader() och pkgutil.get_loader() ger nu upphov till DeprecationWarning; använd importlib.util.find_spec() istället. (Bidrag från Nikita Sobolev i gh-97850.)

  • pty:

  • sqlite3:

  • typing: typing.ByteString, föråldrad sedan Python 3.9, orsakar nu att en DeprecationWarning 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)

  • ctypes:

    • Den odokumenterade ctypes.SetPointerType()-funktionen är föråldrad sedan Python 3.13.

  • http.server:

    • 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.

  • importlib:

    • load_module() metod: använd exec_module() istället.

  • locale:

  • pathlib:

  • 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.

  • sysconfig:

  • threading:

    • 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:

  • typning:

    • Den odokumenterade syntaxen för nyckelordsargument för att skapa NamedTuple-klasser (till exempel Point = NamedTuple("Point", x=int, y=int)) har utgått sedan Python 3.13. Använd den klassbaserade syntaxen eller den funktionella syntaxen istället.

    • När man använder den funktionella syntaxen för TypedDicts, att inte skicka ett värde till parametern fields (TD = TypedDict("TD")) eller att skicka None (TD = TypedDict("TD", None)) har varit föråldrat sedan Python 3.13. Använd class TD(TypedDict): pass eller TD = 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 modulen typing har den ännu inte fått stöd av någon större typkontroll.

  • våg:

  • zipimport:

Väntar på borttagning i Python 3.16

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 som typing.get_origin() och typing.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.

  • argparse:

    • 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.

  • builtins:

    • bool(NotImplemented).

    • Generatorer: throw(type, exc, tb) och athrow(type, exc, tb) signaturen är förbrukad: använd throw(exc) och athrow(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 nyckelorden and, else, for, if, in, is och or. 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 av int.

    • Stöd för metoden __float__() som returnerar en strikt underklass av float: dessa metoder måste returnera en instans av float.

    • Stöd för metoden __complex__() som returnerar en strikt underklass av complex: dessa metoder måste returnera en instans av complex.

    • 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: Konstanterna calendar.January och calendar.February är föråldrade och ersätts av calendar.JANUARY och calendar.FEBRUARY. (Bidrag från Prince Roshan i gh-103636.)

  • codecs: använd open() istället för codecs.open(). (gh-133038)

  • codeobject.co_lnotab: använd istället metoden codeobject.co_lines().

  • datetime:

    • utcnow(): använd datetime.datetime.now(tz=datetime.UTC).

    • utcfromtimestamp(): använd datetime.datetime.fromtimestamp(timestamp, tz=datetime.UTC).

  • gettext: Pluralvärdet måste vara ett heltal.

  • importlib:

    • cache_from_source() Parametern debug_override är föråldrad: använd parametern optimization istället.

  • importlib.metadata:

    • EntryPoints tuple-gränssnitt.

    • Implicit None på returvärden.

  • logging: metoden warn() har utgått sedan Python 3.3, använd warning() 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: Anropar os.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 och sre_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() and selected_npn_protocol() are deprecated: use ALPN instead.

    • ssl.OP_NO_SSL* alternativ

    • ssl.OP_NO_TLS* alternativ

    • ssl.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:

  • typing.Text (gh-92332).

  • Den interna klassen typing._UnionGenericAlias används inte längre för att implementera typing.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 är None från ett testfall.

  • urllib.parse föråldrade funktioner: urlparse() istället

    • splitattr()

    • 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 en Element är föråldrat. I en framtida version kommer det alltid att returnera True. Föredra istället explicita len(elem) eller elem is not None tester.

  • sys._clear_type_cache() är föråldrad: använd sys._clear_internal_caches() istället.

CPython Bytecode-ändringar

  • Oparg för YIELD_VALUE är nu 1 om yield är en del av en yield-from eller await, och 0 annars. Oparg för RESUME ä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

Ändrade C API:er

Ändringar i API för begränsad C

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 till cc: @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änd PyObject_CheckBuffer() för att testa om objektet stöder buffertprotokollet. Observera att PyObject_CheckBuffer() inte garanterar att PyObject_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änd PyObject_GetBuffer() och PyBuffer_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änd PyObject_GetBuffer() och PyBuffer_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:

    (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:

    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() och PyEval_ReleaseLock(), föråldrade i Python 3.2. De uppdaterade inte det aktuella trådtillståndet. De kan ersättas med:

    (Bidrag från Victor Stinner i gh-105182.)

  • Ta bort funktionen PyEval_ThreadsInitialized(), föråldrad i Python 3.9. Sedan Python 3.7 skapar Py_Initialize() alltid GIL: att anropa PyEval_InitThreads() gör ingenting och PyEval_ThreadsInitialized() returnerar alltid icke-noll. (Bidrag från Victor Stinner i gh-105182.)

  • Ta bort _PyInterpreterState_Get()-aliaset till PyInterpreterState_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änd PyObject_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 och Py_TRASHCAN_SAFE_END. Ersätt båda med de nya makrona Py_TRASHCAN_BEGIN och Py_TRASHCAN_END. (Bidrag från Irit Katriel i gh-105111.)

Föråldrade C API:er

Väntar på borttagning i Python 3.14

Väntar på borttagning i Python 3.15

Väntar på borttagning i Python 3.16

  • Den medföljande kopian av libmpdec.

Väntar på borttagning i Python 3.18

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.

Förändringar i byggning

  • arm64-apple-ios och arm64-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 och x86_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 nu yes som standard. Den medföljande kopian av libmpdec 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 build python-3.13t.pc och debug build genererar python-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() och f_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 till locals(). Funktioner för exekvering av kod som implicit riktar sig till locals() (t.ex. exec och eval) 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 via exec eller eval) 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 med dict eller proxyns metod .copy(). (Ändrad som en del av PEP 667.)

  • functools.partial avger nu en FutureWarning när den används som en metod. Beteendet kommer att ändras i framtida Python-versioner. Packa in den i staticmethod() om du vill bevara det gamla beteendet. (Bidrag från Serhiy Storchaka i gh-121027.)

  • Nu genereras ett OSError av getpass.getuser() om det inte går att hämta ett användarnamn, istället för ImportError på plattformar som inte är Unix eller KeyError på Unix-plattformar där lösenordsdatabasen är tom.

  • Värdet på attributet mode i gzip.GzipFile är nu en sträng ('rb' eller 'wb') i stället för ett heltal (1 eller 2). Värdet på attributet mode i det läsbara filliknande objektet som returneras av zipfile.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() och rglob() 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 returnerar True 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 funktionen finite(), som nu tillhandahålls av huvudet <math.h>. Det bör nu inkluderas explicit om det behövs. Ta också bort makrot HAVE_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> funktionerna clock() och gmtime(), <sys/select.h> innehåller funktionen select() och <sys/time.h> innehåller funktionerna futimes(), gettimeofday() och setitimer(). (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 exempel offsetof()-funktionen och typerna size_t och ptrdiff_t. Att inkludera <stddef.h> explicit behövdes redan av alla andra plattformar, makrot HAVE_STDDEF_H är endast definierat på Windows. (Bidrag från Victor Stinner i gh-108765.)

  • Om makrot Py_LIMITED_API är definierat, är makrot Py_BUILD_CORE, Py_BUILD_CORE_BUILTIN och Py_BUILD_CORE_MODULE nu odefinierade av <Python.h>. (Bidrag från Victor Stinner i gh-85283.)

  • De gamla papperskorgsmakrot Py_TRASHCAN_SAFE_BEGIN och Py_TRASHCAN_SAFE_END har tagits bort. De bör ersättas av de nya makrona Py_TRASHCAN_BEGIN och Py_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.)

Ä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, innan site.py exekveras. (Bidrag från Łukasz Langa i gh-110769.)