Utfasningar¶
Väntar på borttagning i Python 3.15¶
Importsystemet:
Att ställa in
__cached__
på en modul samtidigt som man misslyckas med att ställa in__spec__.cached
är föråldrat. I Python 3.15 kommer__cached__
inte längre att anges eller tas i beaktande av importsystemet eller standardbiblioteket. (gh-97879)Att ställa in
__package__
på en modul utan att ställa in__spec__.parent
är föråldrat. I Python 3.15 kommer__package__
inte längre att anges eller tas i beaktande av importsystemet eller standardbiblioteket. (gh-97879)
-
Den odokumenterade
ctypes.SetPointerType()
-funktionen är föråldrad sedan Python 3.13.
-
Den föråldrade och sällan använda
CGIHTTPRequestHandler
har utgått sedan Python 3.13. Ingen direkt ersättare finns. Anything är bättre än CGI för att koppla en webbserver till en request-hanterare.Flaggan
--cgi
till kommandoradsgränssnittet python -m http.server har utgått sedan Python 3.13.
-
load_module()
metod: användexec_module()
istället.
-
Funktionen
getdefaultlocale()
har varit föråldrad sedan Python 3.11. Dess borttagning var ursprungligen planerad till Python 3.13 (gh-90817), men har skjutits upp till Python 3.15. Användgetlocale()
,setlocale()
, ochgetencoding()
istället. (Bidrag från Hugo van Kemenade i gh-111187.)
-
PurePath.is_reserved()
har utgått sedan Python 3.13. Användos.path.isreserved()
för att upptäcka reserverade sökvägar i Windows.
plattform
:java_ver()
har utgått sedan Python 3.13. Denna funktion är endast användbar för Jython-stöd, har ett förvirrande API och är i stort sett otestad.
-
Argumentet check_home i
sysconfig.is_python_build()
har utgått sedan Python 3.12.
-
RLock()
kommer inte att ta några argument i Python 3.15. Att skicka några argument har varit föråldrat sedan Python 3.14, eftersom Python-versionen inte tillåter några argument, men C-versionen tillåter valfritt antal positionella eller nyckelordsargument och ignorerar varje argument.
-
types.CodeType
: Accessingco_lnotab
was deprecated in PEP 626 since 3.10 and was planned to be removed in 3.12, but it only got a properDeprecationWarning
in 3.12. Kan komma att tas bort i 3.15. (Bidrag från Nikita Sobolev i gh-101866.)
typning
:Den odokumenterade syntaxen för nyckelordsargument för att skapa
NamedTuple
-klasser (till exempelPoint = NamedTuple("Point", x=int, y=int)
) har utgått sedan Python 3.13. Använd den klassbaserade syntaxen eller den funktionella syntaxen istället.När man använder den funktionella syntaxen för
TypedDict
s, att inte skicka ett värde till parametern fields (TD = TypedDict("TD")
) eller att skickaNone
(TD = TypedDict("TD", None)
) har varit föråldrat sedan Python 3.13. Användclass TD(TypedDict): pass
ellerTD = TypedDict("TD", {})
för att skapa en TypedDict med noll fält.Dekoratorfunktionen
typing.no_type_check_decorator()
har varit föråldrad sedan Python 3.13. Efter åtta år i modulentyping
har den ännu inte fått stöd av någon större typkontroll.
våg
:Metoderna
getmark()
,setmark()
ochgetmarkers()
i klassernaWave_read
ochWave_write
har utgått sedan Python 3.13.
-
load_module()
är föråldrad sedan Python 3.10. Användexec_module()
istället. (Bidrag från Jiahao Li i gh-125746.)
Väntar på borttagning i Python 3.16¶
Importsystemet:
Att ställa in
__loader__
på en modul medan man misslyckas med att ställa in__spec__.loader
är föråldrat. I Python 3.16 kommer__loader__
inte längre att anges eller tas i beaktande av importsystemet eller standardbiblioteket.
-
Formatkoden
'u'
(wchar_t
) har utgått i dokumentation sedan Python 3.3 och vid körning sedan Python 3.13. Använd istället formatkoden'w'
(Py_UCS4
) för Unicode-tecken.
-
asyncio.iscoroutinefunction()
är föråldrad och kommer att tas bort i Python 3.16; användinspect.iscoroutinefunction()
istället. (Bidrag från Jiahao Li och Kumar Aditya i gh-122875.)asyncio
-policysystemet är föråldrat och kommer att tas bort i Python 3.16. I synnerhet är följande klasser och funktioner föråldrade:Användare bör använda
asyncio.run()
ellerasyncio.Runner
med loop_factory för att använda önskad implementering av händelseslingan.Till exempel, för att använda
asyncio.SelectorEventLoop
på Windows:import asyncio async def main(): ... asyncio.run(main(), loop_factory=asyncio.SelectorEventLoop)
(Bidrag från Kumar Aditya i gh-127949.)
-
Bitvis invertering på booleska typer,
~True
eller~False
har varit föråldrad sedan Python 3.12, eftersom det ger överraskande och ointuitiva resultat (-2
och-1
). Användnot x
istället för den logiska negationen av en booleansk formel. I det sällsynta fallet att du behöver den bitvisa inverteringen av det underliggande heltalet, konvertera tillint
explicit (~int(x)
).
-
Att anropa Python-implementationen av
functools.reduce()
med funktion eller sekvens som nyckelordsargument är inte längre aktuellt sedan Python 3.14.
-
Stöd för anpassade logghanterare med strm-argumentet är föråldrat och planeras att tas bort i Python 3.16. Definiera hanterare med stream-argumentet istället. (Bidrag från Mariusz Felisiak i gh-115032.)
-
Giltiga tillägg börjar med en ’.’ eller är tomma för
mimetypes.MimeTypes.add_type()
. Okommenterade tillägg är föråldrade och kommer att ge upphov till ettValueError
i Python 3.16. (Bidrag från Hugo van Kemenade i gh-75223.)
-
Undantaget
ExecError
har varit föråldrat sedan Python 3.14. Det har inte använts av någon funktion ishutil
sedan Python 3.4, och är nu ett alias förRuntimeError
.
-
Metoden
Class.get_methods
har utgått sedan Python 3.14.
sys
:Funktionen
_enablelegacywindowsfsencoding()
är föråldrad sedan Python 3.13. Använd miljövariabelnPYTHONLEGACYWINDOWSFSENCODING
istället.
-
Funktionen
sysconfig.expand_makefile_vars()
är föråldrad sedan Python 3.14. Användvars
-argumentet isysconfig.get_paths()
istället.
-
Det odokumenterade och oanvända attributet
TarFile.tarfile
är föråldrat sedan Python 3.13.
Väntar på borttagning i Python 3.17¶
typning
:Före Python 3.14 implementerades gamla tiders unioner med hjälp av den privata klassen
typing._UnionGenericAlias
. Denna klass behövs inte längre för implementationen, men den har behållits för bakåtkompatibilitet, med borttagning planerad till Python 3.17. Användare bör använda dokumenterade introspektionshjälpmedel somtyping.get_origin()
ochtyping.get_args()
istället för att förlita sig på privata implementationsdetaljer.
Väntar på borttagning i Python 3.19¶
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öråldrad: 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()
splitvalue()
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.
C API-utfasningar¶
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.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.