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
CGIHTTPRequestHandlerhar utgått sedan Python 3.13. Ingen direkt ersättare finns. Anything är bättre än CGI för att koppla en webbserver till en request-hanterare.Flaggan
--cgitill kommandoradsgränssnittet python -m http.server har utgått sedan Python 3.13.
-
load_module()metod: användexec_module()istället.
-
Funktionen
getdefaultlocale()har varit föråldrad sedan Python 3.11. Dess borttagning var ursprungligen planerad till Python 3.13 (gh-90817), men har skjutits upp till Python 3.15. Användgetlocale(),setlocale(), ochgetencoding()istället. (Bidrag från Hugo van Kemenade i gh-111187.)
-
PurePath.is_reserved()har utgått sedan Python 3.13. Användos.path.isreserved()för att upptäcka reserverade sökvägar i Windows.
plattform:java_ver()har utgått sedan Python 3.13. Denna funktion är endast användbar för Jython-stöd, har ett förvirrande API och är i stort sett otestad.
-
Argumentet check_home i
sysconfig.is_python_build()har utgått sedan Python 3.12.
-
RLock()kommer inte att ta några argument i Python 3.15. Att skicka några argument har varit föråldrat sedan Python 3.14, eftersom Python-versionen inte tillåter några argument, men C-versionen tillåter valfritt antal positionella eller nyckelordsargument och ignorerar varje argument.
-
types.CodeType: Accessingco_lnotabwas deprecated in PEP 626 since 3.10 and was planned to be removed in 3.12, but it only got a properDeprecationWarningin 3.12. Kan komma att tas bort i 3.15. (Bidrag från Nikita Sobolev i gh-101866.)
typning:Den odokumenterade syntaxen för nyckelordsargument för att skapa
NamedTuple-klasser (till exempelPoint = NamedTuple("Point", x=int, y=int)) har utgått sedan Python 3.13. Använd den klassbaserade syntaxen eller den funktionella syntaxen istället.När man använder den funktionella syntaxen för
TypedDicts, att inte skicka ett värde till parametern fields (TD = TypedDict("TD")) eller att skickaNone(TD = TypedDict("TD", None)) har varit föråldrat sedan Python 3.13. Användclass TD(TypedDict): passellerTD = TypedDict("TD", {})för att skapa en TypedDict med noll fält.Dekoratorfunktionen
typing.no_type_check_decorator()har varit föråldrad sedan Python 3.13. Efter åtta år i modulentypinghar den ännu inte fått stöd av någon större typkontroll.
våg:Metoderna
getmark(),setmark()ochgetmarkers()i klassernaWave_readochWave_writehar utgått sedan Python 3.13.
-
load_module()är föråldrad sedan Python 3.10. Användexec_module()istället. (Bidrag från Jiahao Li i gh-125746.)
Väntar på borttagning i Python 3.16¶
Importsystemet:
Att ställa in
__loader__på en modul medan man misslyckas med att ställa in__spec__.loaderär föråldrat. I Python 3.16 kommer__loader__inte längre att anges eller tas i beaktande av importsystemet eller standardbiblioteket.
-
Formatkoden
'u'(wchar_t) har utgått i dokumentation sedan Python 3.3 och vid körning sedan Python 3.13. Använd istället formatkoden'w'(Py_UCS4) för Unicode-tecken.
-
asyncio.iscoroutinefunction()är föråldrad och kommer att tas bort i Python 3.16; användinspect.iscoroutinefunction()istället. (Bidrag från Jiahao Li och Kumar Aditya i gh-122875.)asyncio-policysystemet är föråldrat och kommer att tas bort i Python 3.16. I synnerhet är följande klasser och funktioner föråldrade:Användare bör använda
asyncio.run()ellerasyncio.Runnermed loop_factory för att använda önskad implementering av händelseslingan.Till exempel, för att använda
asyncio.SelectorEventLooppå Windows:import asyncio async def main(): ... asyncio.run(main(), loop_factory=asyncio.SelectorEventLoop)
(Bidrag från Kumar Aditya i gh-127949.)
-
Bitvis invertering på booleska typer,
~Trueeller~Falsehar varit föråldrad sedan Python 3.12, eftersom det ger överraskande och ointuitiva resultat (\-2och\-1). Användnot xistället för den logiska negationen av en booleansk formel. I det sällsynta fallet att du behöver den bitvisa inverteringen av det underliggande heltalet, konvertera tillintexplicit (~int(x)).
-
Att anropa Python-implementationen av
functools.reduce()med funktion eller sekvens som nyckelordsargument är inte längre aktuellt sedan Python 3.14.
-
Stöd för anpassade logghanterare med strm-argumentet är föråldrat och planeras att tas bort i Python 3.16. Definiera hanterare med stream-argumentet istället. (Bidrag från Mariusz Felisiak i gh-115032.)
-
Giltiga tillägg börjar med en ’.’ eller är tomma för
mimetypes.MimeTypes.add_type(). Okommenterade tillägg är föråldrade och kommer att ge upphov till ettValueErrori Python 3.16. (Bidrag från Hugo van Kemenade i gh-75223.)
-
Undantaget
ExecErrorhar varit föråldrat sedan Python 3.14. Det har inte använts av någon funktion ishutilsedan Python 3.4, och är nu ett alias förRuntimeError.
-
Metoden
Class.get_methodshar utgått sedan Python 3.14.
sys:Funktionen
_enablelegacywindowsfsencoding()är föråldrad sedan Python 3.13. Använd miljövariabelnPYTHONLEGACYWINDOWSFSENCODINGistället.
-
Funktionen
sysconfig.expand_makefile_vars()är föråldrad sedan Python 3.14. Användvars-argumentet isysconfig.get_paths()istället.
-
Det odokumenterade och oanvända attributet
TarFile.tarfileär föråldrat sedan Python 3.13.
Väntar på borttagning i Python 3.17¶
typning:Före Python 3.14 implementerades gamla tiders unioner med hjälp av den privata klassen
typing._UnionGenericAlias. Denna klass behövs inte längre för implementationen, men den har behållits för bakåtkompatibilitet, med borttagning planerad till Python 3.17. Användare bör använda dokumenterade introspektionshjälpmedel somtyping.get_origin()ochtyping.get_args()istället för att förlita sig på privata implementationsdetaljer.
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,isochor. I en framtida version kommer det att ändras till ett syntaxfel. (gh-87999)Stöd för metoderna
__index__()och__int__()som returnerar icke-int-typer: dessa metoder kommer att behöva returnera en instans av en strikt underklass avint.Stöd för metoden
__float__()som returnerar en strikt underklass avfloat: dessa metoder måste returnera en instans avfloat.Stöd för metoden
__complex__()som returnerar en strikt underklass avcomplex: dessa metoder måste returnera en instans avcomplex.Delegering av
int()till metoden__trunc__().Att skicka ett komplext tal som real eller imag argument i
complex()-konstruktorn är nu föråldrat; det bör endast skickas som ett enda positionellt argument. (Bidrag från Serhiy Storchaka i gh-109218.)
calendar: Konstanternacalendar.Januaryochcalendar.Februaryär föråldrade och ersätts avcalendar.JANUARYochcalendar.FEBRUARY. (Bidrag från Prince Roshan i gh-103636.)codecs: användopen()istället förcodecs.open(). (gh-133038)codeobject.co_lnotab: använd istället metodencodeobject.co_lines().-
utcnow(): använddatetime.datetime.now(tz=datetime.UTC).utcfromtimestamp(): använddatetime.datetime.fromtimestamp(timestamp, tz=datetime.UTC).
gettext: Pluralvärdet måste vara ett heltal.-
cache_from_source()Parametern debug_override är föråldrad: använd parametern optimization istället.
-
EntryPointstuple-gränssnitt.Implicit
Nonepå returvärden.
logging: metodenwarn()har utgått sedan Python 3.3, användwarning()istället.mailbox: Användning av StringIO-ingång och textläge är föråldrad, använd BytesIO och binärt läge istället.os: Anroparos.register_at_fork()i flertrådad process.pydoc.ErrorDuringImport: Ett tupelvärde för parametern exc_info är föråldrat, använd en undantagsinstans.re: Strängare regler tillämpas nu för numeriska gruppreferenser och gruppnamn i reguljära uttryck. Endast sekvenser av ASCII-siffror accepteras nu som numeriska referenser. Gruppnamnet i bytesmönster och ersättningssträngar kan nu endast innehålla ASCII-bokstäver och siffror samt understreck. (Bidrag från Serhiy Storchaka i gh-91760.)modulerna
sre_compile,sre_constantsochsre_parse.shutil:rmtree():s parameter onerror är föråldrad i Python 3.12; använd istället parametern onexc.sslalternativ och protokoll:ssl.SSLContextutan protokollargument är föråldrad.ssl.SSLContext:set_npn_protocols()andselected_npn_protocol()are deprecated: use ALPN instead.ssl.OP_NO_SSL*alternativssl.OP_NO_TLS*alternativssl.PROTOCOL_SSLv3ssl.PROTOCOL_TLSssl.PROTOCOL_TLSv1ssl.PROTOCOL_TLSv1_1ssl.PROTOCOL_TLSv1_2ssl.TLSVersion.SSLv3ssl.TLSVersion.TLSv1ssl.TLSVersion.TLSv1_1
threadingmetoder:threading.Condition.notifyAll(): usenotify_all().threading.Event.isSet(): användis_set().threading.Thread.isDaemon(),threading.Thread.setDaemon(): använd attributetthreading.Thread.daemon.threading.Thread.getName(),threading.Thread.setName(): använd attributetthreading.Thread.name.threading.currentThread(): usethreading.current_thread().threading.activeCount(): usethreading.active_count().
Den interna klassen
typing._UnionGenericAliasanvänds inte längre för att implementeratyping.Union. För att bevara kompatibiliteten med användare som använder denna privata klass, kommer en kompatibilitets-shim att tillhandahållas åtminstone fram till Python 3.17. (Bidrag från Jelle Zijlstra i gh-105499.)unittest.IsolatedAsyncioTestCase: det är förkastligt att returnera ett värde som inte ärNonefrån ett testfall.urllib.parseföråldrade funktioner:urlparse()iställetsplitattr()splithost()splitnport()splitpasswd()splitport()splitquery()splittag()splittype()splituser()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 Nonetester.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_UNICODEtyp ochPy_UNICODE_WIDEmakro: Användwchar_tistället.PyUnicode_AsDecodedObject(): AnvändPyCodec_Decode()istället.PyUnicode_AsDecodedUnicode(): AnvändPyCodec_Decode()istället; Observera att vissa codecs (t.ex. ”base64”) kan returnera en annan typ änstr, t.ex.bytes.PyUnicode_AsEncodedObject(): AnvändPyCodec_Encode()istället.PyUnicode_AsEncodedUnicode(): AnvändPyCodec_Encode()istället; Observera att vissa codecs (t.ex. ”base64”) kan returnera en annan typ änbytes, t.ex.str.Python-initialiseringsfunktioner, föråldrade i Python 3.13:
Py_GetPath(): AnvändPyConfig_Get("module_search_paths")(sys.path) istället.Py_GetPrefix(): AnvändPyConfig_Get("base_prefix")(sys.base_prefix) istället. AnvändPyConfig_Get("prefix")(sys.prefix) om virtuella miljöer behöver hanteras.Py_GetExecPrefix(): AnvändPyConfig_Get("base_exec_prefix")(sys.base_exec_prefix) istället. AnvändPyConfig_Get("exec_prefix")(sys.exec_prefix) om virtuella miljöer behöver hanteras.Py_GetProgramFullPath(): AnvändPyConfig_Get("executable")(sys.executable) istället.Py_GetProgramName(): AnvändPyConfig_Get("executable")(sys.executable) istället.Py_GetPythonHome(): AnvändPyConfig_Get("home")eller miljövariabelnPYTHONHOMEistället.
Projektet pythoncapi-compat kan användas för att få
PyConfig_Get()på Python 3.13 och äldre.Funktioner för att konfigurera Pythons initialisering, föråldrad i Python 3.11:
PySys_SetArgvEx(): Ställ inPyConfig.argvistället.PySys_SetArgv(): Ställ inPyConfig.argvistället.Py_SetProgramName(): Ställ inPyConfig.program_nameistället.Py_SetPythonHome(): Ställ inPyConfig.homeistället.PySys_ResetWarnOptions(): Rensasys.warnoptionsochwarnings.filtersistället.
API:t
Py_InitializeFromConfig()bör användas medPyConfigistället.Variabler för global konfiguration:
Py_DebugFlag: AnvändPyConfig.parser_debugellerPyConfig_Get("parser_debug")istället.Py_VerboseFlag: AnvändPyConfig.verboseellerPyConfig_Get("verbose")istället.Py_QuietFlag: AnvändPyConfig.quietellerPyConfig_Get("quiet")istället.Py_InteractiveFlag: AnvändPyConfig.interactiveellerPyConfig_Get("interactive")istället.Py_InspectFlag: AnvändPyConfig.inspectellerPyConfig_Get("inspect")istället.Py_OptimizeFlag: AnvändPyConfig.optimization_levelellerPyConfig_Get("optimization_level")istället.Py_NoSiteFlag: AnvändPyConfig.site_importellerPyConfig_Get("site_import")istället.Py_BytesWarningFlag: AnvändPyConfig.bytes_warningellerPyConfig_Get("bytes_warning")istället.Py_FrozenFlag: AnvändPyConfig.pathconfig_warningsellerPyConfig_Get("pathconfig_warnings")istället.Py_IgnoreEnvironmentFlag: AnvändPyConfig.use_environmentellerPyConfig_Get("use_environment")istället.Py_DontWriteBytecodeFlag: AnvändPyConfig.write_bytecodeellerPyConfig_Get("write_bytecode")istället.Py_NoUserSiteDirectory: AnvändPyConfig.user_site_directoryellerPyConfig_Get("user_site_directory")istället.Py_UnbufferedStdioFlag: AnvändPyConfig.buffered_stdioellerPyConfig_Get("buffered_stdio")istället.Py_HashRandomizationFlag: AnvändPyConfig.use_hash_seedochPyConfig.hash_seedellerPyConfig_Get("hash_seed")istället.Py_IsolatedFlag: AnvändPyConfig.isolatedellerPyConfig_Get("isolated")istället.Py_LegacyWindowsFSEncodingFlag: AnvändPyPreConfig.legacy_windows_fs_encodingellerPyConfig_Get("legacy_windows_fs_encoding")istället.Py_LegacyWindowsStdioFlag: AnvändPyConfig.legacy_windows_stdioellerPyConfig_Get("legacy_windows_stdio")istället.Py_FileSystemDefaultEncoding,Py_HasFileSystemDefaultEncoding: AnvändPyConfig.filesystem_encodingellerPyConfig_Get("filesystem_encoding")istället.Py_FileSystemDefaultEncodeErrors: AnvändPyConfig.filesystem_errorsellerPyConfig_Get("filesystem_errors")istället.Py_UTF8Mode: AnvändPyPreConfig.utf8_modeellerPyConfig_Get("utf8_mode")istället. (sePy_PreInitialize())
API:et
Py_InitializeFromConfig()bör användas medPyConfigför att ställa in dessa alternativ. Eller så kanPyConfig_Get()användas för att hämta dessa alternativ vid körning.
Väntar på borttagning i Python 3.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_shashmember: anropaPyObject_Hash()istället.API för lokal lagring av trådar (TLS):
PyThread_create_key(): AnvändPyThread_tss_alloc()istället.PyThread_delete_key(): AnvändPyThread_tss_free()istället.PyThread_set_key_value(): AnvändPyThread_tss_set()istället.PyThread_get_key_value(): AnvändPyThread_tss_get()istället.PyThread_delete_key_value(): AnvändPyThread_tss_delete()istället.PyThread_ReInitTLS(): Behövs inte sedan Python 3.7.