Deprecations

Pending Removal in Python 3.14

Pending Removal in Python 3.15

  • The import system:

    • Setting__cached__ on a module whilefailing to set__spec__.cachedis deprecated. In Python 3.15,__cached__ will cease to be set ortake into consideration by the import system or standard library. (gh-97879)

    • Setting__package__ on a module whilefailing to set__spec__.parentis deprecated. In Python 3.15,__package__ will cease to be set ortake into consideration by the import system or standard library. (gh-97879)

  • ctypes:

    • The undocumentedctypes.SetPointerType() functionhas been deprecated since Python 3.13.

  • http.server:

    • The obsolete and rarely usedCGIHTTPRequestHandlerhas been deprecated since Python 3.13.No direct replacement exists.Anything is better than CGI to interfacea web server with a request handler.

    • The--cgi flag to thepython -m http.servercommand-line interface has been deprecated since Python 3.13.

  • importlib:

    • load_module() method: useexec_module() instead.

  • locale:

  • pathlib:

  • platform:

    • java_ver() has been deprecated since Python 3.13.This function is only useful for Jython support, has a confusing API,and is largely untested.

  • sysconfig:

  • threading:

    • RLock() will take no arguments in Python 3.15.Passing any arguments has been deprecated since Python 3.14,as the Python version does not permit any arguments,but the C version allows any number of positional or keyword arguments,ignoring every argument.

  • types:

  • typing:

    • The undocumented keyword argument syntax for creatingNamedTuple classes(e.g.Point=NamedTuple("Point",x=int,y=int))has been deprecated since Python 3.13.Use the class-based syntax or the functional syntax instead.

    • When using the functional syntax ofTypedDicts, failingto pass a value to thefields parameter (TD=TypedDict("TD")) orpassingNone (TD=TypedDict("TD",None)) has been deprecatedsince Python 3.13.UseclassTD(TypedDict):pass orTD=TypedDict("TD",{})to create a TypedDict with zero field.

    • Thetyping.no_type_check_decorator() decorator functionhas been deprecated since Python 3.13.After eight years in thetyping module,it has yet to be supported by any major type checker.

  • wave:

Pending removal in Python 3.16

  • The import system:

    • Setting__loader__ on a module whilefailing to set__spec__.loaderis deprecated. In Python 3.16,__loader__ will cease to be set ortaken into consideration by the import system or the standard library.

  • array:

    • The'u' format code (wchar_t)has been deprecated in documentation since Python 3.3and at runtime since Python 3.13.Use the'w' format code (Py_UCS4)for Unicode characters instead.

  • asyncio:

  • builtins:

    • Bitwise inversion on boolean types,~True or~Falsehas been deprecated since Python 3.12,as it produces surprising and unintuitive results (-2 and-1).Usenotx instead for the logical negation of a Boolean.In the rare case that you need the bitwise inversion ofthe underlying integer, convert toint explicitly (~int(x)).

  • shutil:

    • TheExecError exceptionhas been deprecated since Python 3.14.It has not been used by any function inshutil since Python 3.4,and is now an alias ofRuntimeError.

  • symtable:

  • sys:

  • tarfile:

    • The undocumented and unusedTarFile.tarfile attributehas been deprecated since Python 3.13.

Pending Removal in Future Versions

The following APIs will be removed in the future,although there is currently no date scheduled for their removal.

  • argparse: Nesting argument groups and nesting mutually exclusivegroups are deprecated.

  • builtins:

    • bool(NotImplemented).

    • Generators:throw(type,exc,tb) andathrow(type,exc,tb)signature is deprecated: usethrow(exc) andathrow(exc) instead,the single argument signature.

    • Currently Python accepts numeric literals immediately followed by keywords,for example0inx,1orx,0if1else2. It allows confusing andambiguous expressions like[0x1forxiny] (which can be interpreted as[0x1forxiny] or[0x1forxiny]). A syntax warning is raisedif the numeric literal is immediately followed by one of keywordsand,else,for,if,in,is andor. In a future release itwill be changed to a syntax error. (gh-87999)

    • Support for__index__() and__int__() method returning non-int type:these methods will be required to return an instance of a strict subclass ofint.

    • Support for__float__() method returning a strict subclass offloat: these methods will be required to return an instance offloat.

    • Support for__complex__() method returning a strict subclass ofcomplex: these methods will be required to return an instance ofcomplex.

    • Delegation ofint() to__trunc__() method.

    • Passing a complex number as thereal orimag argument in thecomplex() constructor is now deprecated; it should only be passedas a single positional argument.(Contributed by Serhiy Storchaka ingh-109218.)

  • calendar:calendar.January andcalendar.February constants aredeprecated and replaced bycalendar.JANUARY andcalendar.FEBRUARY.(Contributed by Prince Roshan ingh-103636.)

  • codeobject.co_lnotab: use thecodeobject.co_lines() methodinstead.

  • datetime:

    • utcnow():usedatetime.datetime.now(tz=datetime.UTC).

    • utcfromtimestamp():usedatetime.datetime.fromtimestamp(timestamp,tz=datetime.UTC).

  • gettext: Plural value must be an integer.

  • importlib:

    • cache_from_source()debug_override parameter isdeprecated: use theoptimization parameter instead.

  • importlib.metadata:

    • EntryPoints tuple interface.

    • ImplicitNone on return values.

  • logging: thewarn() method has been deprecatedsince Python 3.3, usewarning() instead.

  • mailbox: Use of StringIO input and text mode is deprecated, useBytesIO and binary mode instead.

  • os: Callingos.register_at_fork() in multi-threaded process.

  • pydoc.ErrorDuringImport: A tuple value forexc_info parameter isdeprecated, use an exception instance.

  • re: More strict rules are now applied for numerical group referencesand group names in regular expressions. Only sequence of ASCII digits is nowaccepted as a numerical reference. The group name in bytes patterns andreplacement strings can now only contain ASCII letters and digits andunderscore.(Contributed by Serhiy Storchaka ingh-91760.)

  • sre_compile,sre_constants andsre_parse modules.

  • shutil:rmtree()’sonerror parameter is deprecated inPython 3.12; use theonexc parameter instead.

  • ssl options and protocols:

    • ssl.SSLContext without protocol argument is deprecated.

    • ssl.SSLContext:set_npn_protocols() andselected_npn_protocol() are deprecated: use ALPNinstead.

    • ssl.OP_NO_SSL* options

    • ssl.OP_NO_TLS* options

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

  • typing.Text (gh-92332).

  • unittest.IsolatedAsyncioTestCase: it is deprecated to return a valuethat is notNone from a test case.

  • urllib.parse deprecated functions:urlparse() instead

    • splitattr()

    • splithost()

    • splitnport()

    • splitpasswd()

    • splitport()

    • splitquery()

    • splittag()

    • splittype()

    • splituser()

    • splitvalue()

    • to_bytes()

  • urllib.request:URLopener andFancyURLopener style of invoking requests isdeprecated. Use newerurlopen() functions and methods.

  • wsgiref:SimpleHandler.stdout.write() should not do partialwrites.

  • xml.etree.ElementTree: Testing the truth value of anElement is deprecated. In a future release itwill always returnTrue. Prefer explicitlen(elem) orelemisnotNone tests instead.

  • zipimport.zipimporter.load_module() is deprecated:useexec_module() instead.

C API Deprecations

Pending Removal in Python 3.14

Pending Removal in Python 3.15

Pending Removal in Future Versions

The following APIs are deprecated and will be removed,although there is currently no date scheduled for their removal.