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:

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

  • wave:

  • zipimport:

Pending removal in Python 3.16

Pending removal in Python 3.17

  • collections.abc:

    • collections.abc.ByteString is scheduled for removal in Python 3.17.

      Useisinstance(obj,collections.abc.Buffer) to test ifobjimplements thebuffer protocol at runtime. For usein type annotations, either useBuffer or a unionthat explicitly specifies the types your code supports (e.g.,bytes|bytearray|memoryview).

      ByteString was originally intended to be an abstract class thatwould serve as a supertype of bothbytes andbytearray.However, since the ABC never had any methods, knowing that an object was aninstance ofByteString never actually told you anything usefulabout the object. Other common buffer types such asmemoryviewwere also never understood as subtypes ofByteString (either atruntime or by static type checkers).

      SeePEP 688 for more details.(Contributed by Shantanu Jain ingh-91896.)

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

    • typing.ByteString, deprecated since Python 3.9, is scheduled for removal inPython 3.17.

      Useisinstance(obj,collections.abc.Buffer) to test ifobjimplements thebuffer protocol at runtime. For usein type annotations, either useBuffer or a unionthat explicitly specifies the types your code supports (e.g.,bytes|bytearray|memoryview).

      ByteString was originally intended to be an abstract class thatwould serve as a supertype of bothbytes andbytearray.However, since the ABC never had any methods, knowing that an object was aninstance ofByteString never actually told you anything usefulabout the object. Other common buffer types such asmemoryviewwere also never understood as subtypes ofByteString (either atruntime or by static type checkers).

      SeePEP 688 for more details.(Contributed by Shantanu Jain ingh-91896.)

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.

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:

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

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

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