非推奨

Python 3.15 で削除予定

  • インポートシステム:

    • Setting __cached__ on a module while failing to set __spec__.cached is deprecated. In Python 3.15, __cached__ will cease to be set or take into consideration by the import system or standard library. (gh-97879)

    • Setting __package__ on a module while failing to set __spec__.parent is deprecated. In Python 3.15, __package__ will cease to be set or take into consideration by the import system or standard library. (gh-97879)

  • ctypes:

    • The undocumented ctypes.SetPointerType() function has been deprecated since Python 3.13.

  • http.server:

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

    • The --cgi flag to the python -m http.server command-line interface has been deprecated since Python 3.13.

  • importlib:

    • load_module() method: use exec_module() instead.

  • 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 creating NamedTuple 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 of TypedDicts, failing to pass a value to the fields parameter (TD = TypedDict("TD")) or passing None (TD = TypedDict("TD", None)) has been deprecated since Python 3.13. Use class TD(TypedDict): pass or TD = TypedDict("TD", {}) to create a TypedDict with zero field.

    • The @typing.no_type_check_decorator decorator function has been deprecated since Python 3.13. After eight years in the typing module, it has yet to be supported by any major type checker.

  • wave:

  • zipimport:

Python 3.16 で削除予定

  • インポートシステム:

    • モジュールの __spec__.loader を設定せずに __loader__ を設定することは非推奨です。 Python 3.16 では、インポートシステムや標準ライブラリは __loader__ を設定しなくなり、その値も参照しなくなります。

  • array:

    • 書式コード 'u' (wchar_t) は、Python 3.3 からドキュメントで非推奨とされ、Python 3.13 からは実行時にも非推奨とされています。 Unicode 文字には、代わりに書式コード 'w' (Py_UCS4) を使ってください。

  • asyncio:

  • builtins:

    • 真偽値に対するビット単位の反転 ~True や ~False は、直感に反する意外な結果 (-2 と -1) になるため、Python 3.12 から非推奨です。 真偽値の論理否定には、代わりに not x を使ってください。 元の整数値のビット単位の反転が必要になるまれな場合には、明示的に int に変換してください (~int(x))。

  • functools:

    • functools.reduce() の Python 実装を、function や sequence をキーワード引数として指定して呼び出すことは、Python 3.14 から非推奨です。

  • logging:

    strm 引数を持つカスタムログハンドラーへの対応は非推奨となり、Python 3.16 で削除予定です。 代わりに stream 引数を持つハンドラーを定義してください。 (Mariusz Felisiak が gh-115032 で貢献しました。)

  • mimetypes:

    • mimetypes.MimeTypes.add_type() で有効な拡張子は、'.' で始まるものか空のものです。 ドットのない拡張子は非推奨となり、Python 3.16 では ValueError が発生します。 (Hugo van Kemenade が gh-75223 で貢献しました。)

  • shutil:

    • ExecError 例外は Python 3.14 から非推奨です。 Python 3.4 以降は shutil のどの関数でも使われておらず、現在は RuntimeError の別名になっています。

  • symtable:

  • sys:

  • sysconfig:

    • sysconfig.expand_makefile_vars() 関数は Python 3.14 から非推奨です。 代わりに sysconfig.get_paths() の vars 引数を使ってください。

  • tarfile:

    • ドキュメント化されておらず、使われてもいない TarFile.tarfile 属性は Python 3.13 から非推奨です。

Python 3.17 で削除予定

  • collections.abc:

    • collections.abc.ByteString は Python 3.17 で削除予定です。

      実行時に obj が バッファプロトコル を実装しているか調べるには、isinstance(obj, collections.abc.Buffer) を使ってください。 型アノテーションには Buffer を使うか、コードが対応する型を明示したユニオン (例えば bytes | bytearray | memoryview) を使ってください。

      ByteString は当初、bytes と bytearray の両方の上位型となる抽象クラスとして意図されていました。 しかし、この ABC はメソッドを一つも持たないため、あるオブジェクトが ByteString のインスタンスだと分かっても、そのオブジェクトに関する有用な情報は何も得られませんでした。 memoryview など、他の一般的なバッファ型も、実行時にも静的型チェッカーによっても ByteString のサブタイプとして認識されることはありませんでした。

      詳しくは PEP 688 を参照してください。 (Shantanu Jain が gh-91896 で貢献しました。)

  • typing:

    • Python 3.14 より前は、従来のユニオンは非公開クラス typing._UnionGenericAlias を使って実装されていました。 このクラスは実装上は不要になりましたが、後方互換性のために残されており、Python 3.17 で削除予定です。 非公開の実装の詳細に依存する代わりに、typing.get_origin() や typing.get_args() など、ドキュメント化されたイントロスペクション用の補助関数を使ってください。

    • Python 3.9 から非推奨となっている typing.ByteString は、Python 3.17 で削除予定です。

      実行時に obj が バッファプロトコル を実装しているか調べるには、isinstance(obj, collections.abc.Buffer) を使ってください。 型アノテーションには Buffer を使うか、コードが対応する型を明示したユニオン (例えば bytes | bytearray | memoryview) を使ってください。

      ByteString は当初、bytes と bytearray の両方の上位型となる抽象クラスとして意図されていました。 しかし、この ABC はメソッドを一つも持たないため、あるオブジェクトが ByteString のインスタンスだと分かっても、そのオブジェクトに関する有用な情報は何も得られませんでした。 memoryview など、他の一般的なバッファ型も、実行時にも静的型チェッカーによっても ByteString のサブタイプとして認識されることはありませんでした。

      詳しくは PEP 688 を参照してください。 (Shantanu Jain が gh-91896 で貢献しました。)

Python 3.18 で削除予定

  • decimal:

    • Decimal の標準外でドキュメント化されていない書式指定子 'N' は、Python 3.13 から非推奨です。 これは decimal モジュールの C 実装だけでサポートされています。 (Serhiy Storchaka が gh-89902 で貢献しました。)

Python 3.19 で削除予定

  • ctypes:

    • Windows 以外のプラットフォームで、_layout_ を設定せずに _pack_ を設定することで、暗黙的に MSVC 互換の構造体レイアウトに切り替えること。

将来のバージョンで削除予定

以下の API は将来削除されますが、現時点では削除時期は決まっていません。

  • argparse:

    • 引数グループの入れ子と、相互排他的なグループの入れ子は非推奨です。

    • add_argument_group() に、ドキュメント化されていないキーワード引数 prefix_chars を渡すことは非推奨になりました。

    • argparse.FileType 型コンバーターは非推奨です。

  • builtins:

    • ジェネレーター:throw(type, exc, tb) と athrow(type, exc, tb) というシグネチャは非推奨です。 代わりに、引数が一つの throw(exc) と athrow(exc) を使ってください。

    • 現在の Python は、0in x、1or x、0if 1else 2 のように数値リテラルの直後にキーワードが続く記法を受け付けます。 そのため、[0x1for x in y] のような紛らわしく曖昧な式も書けます ([0x1 for x in y] とも [0x1f or x in y] とも解釈できます)。 数値リテラルの直後に and、else、for、if、in、is、or のいずれかが続く場合は、構文上の警告が発生します。 将来のリリースでは構文エラーになります。 (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 of int.

    • __float__() メソッドが float の厳密なサブクラスのインスタンスを返すことへの対応:今後は float 自体のインスタンスを返すことが必須になります。

    • __complex__() メソッドが complex の厳密なサブクラスのインスタンスを返すことへの対応:今後は complex 自体のインスタンスを返すことが必須になります。

    • complex() コンストラクターの real 引数や imag 引数に複素数を渡すことは非推奨になりました。 複素数は単独の位置引数としてのみ渡してください。 (Serhiy Storchaka が gh-109218 で貢献しました。)

  • calendar:定数 calendar.January と calendar.February は非推奨となり、calendar.JANUARY と calendar.FEBRUARY に置き換えられました。 (Prince Roshan が gh-103636 で貢献しました。)

  • codecs:codecs.open() の代わりに open() を使ってください。 (gh-133038)

  • codeobject.co_lnotab: use the codeobject.co_lines() method instead.

  • datetime:

    • utcnow():datetime.datetime.now(tz=datetime.UTC) を使ってください。

    • utcfromtimestamp():datetime.datetime.fromtimestamp(timestamp, tz=datetime.UTC) を使ってください。

  • gettext:複数形を選択するための値は整数でなければなりません。

  • importlib:

    • cache_from_source() の debug_override パラメータは非推奨です。 代わりに optimization パラメータを使ってください。

  • importlib.metadata:

    • EntryPoints のタプルインターフェース。

    • 戻り値として暗黙的に None を返すこと。

  • logging:warn() メソッドは Python 3.3 から非推奨です。 代わりに warning() を使ってください。

  • mailbox:StringIO による入力とテキストモードの使用は非推奨です。 代わりに BytesIO とバイナリモードを使ってください。

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

  • pydoc.ErrorDuringImport:exc_info パラメータにタプルを渡すことは非推奨です。 例外インスタンスを使ってください。

  • re:正規表現内の番号によるグループ参照とグループ名に、より厳しい規則が適用されるようになりました。 番号による参照には ASCII の数字の並びだけを使えます。 bytes パターンと置換文字列のグループ名には、ASCII の英字、数字、アンダースコアだけを使えます。 (Serhiy Storchaka が gh-91760 で貢献しました。)

  • sre_compile, sre_constants and sre_parse modules.

  • shutil:rmtree() の onerror パラメータは Python 3.12 で非推奨になりました。 代わりに onexc パラメータを使ってください。

  • ssl のオプションとプロトコル:

    • プロトコル引数を指定せずに ssl.SSLContext を作成することは非推奨です。

    • ssl.SSLContext:set_npn_protocols() と selected_npn_protocol() は非推奨です。 代わりに ALPN を使ってください。

    • ssl.OP_NO_SSL* オプション

    • ssl.OP_NO_TLS* オプション

    • 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 のメソッド:

  • typing.Text (gh-92332).

  • 内部クラス typing._UnionGenericAlias は、typing.Union の実装には使われなくなりました。 この非公開クラスを使っているユーザーとの互換性を保つため、少なくとも Python 3.17 までは互換性を維持するための実装が提供されます。 (Jelle Zijlstra が gh-105499 で貢献しました。)

  • unittest.IsolatedAsyncioTestCase:テストケースから None 以外の値を返すことは非推奨です。

  • urllib.parse の非推奨の関数:代わりに urlparse() を使ってください。

    • splitattr()

    • splithost()

    • splitnport()

    • splitpasswd()

    • splitport()

    • splitquery()

    • splittag()

    • splittype()

    • splituser()

    • splitvalue()

    • to_bytes()

  • wsgiref:SimpleHandler.stdout.write() は、渡されたデータの一部だけを書き込んで終了してはいけません。

  • xml.etree.ElementTree:Element の真偽値を調べることは非推奨です。 将来のリリースでは、常に True を返すようになります。 代わりに len(elem) や elem is not None を使って明示的に判定してください。

  • sys._clear_type_cache() は非推奨です。 代わりに sys._clear_internal_caches() を使ってください。

C API の非推奨事項

Python 3.15 で削除予定

Python 3.18 で削除予定

将来のバージョンで削除予定

以下の API は非推奨となり、削除される予定ですが、現時点では削除時期は決まっていません。