Deprecations

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:

    • 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(for example,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.

  • sre_compile,sre_constants andsre_parse modules.

  • wave:

    • Thegetmark(),setmark() andgetmarkers() methods oftheWave_read andWave_write classeshave been deprecated since Python 3.13.

  • zipimport:

Pending removal in Python 3.16

Pending removal in Python 3.17

  • typing:

    • Before Python 3.14, old-style unions were implemented using the private classtyping._UnionGenericAlias. This class is no longer needed for the implementation,but it has been retained for backward compatibility, with removal scheduled for Python3.17. Users should use documented introspection helpers liketyping.get_origin()andtyping.get_args() instead of relying on private implementation details.

Pending removal in Python 3.19

  • ctypes:

    • Implicitly switching to the MSVC-compatible struct layout by setting_pack_ but not_layout_on non-Windows platforms.

  • hashlib:

    • In hash function constructors such asnew() or thedirect hash-named constructors such asmd5() andsha256(), their optional initial data parameter couldalso be passed a keyword argument nameddata= orstring= invarioushashlib implementations.

      Support for thestring keyword argument name is now deprecatedand slated for removal in Python 3.19.

      Before Python 3.13, thestring keyword parameter was not correctlysupported depending on the backend implementation of hash functions.Prefer passing the initial data as a positional argument for maximumbackwards compatibility.

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.

    • Passing the undocumented keyword argumentprefix_chars toadd_argument_group() is nowdeprecated.

    • Theargparse.FileType type converter is 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.)

  • codecs: useopen() instead ofcodecs.open(). (gh-133038)

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

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

  • The internal classtyping._UnionGenericAlias is no longer used to implementtyping.Union. To preserve compatibility with users using this privateclass, a compatibility shim will be provided until at least Python 3.17. (Contributed byJelle Zijlstra ingh-105499.)

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

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

  • sys._clear_type_cache() is deprecated:usesys._clear_internal_caches() instead.

C API deprecations

Pending removal in Python 3.15

Pending removal in Python 3.18

Pending removal in future versions

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