Python 3.15 の新機能
********************

編集者:
   Hugo van Kemenade

この記事では、Python 3.14 と比較した Python 3.15 の新機能を説明します
。 Python 3.15 は2026年10月9日にリリースされました。 詳細は 変更履歴
を参照してください。

参考: **PEP 790** -- Python 3.15 のリリーススケジュール


概要 -- リリースハイライト
==========================

Python 3.15 は Python プログラミング言語の最新の安定版で、言語、実装、
標準ライブラリにさまざまな変更が加わっています。 主な変更には、遅延イ
ンポート、組み込み型 frozendict と sentinel、デフォルトのエンコーディ
ングの UTF-8 化、内包表記でのアンパック、フリースレッドビルド向けの安
定 ABI があります。

ライブラリの変更には、高頻度の統計的サンプリングプロファイラー Tachyon
を備えた新しい profiling パッケージ や、コマンドライン出力の カラー表
示の拡充 があります。 これらに加え、通常どおり非推奨化や削除、使いやす
さと正確性の改善も行われています。

この記事は、すべての新機能の完全な仕様を示すものではなく、概要を分かり
やすく紹介するものです。 詳細は ライブラリリファレンス や 言語リファレ
ンス などのドキュメントを参照してください。 変更の実装や設計の根拠を詳
しく知るには、その新機能の PEP を参照してください。 ただし、PEP は通常
、機能の実装が完了すると更新されなくなることに注意してください。

以前のバージョンからアップグレードする際の指針は、Porting to Python
3.15 を参照してください。

======================================================================

インタプリタの改善:

* **PEP 661**：組み込み型 sentinel の追加

* **PEP 686**：デフォルトのエンコーディングを UTF-8 に変更

* **PEP 798**：内包表記でのアンパック

* **PEP 810**：起動時間を短縮する明示的な遅延インポート

* **PEP 814**：組み込み型 frozendict の追加

* **PEP 829**：パッケージの起動設定ファイル

* 実験的な JIT コンパイラの大幅な改善

* エラーメッセージの改善

標準ライブラリーの顕著な改善

* **PEP 799**：Python のプロファイリングツールをまとめる専用の
  profiling パッケージ

* **PEP 799**：Tachyon：高頻度の統計的サンプリングプロファイラー

* カラー表示の拡充

新しい型ヒントの機能:

* **PEP 728**：追加項目の型を指定できる TypedDict

* **PEP 747**：TypeForm による型形式のアノテーション

* **PEP 800**：型システムにおけるdisjoint base

C API の改善:

* **PEP 782**：Python の bytes オブジェクトを作成する新しい
  PyBytesWriter C API

* **PEP 788**：C API でのファイナライズに対する保護

* **PEP 803**、**820**、**793**：フリースレッドビルド向けの安定 ABI と
  関連する C API

ビルドの変更：

* **PEP 831**：システムレベルでの観測を改善するため、フレームポインタ
  ーをデフォルトで有効化

リリースの変更:

* Windows の公式64ビットバイナリで末尾呼び出し型インタープリタを採用

* macOS の公式バイナリで、フリースレッドのサポートをデフォルトでインス
  トール


新しい機能
==========


**PEP 810**：明示的な遅延インポート
-----------------------------------

大規模な Python アプリケーションでは、起動に時間がかかることがよくあり
ます。 大きな原因の一つがインポートシステムです。 モジュールをインポー
トするとき、Python はファイルを探し、ディスクから読み込み、バイトコー
ドにコンパイルして、トップレベルのコードをすべて実行する必要があります
。 依存関係が深いアプリケーションでは、その実行でインポートしたコード
の大半を使わない場合でも、この処理に数秒かかることがあります。

開発者は、インポートを関数内に移したり、"importlib" で必要になった時点
でモジュールをロードしたり、不要な依存関係を避けるようコードを再構成し
たりして対処してきました。 これらの方法は有効ですが、コードを読みにく
く保守しにくいものにし、コード全体にインポート文を散在させ、一貫して適
用するための注意を必要とします。

Python は、新しいソフトキーワード "lazy" を使った明示的な "lazy" イン
ポートという、よりすっきりした解決方法を提供するようになりました。 イ
ンポートを遅延させると、インポートした名前を初めて使うまで、Python は
実際のモジュールのロードを延期します。 これにより、すべてのインポート
をファイルの先頭にまとめて宣言しながら、実際に使うモジュールについてだ
けロードのコストを支払えます。

"lazy" キーワードは "import" 文と "from ... import" 文の両方で使えます
。 "lazy import heavy_module" と書いても、Python はすぐにはモジュール
をロードせず、軽量なプロキシオブジェクトを作成します。 その名前に初め
てアクセスしたときに、実際のモジュールのロードが透過的に行われます：

   lazy import json
   lazy from pathlib import Path

   print("Starting up...")  # json と pathlib はまだ完全にはインポートされていない

   data = json.loads('{"key": "value"}')  # ここで json が完全にインポートされる
   p = Path(".")  # ここで pathlib が完全にインポートされる

この仕組みは、トップレベルで多くのモジュールをインポートするものの、1
回の実行ではその一部しか使わないことがあるアプリケーションで特に有用で
す。 ロードを遅らせることで、コードの再構成や、コード全体に条件付きイ
ンポートを散在させることなく、起動時の待ち時間を短縮できます。

遅延インポートしたモジュールのロードが失敗した場合 (例えばモジュールが
存在しない場合)、Python はインポート時ではなく、最初に使った時点で例外
を送出します。 トレースバックには、名前にアクセスした場所と元のインポ
ート文の両方が含まれるため、失敗の原因を調べてデバッグしやすくなります
。

ソースコードを変更せずに全体で遅延ロードを有効にしたい場合のために、
Python はコマンドラインオプション "-X lazy_imports" と環境変数
"PYTHON_LAZY_IMPORTS" を提供します。 どちらも二つの値を受け付けます。
"all" はすべてのインポートをデフォルトで遅延させ、"normal" (デフォルト
) はソースコード内の "lazy" キーワードに従います。
"sys.set_lazy_imports()" と "sys.get_lazy_imports()" を使うと、実行時
にこのモードを変更・照会できます。

より細かく制御するために、"sys.set_lazy_imports_filter()" は、特定のモ
ジュールを遅延ロードするかどうかを判定する呼び出し可能オブジェクトを受
け付けます。 フィルターは、インポートする側のモジュール名 (または
"None")、インポートされるモジュール名、fromlist (通常のインポートでは
"None") の三つの引数を受け取ります。 遅延インポートを許可するには
"True" を、即時ロードを強制するには "False" を返してください。 これに
より、自分のアプリケーションのモジュールだけを遅延させ、サードパーティ
ーの依存モジュールはすぐにロードするといった使い方ができます：

   import sys

   def myapp_filter(importing, imported, fromlist):
       return imported.startswith("myapp.")
   sys.set_lazy_imports_filter(myapp_filter)
   sys.set_lazy_imports("all")

   import myapp.slow_module  # 遅延 (フィルターに一致)
   import json               # 即時 (フィルターに不一致)

遅延インポートをプログラムで検出する必要があるコード向けに、プロキシの
型自体も "types.LazyImportType" として公開されています。

"lazy" キーワードを使える場所には制限があります。 遅延インポートはモジ
ュールスコープでのみ許可され、関数、クラス本体、
"try"/"except"/"finally" ブロックの中で "lazy" を使うと "SyntaxError"
が発生します。 スターインポートと future インポートも遅延させられませ
ん ("lazy from module import *" と "lazy from __future__ import ..."
はどちらも "SyntaxError" になります)。

"lazy" キーワードを直接使えないコード (例えば、3.15 より前の Python に
対応しつつ、3.15 以降では遅延インポートを使いたい場合) では、完全修飾
されたモジュール名の文字列を格納するコンテナとして "__lazy_modules__"
を定義できます。 これらのモジュールに対する通常の "import" 文は、
"lazy" キーワードと同じ意味を持つ遅延インポートとして扱われます。

   __lazy_modules__ = ["json", "pathlib"]

   import json     # 遅延
   import os       # 引き続き即時

(Pablo Galindo Salgado と Dino Viehland が gh-142349 で貢献しました。)

参考: 完全な仕様と設計の根拠は **PEP 810** を参照してください。


**PEP 814**：組み込み型 frozendict の追加
-----------------------------------------

新しい *イミュータブル* な型 "frozendict" が "builtins" モジュールに追
加されました。 作成後の変更はできません。 "frozendict" は "dict" のサ
ブクラスではなく、"object" を直接継承します。 キーと値がすべてハッシュ
可能であれば、"frozendict" も *ハッシュ可能* です。 "frozendict" は挿
入順序を保持しますが、比較では順序を考慮しません。

例えば:

   >>> a = frozendict(x=1, y=2)
   >>> a
   frozendict({'x': 1, 'y': 2})
   >>> a['z'] = 3
   Traceback (most recent call last):
     File "<python-input-2>", line 1, in <module>
       a['z'] = 3
       ~^^^^^
   TypeError: 'frozendict' object does not support item assignment
   >>> b = frozendict(y=2, x=1)
   >>> hash(a) == hash(b)
   True
   >>> a == b
   True

"frozendict" を受け付けるように、標準ライブラリの "copy"、"decimal"、
"json"、"marshal"、"plistlib" (シリアライズのみ)、"pickle"、"pprint"、
"xml.etree.ElementTree" が更新されました。

"eval()" と "exec()" は "globals" に "frozendict" を、"type()" と
"str.maketrans()" は "dict" に "frozendict" を受け付けます。

"isinstance(arg, dict)" で "dict" 型を調べているコードは、"frozendict"
型も受け付けるように "isinstance(arg, (dict, frozendict))" に変更でき
ます。 また、"MappingProxyType" などのほかのマッピング型も受け付けるに
は、"isinstance(arg, collections.abc.Mapping)" に変更できます。

(Victor Stinner と Donghee Na が gh-141510 で貢献しました。)

参考: 完全な仕様と設計の根拠は **PEP 814** を参照してください。


**PEP 661**：組み込み型 sentinel の追加
---------------------------------------

簡潔な表現を持つ一意なセンチネル値を作成するために、新しい "sentinel"
型が "builtins" モジュールに追加されました。 センチネルオブジェクトは
コピーしても同一性を保ち、"|" 演算子を使った型式で利用でき、モジュール
名と名前でインポートできる場合は pickle 化できます。

(Jelle Zijlstra が gh-148829 で貢献しました。PEP 661 は Tal Einat が執
筆しました。)

参考: 詳しくは **PEP 661** を参照してください。


**PEP 799**：専用の profiling パッケージ
----------------------------------------

Python 組み込みのプロファイリングツールを一つの一貫した名前空間にまと
めるため、新しい "profiling" モジュールが追加されました。 このモジュー
ルには以下が含まれます：

* "profiling.tracing"：決定論的な関数呼び出しのトレース ("cProfile" か
  ら移動)。

* "profiling.sampling"：新しい統計的サンプリングプロファイラー
  (Tachyon)。

"cProfile" モジュールは後方互換性のために別名として残ります。
"profile" モジュールは非推奨となり、Python 3.17 で削除されます。

(Pablo Galindo と László Kiss Kollár が gh-138122 で貢献しました。)

参考: 詳しくは **PEP 799** を参照してください。


Tachyon：高頻度の統計的サンプリングプロファイラー
-------------------------------------------------

[画像: Tachyon プロファイラーのロゴ][画像]

新しい統計的サンプリングプロファイラー (Tachyon) が
"profiling.sampling" として追加されました。 コードの変更やプロセスの再
起動をせずに、実行中の Python プロセスのパフォーマンスを低いオーバーヘ
ッドで分析できます。

すべての関数呼び出しを計測する決定論的プロファイラー
("profiling.tracing" など) とは異なり、サンプリングプロファイラーは実
行中のプロセスから定期的にスタックトレースを取得します。 この方法は、
実質的にオーバーヘッドを生じさせずに **最大1,000,000 Hz** のサンプリン
グレートを達成します。 そのため、提供時点で Python 向けに利用できる最
速のサンプリングプロファイラーであり、本番環境のパフォーマンス問題のデ
バッグに適しています。 従来のプロファイリング方法では実行への影響が大
きすぎる本番システムで、パフォーマンスの問題を調べる際に特に有用です。

主な機能は以下のとおりです：

* **オーバーヘッドのないプロファイリング**：実行中の Python プロセスの
  パフォーマンスに影響を与えずにアタッチできます。 アプリケーションの
  再起動や速度低下を許容できない本番環境でのデバッグに適しています。

* **コードの変更が不要**：既存のアプリケーションを再起動せずにプロファ
  イリングできます。 実行中のプロセスを PID で指定するだけで、データの
  収集を開始できます。

* **柔軟な対象の指定方法**：

  * PID で実行中のプロセスをプロファイリング ("attach") -- すでに実行
    中のアプリケーションにアタッチします

  * スクリプトを直接実行してプロファイリング ("run") -- 実行開始時点か
    らプロファイリングします

  * モジュールを実行してプロファイリング ("run -m") -- "python -m
    module" で実行するパッケージをプロファイリングします

  * 実行中のプロセスのスナップショットを一度だけ取得する ("dump") — 各
    スレッドのスタックをトレースバック形式で表示します ("--async-
    aware" を指定した場合はすべての asyncio タスクが対象です)。 ハング
    したプロセスの調査に役立ちます。

* **複数のプロファイリングモード**: パフォーマンス調査の目的に応じて測
  定対象を選べます。

  * **実経過時間** ("--mode wall"、デフォルト): I/O、ネットワーク待ち
    、ブロックする操作を含む実際の経過時間を測定します。 外部リソース
    を待っている時間も含め、プログラムがどこに時間を費やしているかを調
    べるために使います。

  * **CPU 時間** ("--mode cpu"): I/O 待ちやブロックを除き、CPU が実際
    に実行している時間だけを測定します。 CPU 処理が原因のボトルネック
    を特定し、計算処理を最適化するために使います。

  * **GIL の保持時間** ("--mode gil"): Python のグローバルインタープリ
    タロックを保持している時間を測定します。 マルチスレッドアプリケー
    ションで、どのスレッドが GIL の使用時間の大半を占めているかを調べ
    るために使います。

  * **例外処理時間** ("--mode exception"): 処理中の例外があるスレッド
    からだけサンプルを取得します。 例外処理のオーバーヘッドを分析する
    ために使います。

* **スレッドを考慮したプロファイリング**: すべてのスレッド ("-a") を対
  象にするか、メインスレッドだけを対象にするかを選べます。 マルチスレ
  ッドアプリケーションの動作を理解する上で重要な機能です。

* **複数の出力形式**: 作業に最も適した可視化形式を選べます。

  * "--pstats": "pstats" と互換性のある詳細な表形式の統計です。 関数単
    体と呼び出し先を含めた累積のサンプル数により、関数単位の時間を表示
    します。 詳細な分析や既存の Python プロファイリングツールとの連携
    に適しています。

  * "--collapsed": スタックごとに 1 行にまとめたスタックトレースを生成
    します。 この形式は Brendan Gregg の FlameGraph スクリプトや
    speedscope などの外部ツールでフレームグラフを作成するために設計さ
    れています。

  * "--flamegraph": D3.js を使い、単体で動作する対話型の HTML フレーム
    グラフを生成します。 ブラウザーで直接開いて、すぐに視覚的な分析を
    始められます。 フレームグラフは呼び出しの階層を表示し、幅で所要時
    間を表すため、ボトルネックを一目で見つけやすくなります。

  * "--gecko": Firefox Profiler と互換性のある Gecko Profiler 形式を生
    成します。 出力を Firefox Profiler にアップロードすると、スタック
    チャート、マーカー、ネットワークアクティビティなどの機能を使って、
    タイムラインに基づく高度な分析を行えます。

  * "--heatmap": 行単位のサンプル数を示す対話型の HTML ヒートマップを
    生成します。 ファイルごとのヒートマップを含むディレクトリを作成し
    、ソースコードのどこに時間を費やしているかを正確に示します。

* **対話型のライブモード**: top に似たインターフェースを持つリアルタイ
  ムの TUI プロファイラーです ("--live")。 対話的な並べ替えやフィルタ
  リングを使い、実行中のアプリケーションのパフォーマンスを監視できます
  。

* **非同期処理を考慮したプロファイリング**: タスクごとにスタックを再構
  成し、async/await コードをプロファイリングします ("--async-aware")。
  どのコルーチンが時間を消費しているかを確認できます。 実行中のタスク
  だけを表示するか、待機中も含むすべてのタスクを表示するかを選べます。

* **オペコード単位のプロファイリング**: バイトコードのオペコード情報を
  収集し、命令単位でプロファイリングします ("--opcodes")。 適応型イン
  タープリタによる特殊化も含め、どのバイトコード命令が実行されているか
  を表示します。

利用可能なすべての出力形式、プロファイリングモード、設定オプションを含
む完全なドキュメントは "profiling.sampling" を参照してください。

(Pablo Galindo と László Kiss Kollár が gh-135953 and gh-138122 で貢献
しました。)


**PEP 831**: フレームポインターをデフォルトで有効化
---------------------------------------------------

フレームポインターをサポートするプラットフォームでは、CPython のビルド
時にデフォルトでフレームポインターを有効にするようになりました。 コン
パイラーフラグ "-fno-omit-frame-pointer" と "-mno-omit-leaf-frame-
pointer" を使用し、システムプロファイラー、デバッガー、クラッシュ解析
ツール、eBPF ベースの観測ツールがネイティブスタックをより高速かつ確実
に巻き戻せるようにします。

これらのフラグは "sysconfig" を通じて公開されるため、Python のビルド設
定を利用するツールでビルドした拡張モジュールも、デフォルトでフレームポ
インターの設定を引き継ぎます。 この伝播は意図したものです。 Python と
ネイティブコードが混在するプロファイリングでは、インタープリタ、拡張モ
ジュール、埋め込みアプリケーション、ネイティブライブラリを通じて、フレ
ームポインターの連鎖が途切れないことが必要です。

重要:

  サードパーティーのビルドバックエンドやネイティブのビルドシステムは、
  Python の "sysconfig" の値を利用する際にこれらのフラグを保持するべき
  です。 Python のコンパイラーフラグを引き継がずに C、C++、Rust などの
  ネイティブコードをコンパイルするビルドシステムでは、同等のフレームポ
  インターフラグを独自に有効にするべきです。 フレームポインターなしで
  ビルドされたネイティブコンポーネントが一つあるだけで、Python プロセ
  ス全体のスタックの巻き戻しができなくなることがあります。

(Pablo Galindo Salgado と Savannah Ostrowski が gh-149201; PEP 831
written by Pablo Galindo Salgado, Ken Jin, Savannah Ostrowski, and
Diego Russo で貢献しました。)

参考: 詳しくは **PEP 831** を参照してください。


**PEP 798**: 内包表記でのアンパック
-----------------------------------

リスト、集合、辞書の内包表記とジェネレーター式で、"*" と "**" によるア
ンパックが使えるようになりました。 **PEP 448** のアンパック構文を内包
表記に拡張し、任意の数のイテラブルや辞書を一つの平坦な構造にまとめる新
しい構文を提供します。 この新しい構文は、入れ子の内包表記、
"itertools.chain()"、"itertools.chain.from_iterable()" の代わりに使え
ます。 例えば次のように書けます。

   >>> lists = [[1, 2], [3, 4], [5]]
   >>> [*L for L in lists]  # 次の式と等価: [x for L in lists for x in L]
   [1, 2, 3, 4, 5]

   >>> sets = [{1, 2}, {2, 3}, {3, 4}]
   >>> {*s for s in sets}  # 次の式と等価: {x for s in sets for x in s}
   {1, 2, 3, 4}

   >>> dicts = [{'a': 1}, {'b': 2}, {'a': 3}]
   >>> {**d for d in dicts}  # 次の式と等価: {k: v for d in dicts for k,v in d.items()}
   {'a': 3, 'b': 2}

ジェネレーター式でも同様にアンパックを使い、複数のイテラブルから値を
yield できます。

   >>> gen = (*L for L in lists)  # 次の式と等価: (x for L in lists for x in L)
   >>> list(gen)
   [1, 2, 3, 4, 5]

この変更は非同期ジェネレーター式にも適用されます。 例えば "(*a async
for a in agen())" は "(x async for a in agen() for x in a)" と等価です
。

(Adam Hartz が gh-143055 で貢献しました。)

参考: 詳しくは **PEP 798** を参照してください。


**PEP 829**: パッケージの起動設定ファイル
-----------------------------------------

"-S" が指定されていないときに "site" モジュールが読み込む .pth ファイ
ル には、"sys.path" を拡張する行を含められます。 また、"import" (直後
にスペースまたはタブが続く) で始まる行では任意のコードを実行できます。
後者の機能には、Python の起動時に実行される内容を正確に把握することが
難しいという問題があります。

起動前に実行されるコードを監査しやすくするための一歩として、Python
3.15 は .start ファイル を導入します。 このファイルには
"pkg.mod:callable" という形式でエントリーポイントを指定します。
"pkg.mod" は指定した呼び出し可能オブジェクトへのインポートパスです。
Python の起動時に、この呼び出し可能オブジェクトを見つけて引数なしで呼
び出します。

".pth" ファイルの "import" 行は、警告を出さずに非推奨となりました。 対
応する ".start" ファイルが見つかると、".pth" ファイルの "import" 行は
無視されます。 ".pth" ファイル内の "sys.path" を拡張する行に変更はあり
ません。

"site" モジュールは、複数の site ディレクトリの起動処理をまとめて行う
"site.StartupState" も提供します。 これにより、起動コードを実行する前
にすべての静的なパス拡張が適用されます。 通常のインタープリタの起動時
には、"site.main()" がこのクラスのインスタンスを暗黙に使い、すべての起
動設定ファイルをまとめて処理します。 同じようにまとめて処理する必要が
ある呼び出し側は、"StartupState" を直接作成し、"addsitedir()"、
"addusersitepackages()"、"addsitepackages()" を呼び出した後、最後に
"process()" を一度呼び出せます。

(Barry Warsaw が gh-148641 and gh-150228 で貢献しました。)


**PEP 803**: フリースレッドビルド用の安定 ABI
---------------------------------------------

安定 ABI を対象とする C 拡張を、新しい *フリースレッドビルド用の安定
ABI* ("abi3t" とも呼ばれます) 向けにコンパイルできるようになりました。
これにより CPython の *フリースレッドビルド* と互換性を持たせられます
。 通常はソースコードに相応の変更が必要です。 具体的には次の変更を行い
ます。

* インスタンスの構造体に "PyObject" を含める代わりに、負の "basicsize"
  や "PyObject_GetTypeData()" など、**PEP 697** (Python 3.12) で導入さ
  れた API に切り替える。

* "PyInit_" 関数から、この目的のために **PEP 793** で導入された新しい
  エクスポートフック "PyModExport_*" に切り替え、**PEP 820** で導入さ
  れた新しい "PySlot" 構造体を使う。

安定 ABI は CPython が提供するすべての機能を利用できるわけではありませ
ん。 "abi3t" に切り替えられない拡張は、引き続き既存の安定 ABI ("abi3")
とフリースレッド用のバージョン固有の ABI ("cp315t") 向けに別々にビルド
するべきです。

フリースレッドビルド用の安定 ABI は通常、ビルドツールで選択するべきで
す。 "abi3t" をサポートするツールには meson-python、scikit-build-core
、Maturin があります。 "abi3t" ビルドに関する各ツールのドキュメントへ
のリンクは ビルドの設定 を参照してください。 ビルドツールが "abi3t" を
サポートしていない場合は、"cp315t" 向けに別途コンパイルしてください。
ビルドツールを使わない場合や、そのようなツールを作成する場合は、Stable
ABI 向けのコンパイル で説明するようにマクロ "Py_TARGET_ABI3T" を設定し
て "abi3t" を選択できます。

"abi3t" に切り替えるための実践的な 移行ガイド が用意されています。 コ
ミュニティーが保守する Python Free-Threading Guide には、"abi3t" wheel
のビルドとテストの例があります。

参考: 詳しくは **PEP 803** を参照してください。


**PEP 788**: インタープリタの終了処理から C API を保護
------------------------------------------------------

C API では *インタープリタの終了処理* が多くの拡張で問題になることがあ
ります。 終了処理中にスレッド状態を *アタッチ* するとスレッドが永久に
停止し、デッドロックやその他の予期しない問題につながるためです。 また
、従来はインタープリタを使う前にその生存を安全に確認することができませ
んでした。 あるスレッドがインタープリタにアタッチしようとしている間に
別のスレッドがそのインタープリタを削除すると、クラッシュにつながってい
ました。

これらの問題を回避するため、次の新しい API 群が追加されました。

* インタープリタガード は、インタープリタの終了処理を防ぎます。

* インタープリタビュー は、並行して終了処理や削除が行われる可能性があ
  るインタープリタに、スレッドセーフなアクセスを提供します。

* スレッド状態を自動でアタッチおよびデタッチする 新しい API には、終了
  処理に対する保護が組み込まれています。

さらに、"PyGILState" 系の API (特に "PyGILState_Ensure()" と
"PyGILState_Release()") が *ソフト非推奨* になりました。 削除する予定
は **なく**、既存のコードは引き続き動作しますが、今後の Python のバー
ジョンで新しい "PyGILState" API が追加されることはありません。

(Peter Bierma が gh-149101 で貢献しました。)

参考: 詳しくは **PEP 788** を参照してください。


エラーメッセージの改善
----------------------

* オブジェクトに存在しない属性にアクセスした際、そのメンバーの一つを通
  じて似た属性を利用できる場合、インタープリタが "AttributeError" 例外
  でより役立つ候補を提示するようになりました。

  例えば、オブジェクトのある属性が、求めている名前を持つ属性を公開して
  いる場合、エラーメッセージはその内側の属性を通じたアクセスを提案しま
  す。

     from dataclasses import dataclass
     from math import pi

     @dataclass
     class Circle:
        radius: float

        @property
        def area(self) -> float:
           return pi * self.radius**2

     class Container:
        def __init__(self, inner: Circle) -> None:
           self.inner = inner

     circle = Circle(radius=4.0)
     container = Container(circle)
     print(container.area)

  このコードを実行すると、より明確な候補が表示されるようになりました。

     Traceback (most recent call last):
       File "example.py", line 18, in <module>
         print(container.area)
               ^^^^^^^^^^^^^^
     AttributeError: 'Container' object has no attribute 'area'. Did you mean '.inner.area' instead of '.area'?

* 組み込み型の "AttributeError" で、レーベンシュタイン距離が近い候補が
  見つからない場合、他の言語 (JavaScript、Java、Ruby、C#) でよく使われ
  るメソッド名の固定の表を調べ、対応する Python のメソッドを提示するよ
  うになりました。

     >>> [1, 2, 3].push(4)
     Traceback (most recent call last):
     ...
     AttributeError: 'list' object has no attribute 'push'. Did you mean '.append'?

     >>> 'hello'.toUpperCase()
     Traceback (most recent call last):
     ...
     AttributeError: 'str' object has no attribute 'toUpperCase'. Did you mean '.upper'?

  Python で対応するものがメソッドではなく言語構文の場合は、その構文を
  直接説明するヒントを表示します。

     >>> {}.put("a", 1)
     Traceback (most recent call last):
     ...
     AttributeError: 'dict' object has no attribute 'put'. Use d[k] = v.

  イミュータブルな型に対してミュータブルな型のメソッドが呼び出されると
  、対応するミュータブルな型をヒントとして提示します。

     >>> (1, 2, 3).append(4)
     Traceback (most recent call last):
     ...
     AttributeError: 'tuple' object has no attribute 'append'. Did you mean to use a 'list' object?

  これらのヒントは組み込み型のサブクラスでも機能します。

  (Matt Van Horn が gh-146406 で貢献しました。)

* "delattr()" が属性が存在しないために失敗した場合、インタープリタが候
  補の提示を試みるようになりました。 既存の属性によく似た属性名が使わ
  れると、エラーメッセージで正しい属性名を提示します。 例えば次のよう
  になります。

     >>> class A:
     ...     pass
     >>> a = A()
     >>> a.abcde = 1
     >>> del a.abcdf
     Traceback (most recent call last):
     ...
     AttributeError: 'A' object has no attribute 'abcdf'. Did you mean: 'abcde'?

  (Nikita Sobolev と Pranjal Prajapati が gh-136588 で貢献しました。)

* 「引数」という用語を誤って使っていたいくつかのエラーメッセージを訂正
  しました。 (Stan Ulbrych による貢献。gh-133382。)


その他の言語の変更
==================

* Python はシステム環境によらず、UTF-8 をデフォルトのエンコーディング
  として使うようになりました。 つまり、"open('flying-circus.txt')" な
  ど、エンコーディングを明示しない I/O 操作は UTF-8 を使います。 UTF-8
  は広くサポートされている Unicode の文字エンコーディングであり、イン
  ターネット上のほぼすべてのウェブページ、多くの一般的なファイル形式、
  プログラミング言語などで、テキストを表現するための *事実上の* 標準と
  なっています。

  これは "encoding" 引数が指定されていない場合にだけ適用されます。
  Python のバージョン間で最大限の互換性を保つには、常に "encoding" 引
  数を明示してください。 任意で有効にできるエンコーディングの警告 を使
  うと、この変更の影響を受ける可能性があるコードを特定できます。 特別
  な引数 "encoding='locale'" は現在のロケールのエンコーディングを使い
  、Python 3.10 以降でサポートされています。

  以前の動作を維持するには、環境変数 "PYTHONUTF8=0" またはコマンドライ
  ンオプション "-X utf8=0" で Python の UTF-8 モードを無効にできます。

  (Adam Turner が gh-133711; PEP 686 written by Inada Naoki で貢献しま
  した。)

  参考: 詳しくは **PEP 686** を参照してください。

* インタープリタのヘルプ ("python --help" など) が色付きになりました。
  環境変数 で制御できます。 (Hugo van Kemenade による貢献。gh-148766。
  )

* 送出できない例外がデフォルトで色付きで強調表示されるようになりました
  。 環境変数 で制御できます。 (Peter Bierma による貢献。gh-134170。)

* argparse、ast、calendar、difflib、http.server、pickletools、PyREPL
  のタブ補完、python --help、sqlite3、timeit、tokenize、送出できない例
  外、および *stdlib* (ast、compileall、doctest、gzip、inspect、
  json.tool、pdb、profiling.sampling、random、regrtest、sqlite3、
  timeit、tokenize、trace、unittest、uuid、zipapp、zipfile) の CLI ヘ
  ルプで、色の使用を拡大しました。

* "ImportError" と "ModuleNotFoundError" の "__repr__()" が、生成時に
  キーワード引数として与えられた "name" と "path" を、それぞれ
  "name=<name>" と "path=<path>" として表示するようになりました。
  (Serhiy Storchaka, Oleg Iarygin, と Yoav Nir による貢献。gh-74185。)

* "__dict__" と "__weakref__" のデスクリプタが、インタープリタごとに一
  つのデスクリプタインスタンスを使い、必要とするすべての型で共有するよ
  うになりました。 これによりクラスの作成が高速化し、循環参照の回避に
  も役立ちます。 (Petr Viktorin による貢献。gh-135228。)

* "-W" オプションと "PYTHONWARNINGS" 環境変数で、対応するフィールドを
  スラッシュ ("/") で囲むと、警告メッセージやモジュール名との照合にリ
  テラル文字列ではなく正規表現を指定できるようになりました。 (Serhiy
  Storchaka による貢献。gh-134716。)

* タイムスタンプやタイムアウトの引数を取る関数が、整数と浮動小数点数だ
  けでなく、任意の実数 ("Decimal" や "Fraction" など) を受け付けるよう
  になりました。 ただし、精度が向上するわけではありません。 (Serhiy
  Storchaka による貢献。gh-67795。)

* "bytearray" からコピーせずにバイト列を取り出す
  "bytearray.take_bytes(n=None, /)" を追加しました。 これにより、デー
  タのバッファリング、ネットワークプロトコルの解析、エンコード、デコー
  ド、圧縮など、ミュータブルなバイト列のバッファーを操作した後に
  "bytes" を返す必要があるコードを最適化できます。 "take_bytes()" で最
  適化できる一般的なコードパターンを以下に示します。


  最適化のためのリファクタリング例
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  +-----------------------------------+-----------------------------------+-----------------------------------+
  | 説明                              | 古い(Old)                         | 変更後                            |
  |===================================|===================================|===================================|
  | "bytearray" を操作した後に        | def read() -> bytes:     buffer = | def read() -> bytes:     buffer = |
  | "bytes" を返す                    | bytearray(1024)     ...           | bytearray(1024)     ...           |
  |                                   | return bytes(buffer)              | return buffer.take_bytes()        |
  +-----------------------------------+-----------------------------------+-----------------------------------+
  | バイト列を取り出してバッファーを  | buffer = bytearray(1024) ... data | buffer = bytearray(1024) ... data |
  | 空にする                          | = bytes(buffer) buffer.clear()    | = buffer.take_bytes()             |
  +-----------------------------------+-----------------------------------+-----------------------------------+
  | 指定した区切りでバッファーを分割  | buffer = bytearray(b'abc\ndef') n | buffer = bytearray(b'abc\ndef') n |
  | する                              | = buffer.find(b'\n') data =       | = buffer.find(b'\n') data =       |
  |                                   | bytes(buffer[:n + 1]) del         | buffer.take_bytes(n + 1)          |
  |                                   | buffer[:n + 1] assert data ==     |                                   |
  |                                   | b'abc\n' assert buffer ==         |                                   |
  |                                   | bytearray(b'def')                 |                                   |
  +-----------------------------------+-----------------------------------+-----------------------------------+
  | 指定した区切りでバッファーを分割  | buffer = bytearray(b'abc\ndef') n | buffer = bytearray(b'abc\ndef') n |
  | し、区切り以降を破棄する          | = buffer.find(b'\n') data =       | = buffer.find(b'\n')              |
  |                                   | bytes(buffer[:n]) buffer.clear()  | buffer.resize(n) data =           |
  |                                   | assert data == b'abc' assert      | buffer.take_bytes()               |
  |                                   | len(buffer) == 0                  |                                   |
  +-----------------------------------+-----------------------------------+-----------------------------------+

  (Cody Maloney が gh-139871 で貢献しました。)

* "compile()"、"ast.parse()"、"symtable.symtable()"、
  "importlib.abc.InspectLoader.source_to_code()" など、Python コードの
  コンパイルや解析に関わる多くの関数に、モジュール名を渡せるようになり
  ました。 これは、モジュール名に基づいて構文警告を曖昧さなく フィルタ
  リング するために必要です。 (Serhiy Storchaka による貢献。gh-135801
  。)

* どのクラスでも *__dict__* と *__weakref__* の __slots__ を定義できる
  ようになりました。 (Serhiy Storchaka による貢献。gh-41779。)

* "tuple" の派生クラス ("collections.namedtuple()" で作成したクラスも
  含みます) で、任意の __slots__ を定義できるようになりました。
  (Serhiy Storchaka による貢献。gh-41779。)

* "slice" 型が添字付けをサポートし、*generic type* になりました。
  (James Hilton-Balfe による貢献。gh-128335。)

* "memoryview" クラスが C の float complex 型と double complex 型をサ
  ポートしました。 それぞれ書式文字 "'Zf'" と "'Zd'" に対応します。
  (Victor Stinner による貢献。gh-146151 と gh-148675。)

* "bytes.replace()" の *count* 引数をキーワードで指定できるようになり
  ました。 (Stan Ulbrych による貢献。gh-147856。)

* "match" のリテラルパターンで、従来からサポートされていた単項マイナス
  と同様に、単項プラスも使えるようになりました。 (Bartosz Sławecki に
  よる貢献。gh-145239。)

* インポートシステムがモジュールごとのロックを階層順に (サブモジュール
  より先に親パッケージのロックを) 取得するようになりました。 これによ
  り、"pkg/sub/__init__.py" が "pkg.sub.mod" をインポートする場合に、
  "pkg.sub" をインポートするスレッドと "pkg.sub.mod" をインポートする
  別のスレッドが互いをブロックし得る、長年のデッドロックの問題を修正し
  ました。 (Gregory P. Smith による貢献。gh-83065。)

* ".so" 接尾辞を使う安定 ABI 拡張のファイル名に、"foo.abi3-x86-64
  -linux-gnu.so" のように multiarch タプルを含められるようになりました
  。 これにより、通常の動的拡張と同様に、複数のアーキテクチャー向けの
  安定 ABI 拡張を互いに衝突することなく同じディレクトリにインストール
  できます。 (Stefano Rivera による貢献。gh-122931。)

* バージョン 3.13 から非推奨だったモジュールの "__cached__" 属性を、イ
  ンポートシステムと標準ライブラリが設定も参照もしなくなりました。 代
  わりに "__spec__.cached" を使ってください。 (Brett Cannon による貢献
  。gh-97879。)

  "__loader__" 属性と "__package__" 属性も非推奨であり、削除が予定され
  ていることに注意してください。


デフォルトの対話型シェル
========================

* fancycompleter を基に、タブ補完の候補をオブジェクトの種類ごとに色分
  けするようになりました。 "PYTHON_BASIC_COMPLETER" を設定すると
  "rlcompleter" に戻せます。 色は 環境変数 でも制御できます。 (Antonio
  Cuni と Pablo Galindo による貢献。gh-130472。)

* タブ補完が "from ... import" 文でモジュールの属性を候補として提示す
  るようになりました。 属性を提示できるのはモジュールのインポート後だ
  けなので、*stdlib* のモジュールは自動的にインポートします。 それ以外
  のモジュールでは、"Tab" を 2 回目に押したときに補完機能がインポート
  を提案します。 (Loïc Simon と Pablo Galindo による貢献。gh-140870。)


新しいモジュール
================


math.integer
------------

このモジュールは整数の引数に対する数学関数を提供します (**PEP 791**)。
(Serhiy Storchaka による貢献。gh-81313。)


改良されたモジュール
====================


argparse
--------

* "BooleanOptionalAction" アクションが、単一のダッシュで始まる長いオプ
  ションと、別の接頭辞文字をサポートしました。 (Serhiy Storchaka によ
  る貢献。gh-138525。)

* "argparse.ArgumentParser" の *suggest_on_error* パラメーターのデフォ
  ルトを "True" に変更しました。 これにより、入力を間違えた引数に対す
  る候補の提示がデフォルトで有効になります。 (Jakob Schluse による貢献
  。gh-140450。)

* "ArgumentParser" の "description" と "epilog" のテキストでバッククォ
  ートによるマークアップをサポートし、色付き出力が有効な場合にインライ
  ンコードを強調表示するようになりました。 (Savannah Ostrowski による
  貢献。gh-142390。)

* バッククォートによるマークアップを引数の "help" テキストにも拡張し、
  ダブルバッククォート (RST のインラインリテラル形式) もサポートしまし
  た。 (Hugo van Kemenade による貢献。gh-149375。)


array
-----

* C の float complex 型と double complex 型をサポートしました。 それぞ
  れ書式文字 "'Zf'" と "'Zd'" に対応します。 (Victor Stinner による貢
  献。gh-146151 と gh-148675。)

* 半精度浮動小数点数 (16 ビットの IEEE 754 バイナリ交換形式) をサポー
  トしました。 書式文字は "'e'" です。 (Sergey B Kirpichev による貢献
  。gh-146238。)

* 1 文字より長い型コード ("Zf" と "Zd") をサポートするため、
  "array.typecodes" の型を "str" から "tuple" に変更しました。 (Victor
  Stinner による貢献。gh-148675。)


ast
---

* "dump()" に *color* パラメーターを追加しました。 "True" の場合、返さ
  れる文字列に ANSI エスケープシーケンスによる構文強調表示を施します。
  "False" (デフォルト) の場合、色付き出力は常に無効です。 (Stan
  Ulbrych による貢献。gh-148981。)

* コマンドライン 出力がデフォルトで構文強調表示されるようになりました
  。 これは 環境変数で制御できます。 (Stan Ulbrych による貢献。
  gh-148981。)


asyncio
-------

* "TaskGroup.cancel" を追加しました。 例えば、タスクの目的が達成された
  場合や、処理が不要になった場合に、タスクグループを早期に終了できます
  。 従来は、独自の例外を送出する追加のタスクを作り、タスクグループを
  抜ける際にその例外を抑制するといった、直感的でない定型処理が必要でし
  た。 (John Belmonte による貢献。gh-127214。)


base64
------

* "z85encode()" に *pad* パラメーターを追加しました。 (Hauke Dämpfling
  による貢献。gh-143103。)

* "b32encode()"、"b32decode()"、"b32hexencode()"、"b32hexdecode()"、
  "b64encode()"、"b64decode()"、"urlsafe_b64encode()"、
  "urlsafe_b64decode()" に *padded* パラメーターを追加しました。
  (Serhiy Storchaka による貢献。gh-73613。)

* "b16encode()"、"b32encode()"、"b32hexencode()"、"b64encode()"、
  "b85encode()"、"z85encode()" に *wrapcol* パラメーターを追加しました
  。 (Serhiy Storchaka による貢献。gh-143214 と gh-146431。)

* "b16decode()"、"b32decode()"、"b32hexdecode()"、"b64decode()"、
  "b85decode()"、"z85decode()" に *ignorechars* パラメーターを追加しま
  した。 (Serhiy Storchaka による貢献。gh-144001 と gh-146431。)

* "b32decode()"、"b32hexdecode()"、"b64decode()"、"a85decode()"、
  "b85decode()"、"z85decode()" に *canonical* パラメーターを追加しまし
  た。 これにより、パディングビットがゼロでないエンコーディングや、そ
  の他の正規形でない形式を拒否できます。 (Gregory P. Smith による貢献
  。gh-146311。)


binascii
--------

* Base32 エンコーディング用の関数を追加しました。

  * "b2a_base32()" と "a2b_base32()"

  (James Seo が gh-146192 で貢献しました。)

* Ascii85、Base85、Z85 エンコーディング用の関数を追加しました。

  * "b2a_ascii85()" と "a2b_ascii85()"

  * "b2a_base85()" と "a2b_base85()"

  (James Seo と Serhiy Storchaka が gh-101178 で貢献しました。)

* "b2a_base32()"、"a2b_base32()"、"b2a_base64()"、"a2b_base64()" に
  *padded* パラメーターを追加しました。 (Serhiy Storchaka による貢献。
  gh-73613。)

* "b2a_base64()" に *wrapcol* パラメーターを追加しました。 (Serhiy
  Storchaka による貢献。gh-143214。)

* "b2a_base64()" と "a2b_base64()" に *alphabet* パラメーターを追加し
  ました。 (Serhiy Storchaka による貢献。gh-145980。)

* "a2b_hex()"、"unhexlify()"、"a2b_base64()" に *ignorechars* パラメー
  ターを追加しました。 (Serhiy Storchaka による貢献。gh-144001 と
  gh-146431。)

* "a2b_base64()" に *canonical* パラメーターを追加し、パディングビット
  がゼロでないエンコーディングを拒否できるようになりました。 (Gregory
  P. Smith による貢献。gh-146311。)


calendar
--------

* "calendar" の コマンドライン のテキスト出力で、色の使用を拡大しまし
  た。 環境変数 で制御できます。 (Hugo van Kemenade による貢献。
  gh-148352。)

* "calendar" の コマンドライン の HTML 出力で、"python -m calendar -t
  html 2009 06" のように年月を指定できるようになりました。 (Pål Grønås
  Drange による貢献。gh-140212。)

* "calendar.HTMLCalendar" クラスが生成するカレンダーページがダークモー
  ドをサポートし、アクセシビリティ向上のため HTML5 標準に移行しました
  。 (Jiahao Li と Hugo van Kemenade による貢献。gh-137634。)


collections
-----------

* "Counter" オブジェクト間の対称差を計算する
  "collections.Counter.__xor__()" と "collections.Counter.__ixor__()"
  を追加しました。 (Raymond Hettinger による貢献。gh-138682。)


concurrent.futures
------------------

* "concurrent.futures.ProcessPoolExecutor" の子プロセスが突然終了した
  場合のエラー報告を改善しました。 トレースバックに終了したプロセスの
  PID と終了コードが表示されるようになりました。 (Jonathan Berg による
  貢献。gh-139486。)


contextlib
----------

* "with" 文および "async with" 文との一貫性のため、"ExitStack" と
  "contextlib.AsyncExitStack" で、"__enter__()"、"__exit__()"、
  "__aenter__()"、"__aexit__()" として任意のデスクリプタをサポートしま
  した。 (Serhiy Storchaka による貢献。gh-144386。)

* "ContextDecorator" と "AsyncContextDecorator" (したがってデコレータ
  ーとして使う "contextmanager()" と "asynccontextmanager()" も) が、
  ジェネレーター関数、コルーチン関数、非同期ジェネレーター関数を検出し
  、反復処理や await の間もコンテキストマネージャーを開いたままにする
  ようになりました。 従来は、ジェネレーターオブジェクトやコルーチンオ
  ブジェクトが作成されるとすぐにコンテキストマネージャーを終了していま
  した。 (Alex Grönholm & Gregory P. Smith による貢献。gh-125862。)


ctypes
------

* NumPy との互換性のため、"c_float_complex"、"c_double_complex"、
  "c_longdouble_complex" の "_type_" を、それぞれ "F"、"D"、"G" から
  "Zf"、"Zd"、"Zg" に変更しました。 (Victor Stinner による貢献。
  gh-148675。)


dataclasses
-----------

* 生成される "__init__" メソッドのアノテーションに、内部の型名が含まれ
  なくなりました。 (David Ellis による貢献。gh-137530。)


dbm
---

* 削除済みのエントリーが以前占有していた未使用の空き領域を回収する、新
  しい "reorganize()" メソッドを "dbm.dumb" と "dbm.sqlite3" に追加し
  ました。 (Andrea Oliveri による貢献。gh-134004。)


difflib
-------

* "difflib.unified_diff()" にオプションの *color* パラメーターを導入し
  、**git diff** のような色付き出力を可能にしました。 環境変数 で制御
  できます。 (Douglas Thor による貢献。gh-133725。)

* "difflib.HtmlDiff" クラスが生成する HTML 差分ページのスタイルを改善
  し、出力を HTML5 標準に移行しました。 (Jiahao Li による貢献。
  gh-134580。)


email
-----

* アドレスヘッダーに非 ASCII のメールアドレス (メールボックス) がある
  ために "EmailMessage" を正確に直列化できない場合、メールのジェネレー
  ターがエラーを送出するようになりました。 メールアドレスの国際化
  (EAI) をサポートするための選択肢は "EmailPolicy.utf8" で説明していま
  す。 (R David Murray と Mike Edmunds による貢献。gh-122540。)


faulthandler
------------

* "faulthandler.enable()"、"faulthandler.dump_traceback()"、
  "faulthandler.dump_traceback_later()"、"faulthandler.register()" に
  *max_threads* パラメーターを追加しました。 (Eric Froemling による貢
  献。gh-149085。)


functools
---------

* "singledispatchmethod()" が *descriptor* ではない呼び出し可能オブジ
  ェクトをサポートしました。 (Serhiy Storchaka による貢献。gh-140873。
  )

* "singledispatchmethod()" が通常のメソッドをラップしていて、クラスの
  属性として呼び出された場合、2 番目の引数に基づいてディスパッチするよ
  うになりました。 (Bartosz Sławecki による貢献。gh-143535。)


gc
--

* Python 3.14.0–3.14.4 は新しいインクリメンタルガベージコレクターを搭
  載していました。 しかし、本番環境で深刻なメモリ逼迫が生じたという 報
  告 が複数あったため、3.13 の世代別 GC に戻しました。 Python 3.14.5
  以降と Python 3.15 は、この GC を使います。 (Sergey Miryanov による
  貢献。gh-148726。)


hashlib
-------

* 常に *利用可能* であることが保証されているハッシュ関数について、バッ
  クエンドの実装がなく実行時には動作しない場合でも、"hashlib" の属性と
  して存在するようにしました。 例えば、OpenSSL が利用できず Python が
  MD5 サポートなしでビルドされている場合でも、"hashlib.md5" が
  "AttributeError" を送出しなくなります。 (Bénédikt Tran による貢献。
  gh-136929。)


http.client
-----------

* "HTTPConnection" と "HTTPSConnection" のコンストラクターに、新しいキ
  ーワード専用パラメーター *max_response_headers* を追加しました。 こ
  のパラメーターは、許容するレスポンスヘッダーの数のデフォルトの上限を
  上書きします。 (Alexander Enrique Urieles Nieto による貢献。
  gh-131724。)


http.server
-----------

* コマンドラインインターフェース でも使われる "BaseHTTPRequestHandler"
  のログ出力が、デフォルトで色付きになりました。 環境変数 で制御できま
  す。 (Hugo van Kemenade による貢献。gh-146292。)

* "default_content_type" とコマンドラインオプション "--content-type"
  を追加し、不明な拡張子を持つファイルのデフォルトの "Content-Type" ヘ
  ッダーをカスタマイズできるようになりました。 (John Comeau と Hugo
  van Kemenade による貢献。gh-113471。)

* "SimpleHTTPRequestHandler" に新しいキーワード引数
  "extra_response_headers" を追加し、HTTP レスポンスに独自のヘッダーを
  設定できるようになりました。 (Anton I. Sipos による貢献。gh-135057。
  )

* **python -m http.server** コマンドラインインターフェースに
  "-H/--header" オプションを追加し、HTTP レスポンスに独自のヘッダーを
  設定できるようになりました。 (Anton I. Sipos による貢献。gh-135057。
  )


importlib.metadata
------------------

* 従来は、メタデータファイルを含まない配布物のメタデータディレクトリに
  アクセスすると、"metadata()" と "Distribution.metadata" は、ファイル
  が存在していて中身が空であるかのように空の "PackageMetadata" オブジ
  ェクトを返していました。 今後は "MetadataNotFound" 例外を送出します
  。 背景と理由は importlib_metadata#493 を、互換性に関する懸念への説
  明は gh-143387 を参照してください。 (Jason R. Coombs による貢献。)


inspect
-------

* "getdoc()" にパラメーター *inherit_class_doc* と
  *fallback_to_class_doc* を追加しました。 (Serhiy Storchaka による貢
  献。gh-132686。)


json
----

* "load()" 関数と "loads()" 関数に *array_hook* パラメーターを追加しま
  した。 JSON の配列リテラルに対するコールバックを指定し、デコード結果
  のオブジェクトに含まれる Python のリストをカスタマイズできます。
  *object_pairs_hook* パラメーターに "frozendict" を、*array_hook* に
  "tuple" を組み合わせて渡すと、JSON データを表す、深く入れ子になった
  イミュータブルな Python の構造が得られます。 (Joao S. O. Bueno によ
  る貢献。gh-146440。)


locale
------

* "setlocale()" が "@" 修飾子付きの言語コードをサポートしました。
  "getlocale()" は "@" 修飾子を黙って削除せず、言語コードに含めるよう
  になりました。 (Serhiy Storchaka による貢献。gh-137729。)

* "locale.getdefaultlocale()" 関数の非推奨を撤回しました。 (Victor
  Stinner による貢献。gh-130796。)


math
----

* "math.isnormal()" 関数と "math.issubnormal()" 関数を追加しました。
  (Sergey B Kirpichev による貢献。gh-132908。)

* "math.fmax()"、"math.fmin()"、"math.signbit()" 関数を追加しました。
  (Bénédikt Tran による貢献。gh-135853。)


mimetypes
---------

* MIME 型を追加しました。 (Benedikt Johannes, Charlie Lin, Foolbar,
  Gil Forcada と John Franey による貢献。gh-144217, gh-145720,
  gh-140937, gh-139959, gh-145698, gh-145718, gh-145918, と gh-144213
  。)

* "application/x-texinfo" を "application/texinfo" に改名しました。
  (Charlie Lin による貢献。gh-140165。)

* ".ai" ファイルの MIME 型を "application/pdf" に変更しました。 (Stan
  Ulbrych による貢献。gh-141239。)


mmap
----

* Windows の "mmap.mmap" に *trackfd* パラメーターを追加しました。
  "False" の場合、*fileno* に対応するファイルハンドルを複製しません。
  (Serhiy Storchaka による貢献。gh-78502。)

* Linux カーネルが *PR_SET_VMA_ANON_NAME* をサポートしている場合
  (Linux 5.17 以降) に、匿名メモリマッピングに注釈を付ける
  "mmap.mmap.set_name()" メソッドを追加しました。 (Donghee Na による貢
  献。gh-142419。)


os
--

* Linux カーネル 4.11 以降かつ glibc 2.28 以降で "os.statx()" を追加し
  ました。 (Jeffrey Bosboom と Victor Stinner による貢献。gh-83714。)

* "os.makedirs()" 関数に、中間ディレクトリのモードを指定できる
  *parent_mode* パラメーターを追加しました。 "parent_mode=mode" を渡す
  と、Python 3.6 以前の動作に合わせられます。 (Zackery Spytz と
  Gregory P. Smith による貢献。gh-86533。)


os.path
-------

* "realpath()" に、最後の要素だけは存在しなくてもよいモードのサポート
  を追加しました。 (Serhiy Storchaka による貢献。gh-71189。)

* "os.path.realpath()" の *strict* パラメーターが、新しい値
  "os.path.ALLOW_MISSING" を受け付けます。 この値を使うと、
  "FileNotFoundError" 以外のエラーは再送出されます。 結果のパスは存在
  しない可能性がありますが、シンボリックリンクを含みません。 (Petr
  Viktorin による **CVE 2025-4517** への対応。)


pathlib
-------

* "pathlib.Path.mkdir()" に、"parents=True" の場合に中間ディレクトリの
  モードを指定できる *parent_mode* パラメーターを追加しました。
  (Gregory P. Smith による貢献。gh-86533。)


pdb
---

* "pdb" のデフォルトの入力シェルに、新しい対話型シェルを使うようになり
  ました。 (Tian Gao による貢献。gh-145379。)


pickle
------

* 非公開メソッドと入れ子のクラスの pickle 化をサポートしました。
  (Zackery Spytz と Serhiy Storchaka による貢献。gh-77188。)


pickletools
-----------

* "pickletools" のコマンドラインインターフェースの出力が、デフォルトで
  色付きになりました。 環境変数 で制御できます。 (Hugo van Kemenade に
  よる貢献。gh-149026。)


pprint
------

* "pprint.pprint()"、"pprint.pformat()"、"pprint.pp()" にキーワード引
  数 *expand* を追加しました。 真の場合、*indent* を指定した
  "json.dumps()" の整形出力に似た形式で出力します。 (Stefan Todoran,
  Semyon Moroz と Hugo van Kemenade による貢献。gh-112632。)

* "pprint" に t-string のサポートを追加しました。 (Loïc Simon と Hugo
  van Kemenade による貢献。gh-134551。)


re
--

* 既存の "re.match()" と "re.Pattern.match()" API の代わりとなる、より
  明示的な名前として、"re.prefixmatch()" と対応する
  "re.Pattern.prefixmatch()" を追加しました。 既存の API は *soft
  deprecated* となりました。 新しい名前は、Zen of Python の *「暗黙的
  であるより明示的であるほうがよい」* という指針に従い、*match* の意味
  についての混乱を減らすためのものです。 他の言語の正規表現ライブラリ
  の多くは、Python が従来 *search* と呼んできた処理に、*match* という
  名前の API を使っています。 (Gregory P. Smith による貢献。gh-86519。
  )


resource
--------

* 新しい定数 "RLIMIT_NTHR"、"RLIMIT_UMTXP"、"RLIMIT_THREADS"、
  "RLIM_SAVED_CUR"、"RLIM_SAVED_MAX" を追加しました。 (Serhiy
  Storchaka による貢献。gh-137512。)


shelve
------

* "shelve" に、削除済みのエントリーが以前占有していた未使用の空き領域
  を回収する、新しい "reorganize()" メソッドを追加しました。 (Andrea
  Oliveri による貢献。gh-134004。)

* "shelve" モジュールに、独自の直列化関数と非直列化関数のサポートを追
  加しました。 (Furkan Onder による貢献。gh-99631。)


socket
------

* ISO-TP CAN プロトコルの定数を追加しました。 (Patrick Menschel と
  Stefan Tatschner による貢献。gh-86819。)


sqlite3
-------

* コマンドラインインターフェース にいくつかの新機能が追加されました。

  * "Tab" による SQL キーワードの補完。 (Long Tan による貢献。
    gh-133393。)

  * プロンプト、エラーメッセージ、ヘルプテキストが色付きになりました。
    デフォルトで有効です。 詳細は 色の制御 を参照してください。 (Stan
    Ulbrych と Łukasz Langa による貢献。gh-133461。)

  * "Tab" によるテーブル、インデックス、トリガー、ビュー、カラム、関数
    、スキーマの補完。 (Long Tan による貢献。gh-136101。)


ssl
---

* "ssl.HAS_PSK_TLS13" により、"ssl" モジュールが **RFC 9258** に記載さ
  れた TLSv1.3 の「外部 PSK」をサポートするかどうかを示すようになりま
  した。 (Will Childs-Klein による貢献。gh-133624。)

* SSL の鍵共有で使うグループを管理する新しいメソッドを追加しました。

  * "ssl.SSLContext.set_groups()" sets the groups allowed for doing
    key agreement, extending the previous
    "ssl.SSLContext.set_ecdh_curve()" method. This new API provides
    the ability to list multiple groups and supports fixed-field and
    post-quantum groups in addition to ECDH curves. This method can
    also be used to control what key shares are sent in the TLS
    handshake.

  * "ssl.SSLSocket.group()" は、TLS ハンドシェイクの完了後、現在の接続
    で鍵共有に使うために選択されたグループを返します。 この呼び出しに
    は OpenSSL 3.2 以降が必要です。

  * "ssl.SSLContext.get_groups()" は、コンテキストに現在設定されている
    TLS の最小バージョンと最大バージョンに適合する、利用可能なすべての
    鍵共有グループのリストを返します。 この呼び出しには OpenSSL 3.5 以
    降が必要です。

  (Ron Frederick が gh-136306 で貢献しました。)

* TLS 1.3 の暗号を設定する新しいメソッド
  "ssl.SSLContext.set_ciphersuites()" を追加しました。 TLS 1.2 以前に
  は引き続き "ssl.SSLContext.set_ciphers()" を使ってください。 両方を
  同じコンテキストで呼び出せます。 選択される暗号スイートは、接続時に
  ネゴシエーションされた TLS バージョンに応じて決まります。 (Ron
  Frederick による貢献。gh-137197。)

* 署名アルゴリズムを管理する新しいメソッドを追加しました。

  * "ssl.get_sigalgs()" は、利用可能なすべての TLS 署名アルゴリズムの
    リストを返します。 この呼び出しには OpenSSL 3.4 以降が必要です。

  * "ssl.SSLContext.set_client_sigalgs()" は、証明書に基づくクライアン
    ト認証で許可する署名アルゴリズムを設定します。

  * "ssl.SSLContext.set_server_sigalgs()" は、サーバーが TLS ハンドシ
    ェイクを完了するために使用を許可する署名アルゴリズムを設定します。

  * "ssl.SSLSocket.client_sigalg()" は、現在の接続のクライアント認証で
    使うために選択された署名アルゴリズムを返します。 この呼び出しには
    OpenSSL 3.5 以降が必要です。

  * "ssl.SSLSocket.server_sigalg()" は、現在の接続でサーバーが TLS ハ
    ンドシェイクを完了するために選択された署名アルゴリズムを返します。
    この呼び出しには OpenSSL 3.5 以降が必要です。

  (Ron Frederick が gh-138252 で貢献しました。)


subprocess
----------

* "subprocess.Popen.wait()": "timeout" が "None" ではなく、プラットフ
  ォームがサポートする場合、効率的なイベント駆動の仕組みでプロセスの終
  了を待つようになりました。

  * Linux 5.3 以降では "os.pidfd_open()" と "select.poll()" を使います
    。

  * macOS とその他の BSD 系では "select.kqueue()"、"KQ_FILTER_PROC"、
    "KQ_NOTE_EXIT" を使います。

  * Windows は引き続き "WaitForSingleObject" を使います (変更なし)。

  これらの仕組みがどれも使えない場合、この関数は従来のビジーループ (非
  ブロッキング呼び出しと短いスリープ) にフォールバックします。
  (Giampaolo Rodola による貢献。gh-83069。)


symtable
--------

* "symtable.Function.get_cells()" メソッドと
  "symtable.Symbol.is_cell()" メソッドを追加しました。 (Yashp002 によ
  る貢献。gh-143504。)


sys
---

* ABI 情報にアクセスしやすくするため、"sys.abi_info" 名前空間を追加し
  ました。 (Klaus Zimmermann による貢献。gh-137476。)


sys.monitoring
--------------

* その他のイベント ("PY_THROW"、"PY_UNWIND"、"RAISE"、
  "EXCEPTION_HANDLED"、"RERAISE") を、コードオブジェクトごとに有効化、
  無効化できるようになりました。 これらのイベントのコールバックから
  "DISABLE" を返すと、以前のバージョンのように "ValueError" を送出せず
  、そのコードオブジェクト全体で (現在のツールについて) イベントを無効
  化します。 (Gabriele N. Tornetta による貢献。gh-146182。)


tarfile
-------

* "data_filter()" がパストラバーサル攻撃を防ぐために、シンボリックリン
  クのリンク先を正規化するようになりました。 (Petr Viktorin による貢献
  。gh-127987 と **CVE 2025-4138**。)

* "extractall()" が、ディレクトリが削除された場合や別の種類のファイル
  に置き換わった場合に、そのディレクトリの属性の修正をスキップするよう
  になりました。 (Petr Viktorin による貢献。gh-127987 と **CVE
  2024-12718**。)

* "extract()" and "extractall()" now (re-)apply the extraction filter
  when substituting a link (hard or symbolic) with a copy of another
  archive member, and when fixing up directory attributes. The former
  raises a new exception, "LinkFallbackError". (Contributed by Petr
  Viktorin for **CVE 2025-4330** and **CVE 2024-12718**.)

* "errorlevel()" がゼロの場合でも、"extract()" と "extractall()" は拒
  否されたメンバーを展開しなくなりました。 (Matt Prodani と Petr
  Viktorin による貢献。gh-112887 と **CVE 2025-4435**。)

* "extract()" と "extractall()" が、Windows 上で壊れたリンクを作成しな
  いよう、シンボリックリンクのリンク先のスラッシュをバックスラッシュに
  置き換えるようになりました。 (Christoph Walcher による貢献。gh-57911
  。)

* "gettarinfo()" が tar 形式の標準に従うため、Windows 上でシンボリック
  リンクのリンク先のバックスラッシュをスラッシュに置き換えるようになり
  ました。 (Daniele Nicolodi による貢献。gh-151669。)


threading
---------

* ジェネレーターやイテレーターへの並行アクセスをサポートするため、
  "serialize_iterator"、"synchronized_iterator()"、"concurrent_tee()"
  を追加しました。 (Raymond Hettinger による貢献。gh-124397。)


timeit
------

* "timeit" のコマンドラインインターフェースの出力が、デフォルトで色付
  きになりました。 環境変数 で制御できます。 (Hugo van Kemenade による
  貢献。gh-146609。)

* コマンドラインインターフェースがデフォルトでエラーのトレースバックに
  色を付けるようになりました。 環境変数 で制御できます。 (Yi Hong によ
  る貢献。gh-139374。)

* "timeit.Timer.autorange()" の目標時間を設定可能にし、コマンドライン
  インターフェースに "--target-time" オプションを追加しました。
  (Alessandro Cucci と Miikka Koskinen による貢献。gh-80642。)


tkinter
-------

* "tkinter.Text.search()" メソッドが、二つの追加引数をサポートしました
  。 *nolinestop* は検索を行の境界を越えて継続できるようにし、
  *strictlimits* は検索を指定した範囲内に制限します。 (Rihaan Meher に
  よる貢献。gh-130848。)

* 新しいメソッド "tkinter.Text.search_all()" を導入しました。 Tcl の
  "-all" オプションと "-overlap" オプションを使い、パターンに一致する
  箇所をすべて検索できます。 (Rihaan Meher による貢献。gh-130848。)

* 古い名前の Tk コマンドを使う "*_slaves()" メソッドの代わりに、新しい
  名前の Tk コマンド (Tk 8.6 で導入) を使う新しいメソッド
  "pack_content()"、"place_content()"、"grid_content()" を追加しました
  。 (Serhiy Storchaka による貢献。gh-143754。)

* "Event" の属性として、Tk の仮想イベント用に "user_data" を、"Enter"
  、"Leave"、"FocusIn"、"FocusOut"、"ConfigureRequest" イベント用に
  "detail" を追加しました。 (Matthias Kievernagel と Serhiy Storchaka
  による貢献。gh-47655。)


tokenize
--------

* "tokenize" の コマンドラインインターフェース の出力が、デフォルトで
  色付きになりました。 環境変数 で制御できます。 (Hugo van Kemenade に
  よる貢献。gh-148991。)


tomllib
-------

* "tomllib" モジュールが TOML 1.1.0 をサポートしました。 後方互換性の
  ある更新なので、有効な TOML 1.0.0 文書はすべて従来と同じように解析さ
  れます。

  official TOML changelog に記載された変更は次のとおりです。

  * インラインテーブル内で改行と末尾のカンマを許可。

    従来はインラインテーブルを 1 行に書く必要があり、末尾にカンマを置
    けませんでした。 この制約が緩和され、次の記述が有効になりました。

       tbl = {
          key      = "a string",
          moar-tbl =  {
             key = 1,
          },
       }

  * 基本文字列で、255 未満のコードポイントを表す "\xHH" 表記と、エスケ
    ープ文字を表す "\e" エスケープを追加。

       null = "null byte: \x00; letter a: \x61"
       csi = "\e["

  * 日時値と時刻値で秒を省略できるようになりました。 次の記述が有効に
    なりました。

       dt = 2010-02-03 14:15
       t  = 14:15

  (Taneli Hukkinen が gh-142956 で貢献しました。)


types
-----

* 書き込みが直接反映される "locals()" のプロキシ型を、
  "types.FrameLocalsProxyType" として公開しました。 **PEP 667** で説明
  されている "frame.f_locals" 属性の型を表します。 (Peter Bierma によ
  る貢献。gh-136492。)


typing
------

* **PEP 747**: 値自体が型式である場合にアノテーションを付ける、新しい
  特殊形式 "TypeForm" を追加しました。 "TypeForm[T]" は「"T" (または
  "T" に代入可能な型) を記述する型形式オブジェクト」を意味します。 実
  行時の "TypeForm(x)" は単に "x" を返すので、動作を変えずに型形式の値
  に明示的なアノテーションを付けられます。

  これにより、ユーザーが指定する型式 (例えば "int"、"str | None"、
  "TypedDict" クラス、"list[int]") を受け付けるライブラリが、正確なシ
  グネチャを公開しやすくなります。

     from typing import Any, TypeForm

     def cast[T](typ: TypeForm[T], value: Any) -> T: ...

  (Jelle Zijlstra が gh-145033 で貢献しました。)

* **PEP 728**: "TypedDict" にクラス引数 *closed* と *extra_items* のサ
  ポートを追加しました。 閉じた "TypedDict" は、クラス本体で指定された
  キー以外の追加のキーを許可しません。 一方、"extra_items" を指定した
  "TypedDict" は、値が指定した型である任意の追加項目を許可します。
  (Angela Liss による貢献。gh-137840。)

* "class ExtraTypeVars(P1[S], Protocol[T, T2]): ..." のようなコードは
  、"S" が "Protocol" の型引数に含まれていないため、"TypeError" を送出
  するようになりました。 (Nikita Sobolev による貢献。gh-137191。)

* "class B2(A[T2], Protocol[T1, T2]): ..." のようなコードが、型引数の
  順序を正しく扱うようになりました。 順序は "(T1, T2)" です。 従来は実
  行時に誤って "(T2, T1)" と推論されていました。 (Nikita Sobolev によ
  る貢献。gh-137191。)

* **PEP 800**: クラスを disjoint base として指定する新しいデコレーター
  "@typing.disjoint_base" を追加しました。 これは主に、組み込み型やコ
  ンパイルされた拡張で定義される型の実行時の意味を、型チェッカーが忠実
  に反映できるようにするための高度な機能です。 クラス "C" が disjoint
  base の場合、その子クラスは、"C" の親クラスでも子クラスでもない他の
  disjoint base を継承できません。 (Jelle Zijlstra による貢献。
  gh-148639。)

* "TypeVarTuple" が "TypeVar" と "ParamSpec" のインターフェースに合わ
  せ、キーワード引数 "bound"、"covariant"、"contravariant"、
  "infer_variance" を受け付けるようになりました。 "bound" の意味は仕様
  上、引き続き未定義です。


unicodedata
-----------

* Unicode データベースを Unicode 17.0.0 に更新しました。 (Benjamin
  Peterson による貢献。gh-138706。)

* 文字が Unicode Standard Annex #31 の識別子の先頭や後続の文字として使
  えるかを調べる、"unicodedata.isxidstart()" 関数と
  "unicodedata.isxidcontinue()" 関数を追加しました。 (Stan Ulbrych に
  よる貢献。gh-129117。)

* Unicode Standard Annex #29, "Unicode Text Segmentation" で定義された
  規則に従って書記素クラスタを反復処理する "iter_graphemes()" 関数を追
  加しました。 このアルゴリズムに関係する文字の特性を取得する、
  "grapheme_cluster_break()"、"indic_conjunct_break()"、
  "extended_pictographic()" 関数も追加しました。 (Serhiy Storchaka と
  Guillaume Sanchez による貢献。gh-74902。)

* 文字に割り当てられた Unicode ブロック を返す "block()" 関数を追加し
  ました。 (Stan Ulbrych による貢献。gh-66802。)


unittest
--------

* "unittest.TestCase.assertLogs()" が、メッセージの書式化を制御するフ
  ォーマッターを受け付けるようになりました。 (Garry Cairns による貢献
  。gh-134567。)

* "unittest.TestCase.assertWarns()" と
  "unittest.TestCase.assertWarnsRegex()" が、指定されたカテゴリや正規
  表現に一致しない警告を握りつぶさなくなりました。 入れ子のコンテキス
  トマネージャーもサポートしました。 (Serhiy Storchaka による貢献。
  gh-143231。)


urllib.parse
------------

* "urlsplit()"、"urlparse()"、"urldefrag()" 関数に *missing_as_none*
  パラメーターを追加しました。 "urlunsplit()" と "urlunparse()" 関数に
  *keep_empty* パラメーターを追加しました。 これにより、空の URI 構成
  要素と未定義の構成要素を区別し、空の構成要素を保持できます。 (Serhiy
  Storchaka による貢献。gh-67041。)


venv
----

* POSIX プラットフォームでは、仮想環境の作成時に "lib64 -> lib" シンボ
  リックリンクを使う代わりに、必要に応じて platlib ディレクトリを作成
  するようになりました。 これにより、"sys.platlibdir" が "lib" と異な
  るプラットフォームでは、仮想環境の purelib と platlib が同じ "lib"
  ディレクトリを共有しなくなります。 (Rui Xi による貢献。gh-133951。)


warnings
--------

* *module* 引数を渡さない場合の "warnings.warn_explicit()" のモジュー
  ルによるフィルタリングを改善しました。 警告フィルターのモジュール正
  規表現を、ファイル名から ".py" を除いたものだけでなく、ファイル名の
  各親ディレクトリを起点に構成したモジュール名 ("/__init__.py"、".py"
  、Windows では ".pyw" も除く) とも照合するようになりました。 (Serhiy
  Storchaka による貢献。gh-135801。)


wave
----

* "wave" に IEEE 浮動小数点数の WAVE 音声 ("WAVE_FORMAT_IEEE_FLOAT")
  のサポートを追加しました。

* フレーム形式を明示的に扱うため、"wave.Wave_read.getformat()"、
  "wave.Wave_write.getformat()"、"wave.Wave_write.setformat()" を追加
  しました。

* "wave.Wave_write.setparams()" は、"format" を含む 7 要素のタプルと、
  後方互換性のための 6 要素のタプル (形式はデフォルトの
  "WAVE_FORMAT_PCM") の両方を受け付けます。

* "WAVE_FORMAT_IEEE_FLOAT" の出力に、非 PCM の WAVE 形式で必須の
  "fact" チャンクを含めるようになりました。

(Lionel Koenig と Michiel W. Beijen が gh-60729 で貢献しました。)


webbrowser
----------

* macOS では、新しい "webbrowser.MacOS" クラスが、**osascript** で
  AppleScript を組み立てて実行する代わりに、**/usr/bin/open** で URL
  を開きます。 デフォルトのブラウザーは "plistlib" を使って
  LaunchServices の設定ファイルから検出し、新規インストールでは
  "com.apple.Safari" にフォールバックします。 HTTP(S) 以外の URL では
  、**open -b <bundle-id>** を使って OS のファイルハンドラーではなくブ
  ラウザーに URL を渡し、ファイルインジェクション攻撃を防ぎます。
  (Jeff Lyon による貢献。gh-137586。)


xml
---

* 文字列を XML の要素名または属性名として使えるかを調べる
  "xml.is_valid_name()" 関数を追加しました。 (Serhiy Storchaka による
  貢献。gh-139489。)

* 文字列を XML 文書で使えるかを調べる "xml.is_valid_text()" 関数を追加
  しました。 (Serhiy Storchaka による貢献。gh-139489。)


xml.parsers.expat
-----------------

* xmlparser オブジェクトに "SetAllocTrackerActivationThreshold()" と
  "SetAllocTrackerMaximumAmplification()" を追加し、Expat パーサー内で
  不釣り合いに大量の動的メモリが使用されることへの保護を調整できるよう
  にしました。 (Bénédikt Tran による貢献。gh-90949。)

* xmlparser オブジェクトに
  "SetBillionLaughsAttackProtectionActivationThreshold()" と
  "SetBillionLaughsAttackProtectionMaximumAmplification()" を追加し、
  billion laughs 攻撃への保護を調整できるようにしました。 (Bénédikt
  Tran による貢献。gh-90949。)


zlib
----

* "adler32_combine()" で二つの Adler-32 チェックサムを結合できるように
  なりました。 (Callum Attryde と Bénédikt Tran による貢献。gh-134635
  。)

* "crc32_combine()" で二つの CRC-32 チェックサムを結合できるようになり
  ました。 (Bénédikt Tran による貢献。gh-134635。)


最適化
======

* *フリースレッドビルド* のパフォーマンス向上のため、
  "PyMem_RawMalloc()" などによる生メモリの割り当てで、"mimalloc" をデ
  フォルトのアロケーターとして使うようになりました。 (Kumar Aditya に
  よる貢献。gh-144914。)


base64 と binascii
------------------

* 単純な CPU パイプライン処理の最適化により、CPython の基盤となる
  base64 実装のエンコードが 2 倍、デコードが 3 倍高速になりました。
  (Gregory P. Smith と Serhiy Storchaka による貢献。gh-143262。)

* Ascii85、Base85、Z85 エンコーディングの実装を C で書き直しました。
  エンコードとデコードが 2 桁 (約 100 倍) 高速になり、メモリ消費量も 2
  桁 (約 100 分の 1) 減りました。 (James Seo と Serhiy Storchaka によ
  る貢献。gh-101178。)

* Base32 の実装を C で書き直しました。 エンコードとデコードが 2 桁 (約
  100 倍) 高速になりました。 (James Seo による貢献。gh-146192。)


csv
---

* "csv.Sniffer.sniff()" の区切り文字の検出が最大 1.6 倍高速になりまし
  た。 (Maurycy Pawłowski-Wieroński による貢献。gh-137628。)


実験的な JIT コンパイラーの改良
-------------------------------

pyperformance ベンチマークスイートの結果では、x86-64 Linux において、
すべての最適化を有効にしてビルドした標準の CPython インタープリタに比
べ、JIT は幾何平均で 7–8% の性能向上を示しています。 AArch64 macOS で
は、すべての最適化を有効にした 末尾呼び出し型インタープリタ に比べ、
JIT は 11–12% 高速です。 JIT なしのビルドと比較した JIT ビルドの速度変
化は、x86-64 Linux と AArch64 macOS のシステムで、およそ 15% の低下か
ら 100% を超える向上まで幅があります ("unpack_sequence" マイクロベンチ
マークを除く)。

JIT の主な改良点は次のとおりです。

* ビルド時の依存先を LLVM 21 に変更

* 新しいトレーシングフロントエンド

* JIT に基本的なレジスター割り当てを導入

* JIT の最適化を拡充

* GDB と GNU の "backtrace()" によるスタックの巻き戻しをサポート

* 機械語コードの生成を改善

-[ ビルド時の依存先を LLVM 21 に変更 ]-

JIT コンパイラーが、ビルド時のステンシル生成に LLVM 21 を使うようにな
りました。 従来どおり、LLVM が必要なのは JIT を有効にして CPython をビ
ルドするときだけです。 Python を実行するエンドユーザーが LLVM をインス
トールする必要はありません。 すべてのサポート対象プラットフォームにつ
いて、LLVM のインストール手順は JIT コンパイラーのドキュメント にあり
ます。 (Savannah Ostrowski による貢献。gh-140973。)

-[ 新しいトレーシングフロントエンド ]-

JIT コンパイラーが Python 3.14 よりも大幅に多くのバイトコード操作と制
御フローをサポートし、より幅広いコードを高速化できるようになりました。
例えば、3.15 の JIT コンパイラーは単純な Python オブジェクトの作成を理
解できるようになりました。 オーバーロードされた演算やジェネレーターも
部分的にサポートします。 これは JIT のトレーシングフロントエンドを刷新
し、以前の実装のように実行経路を推定する代わりに、コードの実際の実行経
路を記録するようにしたことで実現しました。 (Ken Jin による gh-139109
での貢献。Windows のサポートは Mark Shannon が gh-141703 で追加しまし
た。)

-[ JIT に基本的なレジスター割り当てを導入 ]-

JIT コンパイラーのオプティマイザーに、基本的なレジスター割り当てを追加
しました。 これにより、一部のスタック操作を完全に省き、代わりにレジス
ター上で操作できます。 メモリの読み書きを避けることで、JIT はより効率
的なトレースを生成できます。 (Mark Shannon による貢献。gh-135379。)

-[ JIT の最適化を拡充 ]-

より多くの 定数伝播 を行うようになりました。 つまり、JIT コンパイラー
が、あるユーザーコードの結果が定数になると検出した場合に、そのコードを
単純化できます。 (Ken Jin と Savannah Ostrowski による貢献。gh-132732
。)

安全に省略できる場合は *参照カウント* の処理を省くようになりました。
これにより、一般に Python のほとんどの操作のコストが減ります。 (Ken
Jin, Donghee Na, Zheao Li, Hai Zhu, Savannah Ostrowski, Reiden Ong,
Noam Cohen, Tomas Roun, PuQing, Cajetan Rodrigues, と Sacul による貢献
。gh-134584。)

オブジェクトへの参照が唯一であることを追跡することで、JIT オプティマイ
ザーが参照カウントの更新を除去し、整数や浮動小数点数に対してインプレー
ス操作を行えるようになりました。 (Reiden Ong, と Pieter Eendebak によ
る貢献。gh-143414 と gh-146306。)

JIT オプティマイザーが、3.14 よりも大幅に多くの操作をサポートするよう
になりました。 (Kumar Aditya, Ken Jin, Jiahao Li, と Sacul による貢献
。gh-131798。)

-[ GDB と GNU の "backtrace()" によるスタックの巻き戻しをサポート ]-

サポート対象の Linux ELF プラットフォームで、JIT コンパイラーが生成し
た機械語コードの巻き戻し情報を GDB インターフェースに公開するようにな
りました。 libgcc のフレーム登録が利用可能な場合、同じ巻き戻し情報を
GNU の "backtrace()" でスタックをたどるためにも登録します。 これにより
、これらの仕組みを使うネイティブデバッガー、クラッシュハンドラー、診断
ツールが、生成されたコードで止まらずに JIT フレームを通過してスタック
を巻き戻せます。 (Diego Russo と Pablo Galindo Salgado による貢献。
gh-146071 と gh-149104。)

-[ 機械語コードの生成を改善 ]-

JIT コンパイラーの機械語コード生成器が、macOS と Linux の x86-64 およ
び AArch64 向けに、より良い機械語コードを生成するようになりました。 一
般に、3.14 に比べて生成された機械語コードのメモリ使用量が減り、コード
の効率も向上することが期待されます。 (Brandt Bucher による gh-136528
と gh-135905 での貢献。AArch64 向けの実装は Mark Shannon による
gh-139855 での貢献。AArch64 向けの追加の最適化は Mark Shannon と Diego
Russo による gh-140683 と gh-142305 での貢献。)

-[ 保守性 ]-

JIT のデータ構造のリファクタリングにより、JIT オプティマイザーの操作を
単純化しました。 (Zhongtian Zheng による gh-148211、Hai Zhu による
gh-143421 での貢献。)


削除
====


ast
---

* AST ノード のコンストラクターが、必須の引数を省略した場合や、AST ノ
  ードのフィールドに対応しないキーワード引数を渡した場合に "TypeError"
  を送出するようになりました。 これらの場合は Python 3.13 以降、
  "DeprecationWarning" を発していました。 (Brian Schubert と Jelle
  Zijlstra による貢献。gh-137600 と gh-105858。)


collections.abc
---------------

* "collections.abc.ByteString" を "collections.abc.__all__" から削除し
  ました。 "collections.abc.ByteString" は Python 3.12 以降非推奨で、
  Python 3.17 で削除される予定です。 (Alex Waygood による貢献。
  gh-118803。)


ctypes
------

* Python 3.13 以降非推奨だった、ドキュメントに記載されていない関数
  "ctypes.SetPointerType()" を削除しました。 (Bénédikt Tran による貢献
  。gh-133866。)


datetime
--------

* "strptime()" が、書式文字列に年の指定なしで "%d" (月内の日) が含まれ
  ている場合に "ValueError" を送出するようになりました。 これは Python
  3.13 以降非推奨でした。 (Stan Ulbrych と Gregory P. Smith による貢献
  。gh-70647。)


glob
----

* Python 3.13 以降非推奨だった、ドキュメントに記載されていない関数
  "glob.glob0()" と "glob.glob1()" を削除しました。 代わりに
  "glob.glob()" を使い、*root_dir* 引数にディレクトリを渡してください
  。 (Barney Gale による貢献。gh-137466。)


http.server
-----------

* "CGIHTTPRequestHandler" クラスと、**python -m http.server** コマンド
  ラインインターフェースの "--cgi" フラグを削除しました。 これらは
  Python 3.13 で非推奨になりました。 (Bénédikt Tran による貢献。
  gh-133810。)


importlib
---------

* "Loader" とそのサブクラスの "load_module()" メソッドを削除しました。
  独自のサブクラスにこのメソッドが定義されていても、インポートシステム
  は呼び出さなくなります。 このメソッドは Python 3.4 以降、
  "exec_module()" に置き換えられ、非推奨でした。 (Brett Cannon による
  貢献。gh-97850。)


importlib.resources
-------------------

* "importlib.resources.files()" 関数の非推奨の "package" パラメーター
  を削除しました。 (Semyon Moroz による貢献。gh-138044。)


pathlib
-------

* 非推奨の "pathlib.PurePath.is_reserved()" を削除しました。 Windows
  の予約済みパスを検出するには "os.path.isreserved()" を使ってください
  。 (Nikita Sobolev による貢献。gh-133875。)


platform
--------

* Python 3.13 以降非推奨だった "platform.java_ver()" 関数を削除しまし
  た。 (Alexey Makridenko による貢献。gh-133604。)


sre_*
-----

* "sre_compile"、"sre_constants"、"sre_parse" モジュールを削除しました
  。 (Stan Ulbrych による貢献。gh-135994。)


sysconfig
---------

* "sysconfig.is_python_build()" の *check_home* パラメーターを削除しま
  した。 (Filipe Laíns による貢献。gh-92897。)


threading
---------

* "RLock" オブジェクトの C 実装で、任意の位置引数やキーワード引数のサ
  ポートを削除しました。 これは Python 3.14 で非推奨になりました。
  (Bénédikt Tran による貢献。gh-134087。)


types
-----

* **PEP 626** により Python 3.12 以降非推奨だった
  "codeobject.co_lnotab" を、"types.CodeType" から削除しました。
  (Nikita Sobolev による貢献。gh-134690。)


typing
------

* "typing.ByteString" を "typing.__all__" から削除しました。
  "typing.ByteString" は Python 3.9 以降非推奨で、Python 3.17 で削除さ
  れる予定です。 (Alex Waygood による貢献。gh-118803。)

* "NamedTuple" クラスを作るための、ドキュメントに記載されていないキー
  ワード引数の構文 (例えば "Point = NamedTuple("Point", x=int,
  y=int)") は、サポートされなくなりました。 代わりにクラス構文または関
  数形式の構文を使ってください。 (Bénédikt Tran による貢献。gh-133817
  。)

* "TD = TypedDict("TD")" または "TD = TypedDict("TD", None)" でフィー
  ルドがゼロの "TypedDict" 型を作ることは、サポートされなくなりました
  。 代わりに "class TD(TypedDict): pass" または "TD = TypedDict("TD",
  {})" を使ってください。 (Bénédikt Tran による貢献。gh-133823。)

* 非推奨の "@typing.no_type_check_decorator" を削除しました。 (Nikita
  Sobolev による貢献。gh-133601。)


wave
----

* Python 3.13 以降非推奨だった "Wave_read" クラスと "Wave_write" クラ
  スの "getmark()"、"setmark()"、"getmarkers()" メソッドを削除しました
  。 (Bénédikt Tran による貢献。gh-133873。)


zipimport
---------

* 非推奨の "zipimport.zipimporter.load_module()" を削除しました。 代わ
  りに "zipimport.zipimporter.exec_module()" を使ってください。
  (Jiahao Li による貢献。gh-133656。)


非推奨
======


新たな非推奨事項
----------------

* "ast":

  * 抽象 AST ノード ("ast.AST" や "ast.expr" など) のインスタンスを作
    成することは非推奨となり、Python 3.20 ではエラーになります。

    (Brian Schubert が gh-116021 で貢献しました。)

* "base64":

  * "b64decode()" と "urlsafe_b64decode()" で、代替の文字集合を指定し
    たときに "+" と "/" を受け付けることは非推奨になりました。 今後の
    Python では、厳密モードではエラーとなり、厳密モードでなければ破棄
    されます。 (Serhiy Storchaka による貢献。gh-125346。)

* CLI:

  * コマンドラインオプション "-b" と "-bb" を非推奨とし、Python 3.17
    で何もしなくなる予定です。 これらは主に Python 2 から 3 への移行を
    支援するためのものでした。 Python 3.17 以降、これらの場合に
    "BytesWarning" は送出されなくなります。 代わりに型チェッカーを使っ
    てください。

    (Nikita Sobolev が gh-136355 で貢献しました。)

* "collections.abc":

  * 次の文が実行時に "DeprecationWarning" を発するようになりました。

    * "from collections.abc import ByteString"

    * "import collections.abc; collections.abc.ByteString".

    "collections.abc.ByteString" をサブクラス化した場合や、
    "isinstance()" または "issubclass()" の第 2 引数に使った場合は、す
    でに "DeprecationWarning" を発していました。 従来は単にインポート
    した場合や、"collections.abc" モジュールの属性としてアクセスした場
    合には、警告を発していませんでした。 (Alex Waygood による貢献。
    gh-118803。)

* "hashlib":

  * "new()" のようなハッシュ関数のコンストラクターや、"md5()" と
    "sha256()" のようにハッシュ名を直接使うコンストラクターでは、各種
    の "hashlib" 実装で、任意の初期データのパラメーターを "data=" や
    "string=" という名前のキーワード引数としても渡せました。

    キーワード引数名 "string" のサポートは非推奨となり、Python 3.19 で
    削除される予定です。 後方互換性を最大限に保つため、初期データは位
    置引数として渡すことを推奨します。

    (Bénédikt Tran が gh-134978 で貢献しました。)

* "http.cookies":

  * "Morsel.js_output" と "BaseCookie.js_output" は非推奨となり、
    Python 3.19 で削除されます。 代わりに "Morsel.output" または
    "BaseCookie.output" を使ってください。 (kishorhange111 による貢献
    。gh-148849。)

* "imaplib":

  * "IMAP4.file" の変更は非推奨となり、Python 3.19 で削除される予定で
    す。 このプロパティは使われなくなり、値を変更しても現在のファイル
    を明示的に閉じることは *ありません*。 (Bénédikt Tran による貢献。
    gh-142307。)

* "profile":

  * "profile" モジュールは非推奨となり、Python 3.17 で削除されます。
    代わりに、互換性のある API を提供する "profiling.tracing" を使って
    ください。 詳しくは **PEP 799** を参照してください。 (Pablo
    Galindo と László Kiss Kollár が gh-138122 で貢献しました。)

* "re":

  * "re.match()" と "re.Pattern.match()" は *ソフト非推奨* となり、代
    わりに新しい API "re.prefixmatch()" と "re.Pattern.prefixmatch()"
    を使うことが推奨されます。 これらは、より明確な別名として追加され
    ました。 Zen of Python の *「暗黙的であるより明示的であるほうがよ
    い」* という指針に従い、*match* の意味に関する混乱を減らすことを意
    図しています。 他の言語の正規表現ライブラリの多くでは、Python が一
    貫して *search* と呼んできた操作を *match* という名前の API で提供
    しています。

    従来の名前 "match()" は30年以上コードで使われているため、削除する
    予定は **ありません**。 古いバージョンの Python に対応するコードで
    は、引き続き "match()" を使ってください。 新しいコードでは
    "prefixmatch()" を使うことを推奨します。 prefixmatch() と match()
    の違い を参照してください。

    (Gregory P. Smith が gh-86519 で、Hugo van Kemenade が gh-148100
    で貢献しました。)

* "struct":

  * 必須の引数を指定せずに "Struct.__new__()" を呼び出すことは非推奨と
    なり、Python 3.20 で削除されます。 初期化済みの "Struct" オブジェ
    クトで "__init__()" メソッドを呼び出すことも非推奨となり、Python
    3.20 で削除されます。

    (Sergey B Kirpichev と Serhiy Storchaka が gh-143715 で貢献しまし
    た。)

  * 型コード "'F'" と "'D'" は、2 文字の形式 "'Zf'" と "'Zd'" に置き換
    えられ、*soft deprecated* となりました。 (Sergey B Kirpichev によ
    る貢献。gh-121249。)

* "typing":

  * 次の文が実行時に "DeprecationWarning" を発するようになりました。

    * "from typing import ByteString"

    * "import typing; typing.ByteString".

    "typing.ByteString" をサブクラス化した場合や、"isinstance()" また
    は "issubclass()" の第 2 引数に使った場合は、すでに
    "DeprecationWarning" を発していました。 従来は単にインポートした場
    合や、"typing" モジュールの属性としてアクセスした場合には、警告を
    発していませんでした。 (Alex Waygood による貢献。gh-118803。)

  * 実行時チェック可能なプロトコルクラスを継承していても、
    "runtime_checkable()" で明示的にデコレートされていないプロトコルク
    ラスに対し、"isinstance()" や "issubclass()" でチェックすることは
    非推奨です。 Python 3.20 では "TypeError" が発生します。

    (Bartosz Sławecki が gh-132604 で貢献しました。)

* "webbrowser":

  * "webbrowser.MacOSXOSAScript" は "webbrowser.MacOS" に置き換えられ
    、非推奨となりました。 Python 3.17 で削除される予定です。 (Jeff
    Lyon による貢献。gh-137586。)

* "__version__":

  * 以下の標準ライブラリモジュールの "__version__"、"version"、
    "VERSION" 属性は非推奨となり、Python 3.20 で削除されます。 代わり
    に "sys.version_info" を使ってください。

    * "argparse"

    * "csv"

    * "ctypes"

    * "ctypes.macholib"

    * "decimal" (代わりに "decimal.SPEC_VERSION" を使ってください)

    * "http.server"

    * "imaplib"

    * "ipaddress"

    * "json"

    * "logging" ("__date__" も非推奨)

    * "optparse"

    * "pickle"

    * "platform"

    * "re"

    * "socketserver"

    * "tabnanny"

    * "tarfile"

    * "tkinter.font"

    * "tkinter.ttk"

    * "wsgiref.simple_server"

    * "xml.etree.ElementTree"

    * "xml.sax.expatreader"

    * "xml.sax.handler"

    * "zlib"

    (Hugo van Kemenade と Stan Ulbrych が gh-76007 で貢献しました。)


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":

  * "asyncio.iscoroutinefunction()" は非推奨となり、Python 3.16 で削除
    されます。 代わりに "inspect.iscoroutinefunction()" を使ってくださ
    い。 (Jiahao Li と Kumar Aditya が gh-122875 で貢献しました。)

  * "asyncio" のポリシーシステムは非推奨となり、Python 3.16 で削除され
    ます。 具体的には、以下のクラスと関数が非推奨です：

    * "asyncio.AbstractEventLoopPolicy"

    * "asyncio.DefaultEventLoopPolicy"

    * "asyncio.WindowsSelectorEventLoopPolicy"

    * "asyncio.WindowsProactorEventLoopPolicy"

    * "asyncio.get_event_loop_policy()"

    * "asyncio.set_event_loop_policy()"

    使いたいイベントループの実装を指定するには、"asyncio.run()" または
    "asyncio.Runner" の "loop_factory" を使ってください。

    例えば、Windows で "asyncio.SelectorEventLoop" を使うには、次のよ
    うにします。

       import asyncio

       async def main():
           ...

       asyncio.run(main(), loop_factory=asyncio.SelectorEventLoop)

    (Kumar Aditya が gh-127949 で貢献しました。)

* "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":

  * "Class.get_methods" メソッドは Python 3.14 から非推奨です。

* "sys":

  * "_enablelegacywindowsfsencoding()" 関数は Python 3.13 から非推奨で
    す。 代わりに環境変数 "PYTHONLEGACYWINDOWSFSENCODING" を使ってくだ
    さい。

* "sysconfig":

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

* "tarfile":

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


Python 3.17 で削除予定
----------------------

* "datetime":

  * 年を含まず "%e" (月内の日) を含む書式文字列で "strptime()" を呼び
    出すこと。 これは Python 3.15 から非推奨です。 (Stan Ulbrych が
    gh-70647 で貢献しました。)

* "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 で貢献しました。)

* "encodings":

  * "encodings.normalize_encoding()" に非 ASCII の "encoding" 名を渡す
    ことは非推奨となり、Python 3.17 で削除予定です。 (Stan Ulbrych が
    gh-136702 で貢献しました。)

* "profile":

  * "profile" モジュールは非推奨となり、Python 3.17 で削除されます。
    代わりに、互換性のある API を提供する "profiling.tracing" を使って
    ください。 詳しくは **PEP 799** を参照してください。 (Pablo
    Galindo と László Kiss Kollár が gh-138122 で貢献しました。)

* "webbrowser":

  * "webbrowser.MacOSXOSAScript" は非推奨となりました。 代わりに
    "webbrowser.MacOS" を使ってください。 (gh-137586)

* "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 で貢献しました。)

* "tkinter":

  * Python 3.14 から非推奨となっている "tkinter.Variable" のメソッド
    "trace_variable()"、"trace()" ("trace_variable()" の別名)、
    "trace_vdelete()"、"trace_vinfo()" は、Python 3.17 で削除予定です
    。 代わりに "trace_add()"、"trace_remove()"、"trace_info()" を使っ
    てください。 (Serhiy Storchaka が gh-120220 で貢献しました。)


Python 3.18 で削除予定
----------------------

* ファイルディスクリプタが必要なところでは、真偽値を受け付けなくなりま
  す。 (Serhiy Storchaka が gh-82626 で貢献しました。)

* "decimal":

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

* **PEP 829** で定義された非推奨事項：

  * "*name*.pth" ファイルの "import" 行は、警告なしで無視されます。

  (Barry Warsaw が gh-148641 で貢献しました。)


Python 3.19 で削除予定
----------------------

* "ctypes":

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

* "hashlib":

  * "hashlib" のさまざまな実装では、"new()" や、"md5()"、"sha256()" な
    どのハッシュ名を直接使ったコンストラクターに、省略可能な初期データ
    を "data=" または "string=" というキーワード引数で渡すこともできま
    した。

    キーワード引数名 "string" のサポートは非推奨となり、Python 3.19 で
    削除予定です。

    Python 3.13 より前は、ハッシュ関数のバックエンド実装によっては、キ
    ーワードパラメータ "string" が正しくサポートされていませんでした。
    後方互換性を最大限に保つには、初期データは位置引数として渡してくだ
    さい。

* "http.cookies":

  * "http.cookies.Morsel.js_output()" は非推奨となり、Python 3.19 で削
    除されます。

  * "http.cookies.BaseCookie.js_output()" は非推奨となり、Python 3.19
    で削除されます。

* "imaplib":

  * "IMAP4.file" の変更は非推奨となり、Python 3.19 で削除予定です。 こ
    のプロパティは現在使われておらず、値を変更しても現在のファイルは自
    動的には閉じられません。

    Python 3.14 より前は、このプロパティは "IMAP4" の対応する "read()"
    メソッドと "readline()" メソッドの実装に使われていましたが、それ以
    降は使われていません。


Python 3.20 で削除予定
----------------------

* "struct.Struct" の "__new__()" メソッドを "format" 引数なしで呼び出
  すことは非推奨となり、Python 3.20 で削除されます。 初期化済みの
  "Struct" オブジェクトで "__init__()" メソッドを呼び出すことも非推奨
  となり、Python 3.20 で削除されます。

  (Sergey B Kirpichev と Serhiy Storchaka が gh-143715 で貢献しました
  。)

* 以下の標準ライブラリモジュールの "__version__"、"version"、"VERSION"
  属性は非推奨となり、Python 3.20 で削除されます。 代わりに
  "sys.version_info" を使ってください。

  * "argparse"

  * "csv"

  * "ctypes"

  * "ctypes.macholib"

  * "decimal" (代わりに "decimal.SPEC_VERSION" を使ってください)

  * "http.server"

  * "imaplib"

  * "ipaddress"

  * "json"

  * "logging" ("__date__" も非推奨)

  * "optparse"

  * "pickle"

  * "platform"

  * "re"

  * "socketserver"

  * "tabnanny"

  * "tarfile"

  * "tkinter.font"

  * "tkinter.ttk"

  * "wsgiref.simple_server"

  * "xml.etree.ElementTree"

  * "xml.sax.expatreader"

  * "xml.sax.handler"

  * "zlib"

  (Hugo van Kemenade と Stan Ulbrych が gh-76007 で貢献しました。)

* **PEP 829** で定義された非推奨事項：

  * "*name*.pth" ファイルに "import" 行がある場合は警告が出ます。

  * "*name*.pth" ファイルは、デフォルトではロケールのエンコーディング
    でデコードされなくなります。 "utf-8-sig" でエンコードされて **いな
    ければなりません**。

  (Barry Warsaw が gh-148641 で貢献しました。)

* "ast":

  * 抽象 AST ノード ("ast.AST" や "ast.expr" など) のインスタンスを作
    成することは非推奨となり、Python 3.20 ではエラーになります。

* "typing":

  * 実行時チェック可能なプロトコルクラスを継承していても、
    "runtime_checkable()" で明示的にデコレートされていないプロトコルク
    ラスに対し、"isinstance()" や "issubclass()" でチェックすることは
    非推奨です。 Python 3.20 では "TypeError" が発生します。

    (Bartosz Sławecki が gh-132604 で貢献しました。)


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

以下の 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"：代わりに "codeobject.co_lines()" メソッドを
  使ってください。

* "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 a multi-threaded process.

* "os.path"："os.path.commonprefix()" は非推奨です。 パスの共通の先頭
  部分を求めるには "os.path.commonpath()" を使ってください。
  "os.path.commonprefix()" は、名前と所属するモジュールが誤解を招くた
  め非推奨になります。 この関数はパス操作用のモジュールに含まれていま
  すが、パスの先頭部分を扱う用途では安全に使えません。 そのため、この
  関数を使うと Python プログラムにパストラバーサルの脆弱性を誤って持ち
  込みやすくなります。

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

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

* "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" のメソッド：

  * "threading.Condition.notifyAll()"："notify_all()" を使ってください
    。

  * "threading.Event.isSet()"："is_set()" を使ってください。

  * "threading.Thread.isDaemon()"、"threading.Thread.setDaemon()"：
    "threading.Thread.daemon" 属性を使ってください。

  * "threading.Thread.getName()"、"threading.Thread.setName()"：
    "threading.Thread.name" 属性を使ってください。

  * "threading.currentThread()"："threading.current_thread()" を使って
    ください。

  * "threading.activeCount()"："threading.active_count()" を使ってくだ
    さい。

* "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()" を使ってください。


ソフト非推奨
------------

*ソフト非推奨* の API を削除する予定はありません。

* "re.match()" と "re.Pattern.match()" は *ソフト非推奨* となり、代わ
  りに新しい API "re.prefixmatch()" と "re.Pattern.prefixmatch()" を使
  うことが推奨されます。 これらは、より明確な別名として追加されました
  。 Zen of Python の *「暗黙的であるより明示的であるほうがよい」* と
  いう指針に従い、*match* の意味に関する混乱を減らすことを意図していま
  す。 他の言語の正規表現ライブラリの多くでは、Python が一貫して
  *search* と呼んできた操作を *match* という名前の API で提供していま
  す。

  従来の名前 "match()" は30年以上コードで使われているため、削除する予
  定は **ありません**。 古いバージョンの Python に対応するコードでは、
  引き続き "match()" を使ってください。 新しいコードでは
  "prefixmatch()" を使うことを推奨します。 prefixmatch() と match() の
  違い を参照してください。

  (Gregory P. Smith が gh-86519 で、Hugo van Kemenade が gh-148100 で
  貢献しました。)

* "struct" モジュールの書式型コード "'F'" と "'D'" の使用は *ソフト非
  推奨* となり、代わりに2文字の形式 "'Zf'" と "'Zd'" を使うことが推奨
  されます。 (Sergey B Kirpichev が gh-121249 で貢献しました。)


C API の変更
============


新しい機能
----------

* "METH_FASTCALL" 呼び出し規約を使う関数の引数を解析する、
  "PyArg_ParseArray()" 関数と "PyArg_ParseArrayAndKeywords()" 関数を追
  加しました。 (Victor Stinner による貢献。gh-144175。)

* 新しい "frozendict" 型用に次の関数を追加しました。

  * "PyAnyDict_Check()"

  * "PyAnyDict_CheckExact()"

  * "PyFrozenDict_Check()"

  * "PyFrozenDict_CheckExact()"

  * "PyFrozenDict_New()"

  (Victor Stinner が gh-141510 で貢献しました。)

* 制限付き C API に "PyObject_CallFinalizerFromDealloc()" 関数を追加し
  ました。 (Victor Stinner による貢献。gh-146063。)

* "PySys_GetObject()" の代替として、"PySys_GetAttr()"、
  "PySys_GetAttrString()"、"PySys_GetOptionalAttr()"、
  "PySys_GetOptionalAttrString()" 関数を追加しました。 (Serhiy
  Storchaka による貢献。gh-108512。)

* 文字列のキャッシュ済みハッシュ値を取得する
  "PyUnstable_Unicode_GET_CACHED_HASH()" を追加しました。 注意事項はド
  キュメントを参照してください。 (Petr Viktorin による貢献。gh-131510
  。)

* 拡張モジュールの ABI 互換性を検査する API として、"Py_mod_abi"、
  "PyABIInfo_Check()"、"PyABIInfo_VAR" を追加しました。 (Petr Viktorin
  による貢献。gh-137210。)

* **PEP 782** の PyBytesWriter API を実装しました。 次の関数を追加しま
  した。

  * "PyBytesWriter_Create()"

  * "PyBytesWriter_Discard()"

  * "PyBytesWriter_Finish()"

  * "PyBytesWriter_FinishWithPointer()"

  * "PyBytesWriter_FinishWithSize()"

  * "PyBytesWriter_Format()"

  * "PyBytesWriter_GetData()"

  * "PyBytesWriter_GetSize()"

  * "PyBytesWriter_Grow()"

  * "PyBytesWriter_GrowAndUpdatePointer()"

  * "PyBytesWriter_Resize()"

  * "PyBytesWriter_WriteBytes()"

  (Victor Stinner が gh-129813 で貢献しました。)

* "PyCriticalSection" と関連関数を安定 ABI に追加しました。 (Petr
  Viktorin による貢献。gh-149225。)

* *spec* と *initfunc* からモジュールを作成する新しい C API
  "PyImport_CreateModuleFromInitfunc()" を追加しました。 (Itamar Oren
  による貢献。gh-116146。)

* 配列から "tuple" を作成する "PyTuple_FromArray()" を追加しました。
  (Victor Stinner による貢献。gh-111489。)

* 新しいモジュールエクスポートフック "PyModExport_*" を追加しました。

  (Petr Viktorin が **PEP 793** and gh-140550 で貢献しました。)

* "tp_traverse" ハンドラーで安全に使用できることが保証された関数を追加
  しました。 "PyObject_GetTypeData_DuringGC()"、
  "PyObject_GetItemData_DuringGC()"、
  "PyType_GetModuleState_DuringGC()"、"PyModule_GetState_DuringGC()"、
  "PyModule_GetToken_DuringGC()"、"PyType_GetBaseByToken_DuringGC()"、
  "PyType_GetModule_DuringGC()"、"PyType_GetModuleByToken_DuringGC()"
  です。 (Petr Viktorin による貢献。gh-145925。)

* オブジェクトを "stderr" にダンプする "PyObject_Dump()" を追加しまし
  た。 デバッグのためだけに使うべきです。 (Victor Stinner による貢献。
  gh-141070。)

* **PEP 820**: "PySlot" — C API の統一スロットシステムを実装しました。
  ドキュメントは 定義用スロット を参照してください。

  次のものを追加します。

  * "PySlot" 構造体

  * "PyType_FromSlots()" 関数

  * 新しいスロット ID: "Py_slot_end"、"Py_slot_invalid"、
    "Py_slot_subslots"、"Py_tp_slots"、"Py_mod_slots"、"Py_tp_name"、
    "Py_tp_basicsize"、"Py_tp_extra_basicsize"、"Py_tp_itemsize"、
    "Py_tp_flags"、"Py_tp_metaclass"、"Py_tp_module"

  * 便利なマクロ: "PySlot_DATA"、"PySlot_FUNC"、"PySlot_SIZE"、
    "PySlot_INT64"、"PySlot_UINT64"、"PySlot_STATIC_DATA"、
    "PySlot_END"、"PySlot_PTR"、"PySlot_PTR_STATIC"

  "PyModule_FromSlotsAndSpec()" 関数と "PyModExport" モジュールエクス
  ポートフック も、新しい "PySlot" 構造体を使います。

  次の関数は *soft deprecated* になりました。

  * "PyType_FromSpec()"

  * "PyType_FromSpecWithBases()"

  * "PyType_FromModuleAndSpec()"

  * "PyType_FromMetaclass()"

  * "PyModule_FromDefAndSpec()"

  * "PyModule_FromDefAndSpec2()"

  * "PyModule_ExecDef()"

  "Py_tp_bases" スロットと "Py_tp_base" スロットは等価になり、どちらに
  も単一の型または型のタプルを設定できます。 "Py_tp_bases" スロットを
  推奨します。 両方を指定した場合は、もう一方は無視されます。

  (Petr Viktorin が gh-149044 で貢献しました。)

* Python のスレッド状態のスタック保護の基底アドレスとサイズを設定する
  、"PyUnstable_ThreadState_SetStackProtection()" 関数と
  "PyUnstable_ThreadState_ResetStackProtection()" 関数を追加しました。
  (Victor Stinner による貢献。gh-139653。)

* オブジェクトを *immortal* にする C API 関数
  "PyUnstable_SetImmortal()" を追加しました。 (Kumar Aditya による貢献
  。gh-143300。)

* Python 3.14 で削除した非公開の暫定的な関数 "_Py_InitializeMain()" を
  復活させました。 (Victor Stinner による貢献。gh-142417。)

* Python のスタックトレースを出力する "PyUnstable_DumpTraceback()" 関
  数と "PyUnstable_DumpTracebackThreads()" 関数を追加しました。 (Alex
  Malyshev による貢献。gh-145559。)


変更された C API
----------------

* "Py_TPFLAGS_MANAGED_DICT" または "Py_TPFLAGS_MANAGED_WEAKREF" フラグ
  を設定する場合、"Py_TPFLAGS_HAVE_GC" も設定しなければなりません。
  (Sergey Miryanov による貢献。gh-134786。)

* "PyDateTime_IMPORT" がスレッドセーフになりました。 "PyDateTimeAPI"
  が "NULL" かどうかを直接調べるコードは、代わりに "PyDateTime_IMPORT"
  を呼び出すように更新するべきです。 (Kumar Aditya による貢献。
  gh-141563。)


削除された C API
----------------

* 非推奨の "PyUnicode" 関数を削除しました。

  * "PyUnicode_AsDecodedObject()"：代わりに "PyCodec_Decode()" を使っ
    てください。

  * "PyUnicode_AsDecodedUnicode()": 代わりに "PyCodec_Decode()" を使っ
    てください。 一部のコーデック (例えば "base64") は、"bytes" など、
    "str" 以外の型を返す場合があることに注意してください。

  * "PyUnicode_AsEncodedObject()"：代わりに "PyCodec_Encode()" を使っ
    てください。

  * "PyUnicode_AsEncodedUnicode()": Use "PyCodec_Encode()" instead;
    note that some codecs (for example, "base64") may return a type
    other than "bytes", such as "str".

  (Stan Ulbrych が gh-133612 で貢献しました。)

* "PyImport_ImportModuleNoBlock()": "PyImport_ImportModule()" の非推奨
  の別名です。 (Bénédikt Tran による貢献。gh-133644。)

* "PyWeakref_GetObject()" と "PyWeakref_GET_OBJECT": 代わりに
  "PyWeakref_GetRef()" を使ってください。 Python 3.12 以前では
  pythoncapi-compat project を使うことで "PyWeakref_GetRef()" を利用で
  きます。 (Bénédikt Tran による貢献。gh-133644。)

* 非推奨の "PySys_ResetWarnOptions()" を削除しました。 代わりに
  "sys.warnoptions" と "warnings.filters" を空にしてください。

  (Nikita Sobolev が gh-138886 で貢献しました。)

次の関数は "PyConfig_Get()" に置き換えられ、削除されました。 Python
3.13 以前では pythoncapi-compat project を使うことで "PyConfig_Get()"
を利用できます。

* Python の初期化関数:

  * "Py_GetExecPrefix()": 代わりに "PyConfig_Get("base_exec_prefix")"
    ("sys.base_exec_prefix") を使ってください。 仮想環境 を扱う必要が
    ある場合は "PyConfig_Get("exec_prefix")" ("sys.exec_prefix") を使
    ってください。

  * "Py_GetPath()": 代わりに "PyConfig_Get("module_search_paths")"
    ("sys.path") を使ってください。

  * "Py_GetPrefix()": 代わりに "PyConfig_Get("base_prefix")"
    ("sys.base_prefix") を使ってください。 仮想環境 を扱う必要がある場
    合は "PyConfig_Get("prefix")" ("sys.prefix") を使ってください。

  * "Py_GetProgramFullPath()": 代わりに "PyConfig_Get("executable")"
    ("sys.executable") を使ってください。

  * "Py_GetProgramName()": 代わりに "PyConfig_Get("executable")"
    ("sys.executable") を使ってください。

  * "Py_GetPythonHome()": 代わりに "PyConfig_Get("home")" または環境変
    数 "PYTHONHOME" を使ってください。

  (Bénédikt Tran が gh-133644 で貢献しました。)


非推奨になった C API
--------------------

* **PEP 456** の文字列ハッシュ方式を外部で定義する機能を非推奨としまし
  た。 Python 3.19 で削除される予定です。

  従来、埋め込み側は "Py_HASH_ALGORITHM" を "Py_HASH_EXTERNAL" と定義
  することで、ハッシュ方式を外部から提供することを指定できました。 し
  かし、この機能はドキュメントに記載されず、テストもされておらず、おそ
  らく使用もされていませんでした。

  (Bénédikt Tran が gh-141226 で貢献しました。)

* "PyArg_ParseTuple()" の符号なし整数の書式で、対応する C 型の最大値よ
  り大きい Python 整数、または同じサイズの対応する符号付き整数型の最小
  値より小さい Python 整数を受け付けることは非推奨になりました。
  (Serhiy Storchaka による貢献。gh-132629。)

* "PyBytes_FromStringAndSize(NULL, len)" と "_PyBytes_Resize()" は
  *soft deprecated* になりました。 代わりに "PyBytesWriter" API を使っ
  てください。 (Victor Stinner による貢献。gh-129813。)

* "_PyObject_CallMethodId()"、"_PyObject_GetAttrId()"、
  "_PyUnicode_FromId()" は Python 3.15 以降非推奨で、Python 3.20 で削
  除されます。 代わりに "PyUnicode_InternFromString()" の結果をモジュ
  ール状態にキャッシュし、"PyObject_CallMethod()" または
  "PyObject_GetAttr()" を呼び出してください。 (Victor Stinner による貢
  献。gh-141049。)

* "PyComplexObject" 型の "cval" フィールドを非推奨としました。 Python
  の複素数と C の "Py_complex" 表現の間の変換には、
  "PyComplex_AsCComplex()" と "PyComplex_FromCComplex()" を使ってくだ
  さい。 (Sergey B Kirpichev による貢献。gh-128813。)

* "_Py_c_sum()"、"_Py_c_diff()"、"_Py_c_neg()"、"_Py_c_prod()"、
  "_Py_c_quot()"、"_Py_c_pow()"、"_Py_c_abs()" 関数は *soft
  deprecated* になりました。 (Sergey B Kirpichev による貢献。gh-128813
  。)

* "bytes_warning" は Python 3.15 以降非推奨で、Python 3.17 で削除され
  ます。 (Nikita Sobolev による貢献。gh-136355。)

* "Py_INFINITY" マクロは *soft deprecated* になりました。 代わりに C11
  標準の "<math.h>" の "INFINITY" を使ってください。 (Sergey B
  Kirpichev による貢献。gh-141004。)

* 次のマクロは *soft deprecated* になりました。

  * "Py_ALIGNED": 代わりに "alignas" を推奨します。

  * "PY_FORMAT_SIZE_T": ""z"" を直接使ってください。

  * "Py_LL" と "Py_ULL": 標準の接尾辞 "LL" と "ULL" を使ってください。

  * "PY_LONG_LONG"、"PY_LLONG_MIN"、"PY_LLONG_MAX"、"PY_ULLONG_MAX"、
    "PY_INT32_T"、"PY_UINT32_T"、"PY_INT64_T"、"PY_UINT64_T"、
    "PY_SIZE_MAX": C99 の型や上限・下限値を使ってください。

  * "Py_UNICODE_SIZE": "sizeof(wchar_t)" を直接使ってください。

  * "Py_VA_COPY": "va_copy" を直接使ってください。

  削除予定だったマクロ "Py_UNICODE_WIDE" は、代わりに *soft
  deprecated* となりました。

  (Petr Viktorin が gh-146175 で貢献しました。)

* "Py_MATH_El" と "Py_MATH_PIl" は Python 3.15 以降非推奨で、Python
  3.20 で削除されます。 (Sergey B Kirpichev による貢献。gh-141004。)


ビルドの変更
============

* 同梱の "libmpdec" ライブラリへの暗黙のフォールバックを削除しました。
  今後は "--with-system-libmpdec" を "no" に設定するか、"--without-
  system-libmpdec" で明示的に有効にする必要があります。 (Sergey B
  Kirpichev による貢献。gh-115119。)

* 新しい configure オプション "--with-missing-stdlib-config=FILE" によ
  り、配布者は、欠けているか別途パッケージ化されている *standard
  library* モジュールについての独自のエラーメッセージを含む JSON 設定
  ファイルを渡せます。 (Stan Ulbrych と Petr Viktorin による貢献。
  gh-139707。)

* 新しい configure オプション "--with-pymalloc-hugepages" は、pymalloc
  のアリーナでヒュージページのサポートを有効にします。 有効にするとア
  リーナのサイズは 2 MiB になり、割り当てには "MAP_HUGETLB" (Linux) ま
  たは "MEM_LARGE_PAGES" (Windows) を使い、通常のページへ自動的にフォ
  ールバックします。 Windows では "build.bat --pymalloc-hugepages" を
  使ってください。 実行時には、環境変数 "PYTHON_PYMALLOC_HUGEPAGES" を
  "1" に設定し、ヒュージページを明示的に有効にする必要があります。
  (Pablo Galindo Salgado による貢献。gh-144319。)

* Linux カーネルが *PR_SET_VMA_ANON_NAME* をサポートする場合 (Linux
  5.17 以降)、匿名 mmap の用途に注釈を付けられるようになりました。 カ
  ーネルがこの機能をサポートし、Python に "-X dev" を渡すか、Python を
  デバッグモード でビルドしている場合、注釈は "/proc/<pid>/maps" に表
  示されます。 (Donghee Na による貢献。gh-141770。)

* CPython はデフォルトでフレームポインターを有効にしてビルドされるよう
  になりました (**PEP 831**)。 無効にするには "--without-frame-
  pointers" を渡してください。

  独自のビルドシステムを使う C 拡張やネイティブライブラリの作成者は、
  スタックを巻き戻すための連鎖が途切れないようにするべきです。 通常は
  "CFLAGS" に "-fno-omit-frame-pointer" などのフラグを追加することで対
  応します。 Python が使う具体的なフラグは "--without-frame-pointers"
  のドキュメントを参照してください。

  (Pablo Galindo Salgado と Savannah Ostrowski が gh-149201 で貢献しま
  した。)

* Visual Studio 2026 (MSVC 18) を使った 64 ビットビルドで、新しい 末尾
  呼び出し型インタープリタ を使えるようになりました。 Visual Studio
  18.1.1 での結果では、AMD Ryzen 7 5800X 上の Windows x86-64 で、
  switch-case インタープリタに比べ、pyperformance の幾何平均で 15–20%
  の高速化が報告されています。 Windows では、大規模な純粋 Python ライ
  ブラリでの 14% から、長時間実行する小さな純粋 Python スクリプトでの
  40% までの高速化が観測されています。 これは MSVC 18 で導入された新機
  能によって実現しました。 python.org の公式 Windows 64 ビットバイナリ
  も、この機能を使うようになりました。 (Chris Eibl、Ken Jin、Brandt
  Bucher による gh-143068 での貢献。Steve Dower、および Hulon Jenkins
  を含む MSVC チームに感謝します。)


Python 3.15 への移行
====================

この節では、前述の変更とその他のバグ修正のうち、コードの変更が必要にな
る可能性があるものを列挙します。

* "sqlite3.Connection" API を整理しました。

  * "sqlite3.connect()" の *database* 以外のすべてのパラメーターが、キ
    ーワード専用になりました。

  * "create_function()" メソッドと "create_aggregate()" メソッドの最初
    の三つのパラメーターが、位置専用になりました。

  * "set_authorizer()"、"set_progress_handler()"、
    "set_trace_callback()" メソッドの最初のパラメーターが、位置専用に
    なりました。

  (Serhiy Storchaka が gh-133595 で貢献しました。)

* "resource.RLIM_INFINITY" が常に正になりました。 以前の値に対応する負
  の整数 (プラットフォームにより "-1" や "-3" など) を
  "resource.setrlimit()" と "resource.prlimit()" に渡すことは非推奨に
  なりました。 (Serhiy Storchaka による貢献。gh-137044。)

* 基盤となるシステムコールをサポートしないプラットフォームでは、
  "mmap.mmap.resize()" が "SystemError" を送出する代わりに、メソッド自
  体が削除されました。 (An Long による貢献。gh-138205。)

* "xml.etree.ElementTree.iterparse()" のイテレーターがファイルを開き、
  閉じられないままになった場合に、リソース警告を発するようになりました
  。 "close()" メソッドまたは "contextlib.closing()" コンテキストマネ
  ージャーを使って閉じてください。 (Osama Abdelkader と Serhiy
  Storchaka による貢献。gh-140601。)

* "argparse.ArgumentParser.add_argument()" に短いオプションと単一のダ
  ッシュで始まる長いオプションを渡した場合、長いオプションから *dest*
  を推論するようになりました。 例えば "add_argument('-f', '-foo')" の
  *dest* は、"'f'" ではなく "'foo'" になります。 以前の動作を保つには
  *dest* 引数を明示してください。 (Serhiy Storchaka による貢献。
  gh-138697。)

* "base64.urlsafe_b64decode()" で入力のパディングが必須でなくなりまし
  た。 必須にするには、新しい引数 "padded=True" を渡すか、
  "base64.b64decode()" に引数 "altchars=b'-_'" を渡してください (後者
  は古い Python でも動作します)。 (Serhiy Storchaka による貢献。
  gh-73613。)

* "unittest.TestCase.assertWarns()" と
  "unittest.TestCase.assertWarnsRegex()" が指定したカテゴリや正規表現
  に一致しない警告を握りつぶさなくなったため、従来は隠れていた警告がテ
  ストから漏れ出す可能性があります。 警告フィルターで抑制するか、追加
  の "assertWarns*()" で捕捉して検査してください。 (Serhiy Storchaka
  による貢献。gh-143231。)


3.15.2 の注目すべき変更
=======================


importlib
---------

* 複数のスレッドが同時に初めての "import package.submodule" を実行して
  も、デッドロックや誤ったインポートエラーの危険がなくなりました。 こ
  れは gh-83065 の修正により 3.15.0 で導入されたリグレッションです。
  パッケージのインポートロックは、"__init__" が戻るとすぐに解放される
  ようになりました。 複数のスレッドにまたがる循環インポートでは、
  "importlib.import_module()" は "_DeadlockError" を送出する代わりに、
  "import" 文と同様に初期化途中のモジュールを返すようになりました。
  (Gregory P. Smith による貢献。gh-159963。)


ssl
---

* "ssl" モジュールが、侵害された一群の eMudhra 中間 CA 証明書のいずれ
  かを含む TLS 証明書チェーンを拒否するようになりました。 対象の証明書
  は公開鍵で識別するため、同じ鍵を再利用したクロス署名済みのコピーも拒
  否します。 これは多層防御の最後の備えとして、アプリケーションが独自
  のルート CA バンドルを指定していても、またプラットフォームのトラスト
  ストアが信頼を取り消しているかどうかによらず、適用されます。
  (Christian Heimes による貢献。gh-160040 for **CVE 2026-115557**。)
