Deprecations

Pending Removal in Python 3.13

Modules (seePEP 594):

Other modules:

APIs:

Pending Removal in Python 3.14

Pending Removal in Python 3.15

  • http.server.CGIHTTPRequestHandler will be removed along with itsrelated--cgi flag topython-mhttp.server. It was obsolete andrarely used. No direct replacement exists.Anything is better than CGIto interface a web server with a request handler.

  • importlib:

    • load_module() method: useexec_module() instead.

  • locale:locale.getdefaultlocale() was deprecated in Python 3.11and originally planned for removal in Python 3.13 (gh-90817),but removal has been postponed to Python 3.15.Uselocale.setlocale(),locale.getencoding() andlocale.getlocale() instead.(Contributed by Hugo van Kemenade ingh-111187.)

  • pathlib:pathlib.PurePath.is_reserved() is deprecated and scheduled forremoval in Python 3.15. From Python 3.13 onwards, useos.path.isreservedto detect reserved paths on Windows.

  • platform:java_ver() is deprecated and will be removed in 3.15.It was largely untested, had a confusing API,and was only useful for Jython support.(Contributed by Nikita Sobolev ingh-116349.)

  • sysconfig:

  • threading:Passing any arguments tothreading.RLock() is now deprecated.C version allows any numbers of args and kwargs,but they are just ignored. Python version does not allow any arguments.All arguments will be removed fromthreading.RLock() in Python 3.15.(Contributed by Nikita Sobolev ingh-102029.)

  • typing.NamedTuple:

    • The undocumented keyword argument syntax for creatingNamedTuple classes(NT=NamedTuple("NT",x=int)) is deprecated, and will be disallowed in3.15. Use the class-based syntax or the functional syntax instead.

  • types:

  • typing:

    • When using the functional syntax to create aNamedTuple class, failing topass a value to thefields parameter (NT=NamedTuple("NT")) isdeprecated. PassingNone to thefields parameter(NT=NamedTuple("NT",None)) is also deprecated. Both will bedisallowed in Python 3.15. To create aNamedTuple class with 0 fields, useclassNT(NamedTuple):pass orNT=NamedTuple("NT",[]).

  • typing.TypedDict: When using the functional syntax to create aTypedDict class, failing to pass a value to thefields parameter (TD=TypedDict("TD")) is deprecated. PassingNone to thefields parameter(TD=TypedDict("TD",None)) is also deprecated. Both will be disallowedin Python 3.15. To create aTypedDict class with 0 fields, useclassTD(TypedDict):pass orTD=TypedDict("TD",{}).

  • wave: Deprecate thegetmark(),setmark() andgetmarkers()methods of thewave.Wave_read andwave.Wave_write classes.They will be removed in Python 3.15.(Contributed by Victor Stinner ingh-105096.)

Pending Removal in Python 3.16

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.

  • array’s'u' format code (gh-57281)

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

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