What's new in Python 3.14
*************************

エディタ:
   Adam Turner と Hugo van Kemenade

この記事では Python 3.13 と比較した Python 3.14 の新機能を解説します。
Python 3.14 は2025年10月7日にリリースされました。全詳細については 変更
履歴 をご覧ください。

参考: **PEP 745** -- Python 3.14 リリーススケジュール


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

Python 3.14 は Python プログラミング言語の安定版リリースで、言語、実装
、標準ライブラリにさまざまな変更が加わっています。 主な変更には、テン
プレート文字列リテラル、アノテーションの遅延評価、標準ライブラリでの
サブインタープリタ のサポートがあります。

ライブラリの変更内容には asyncio のイントロスペクション機能 の重要な改
善、 新モジュール "compression.zstd" による Zstandard のサポート 、
REPL における構文ハイライトが、通常の非推奨化や削除、また利便性と正確
性の向上に加えて含まれます。

本記事は、全ての新機能の仕様を網羅的に説明する代わりに、分かりやすく概
要を説明するものとなっています。詳細については ライブラリリファレンス
や 言語リファレンス などを参照してください。各変更点の実装や設計の理由
を網羅的に理解したい方は、該当の PEP を参照してください。ただし、 PEP
は機能が実装されたあとは Python の最新バージョンに合わせて更新されない
ことが多いので注意してください。Python を以前のバージョンからアップグ
レードする際の注意点は Porting to Python 3.14 を参照してください。

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

インタプリタの改善:

* **PEP 649** と **PEP 749**: アノテーションの遅延評価

* **PEP 734**: 標準ライブラリにおける複数インタープリタ

* **PEP 750**: テンプレート文字列

* **PEP 758**: 括弧を省略した except と except* の式を許可

* **PEP 765**: finally ブロック内の制御フロー

* **PEP 768**: CPython における安全な外部デバッガインターフェース

* 新型のインタープリタ

* フリースレッドモードの改善

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

* 漸進的なガベージコレクション

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

* **PEP 784**: 標準ライブラリでの Zstandard のサポート

* asyncio のイントロスペクション機能

* 並行処理で安全に使える警告の制御

* デフォルトの対話シェルでのシンタックスハイライト と、いくつかの標準
  ライブラリの CLI でのカラー出力

C API の改善:

* **PEP 741**: Python 設定 C API

プラットフォームのサポート:

* **PEP 776**: Emscripten が **tier 3** として 公式にサポートされるプ
  ラットフォーム となりました。

リリースの変更:

* **PEP 779**: フリースレッドな Python は公式にサポートされました

* **PEP 761**: 公式のリリースについて、PGP 署名は廃止されました

* Windows と macOS のバイナリリリースは、実験的なジャスト・イン・タイ
  ムコンパイラをサポートします

* Android のためのバイナリリリースが提供されるようになりました


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


**PEP 649** と **PEP 749**: アノテーションの遅延評価
----------------------------------------------------

関数、クラス、モジュールの *アノテーション* が先行評価されなくなりまし
た。代わりに、アノテーションは専用の *annotate 関数* に格納され、必要
になったときのみ評価されるようになります ("from __future__ import
annotations" を使用している場合を除く)。

この変更により、Pythonのアノテーションのパフォーマンスと使いやすさがほ
とんどの状況で向上します。アノテーションを定義することで発生する実行コ
ストはほとんどなくなりましたが、実行中にアノテーションを値として取得す
ることは依然として可能です。また、アノテーションに前方参照が含まれてい
る場合に、クォーテーションで囲って文字列にする必要はなくなりました。

新しく追加された "annotationlib" モジュールを使うことで、遅延評価とな
ったアノテーションを取得することができます。アノテーションの評価フォー
マットとして、 "VALUE" (以前のPythonバージョンと同様に、アノテーション
の実行時の値を評価する)  "FORWARDREF" (未定義の名前を特別なマーカーに
置き換える)  "STRING" (アノテーションを文字列として返す) があります。

各フォーマットの挙動は以下の例の通りです：

   >>> from annotationlib import get_annotations, Format
   >>> def func(arg: Undefined):
   ...     pass
   >>> get_annotations(func, format=Format.VALUE)
   Traceback (most recent call last):
     ...
   NameError: name 'Undefined' is not defined
   >>> get_annotations(func, format=Format.FORWARDREF)
   {'arg': ForwardRef('Undefined', owner=<function func at 0x...>)}
   >>> get_annotations(func, format=Format.STRING)
   {'arg': 'Undefined'}

この変更により既存コードでどのような修正が必要になる可能性があるかを
移植 セクションで説明しています。ただし、ほとんどのコードでは修正は不
要です。

(Jelle Zijlstra の貢献による **PEP 749** と gh-119180 、 Larry
Hastings の貢献による **PEP 649** )

参考:

  **PEP 649**
     デスクリプタを使ったアノテーション遅延評価

  **PEP 749**
     PEP 649 の実装


**PEP 734**: 複数インタープリタ機能が標準ライブラリに追加
---------------------------------------------------------

CPython ランタイムでは、同じプロセスの中で複数の Python 環境を実行する
機能が20年以上存在します。この各環境は「インタープリタ」といいます。し
かしこの機能は C-API 経由でしか利用できませんでした。

Python 3.14 で "concurrent.interpreters" モジュールが追加されたことに
より、この制限がなくなりました。

複数のインタープリタを使うことに大きな利点がある理由として、少なくとも
次の二つが挙げられます。

* (Python としては新しい) 使いやすい並行実行モデル

* マルチコアを活用した真の並列実行

並行実行は、原理的には実行効率が上がったり設計を単純化できる用途がある
一方で、非常に単純な並行実行でない限り、人間にとって実装や保守が難しい
ことが多いです。特に、OSレベルのスレッドを直接使用する場合は (例えば
"threading")、メモリがすべてのスレッド間で共有されるため、複雑になりま
す。

互いに独立した複数インタープリタを使用することで、 Communicating
Sequential Processes (CSP) やアクターモデルといった、他言語 (Smalltalk
、Erlang、Haskell、Go など) で成功している並行実行モデルを取り入れるこ
とができます。複数インタープリタは、ユーザーが明示的にメモリ共有をする
スレッドとみなすことができます。

マルチコアの並列実行については、Python 3.12 で、インタープリタは並列実
行できるレベルにお互いに隔離されるようになりました (参照： **PEP
684**) 。これにより、 *GIL* の制限がなくなり、様々な CPU バウンドな用
途に Python を用いることができるようになります。

複数インタープリタは、デフォルトでメモリ共有がされない点や、隔離された
論理的な「プロセス」が並列に動作するという点で、 "multiprocessing" と
類似しています。しかし、複数インタープリタを使うことで、システムのリソ
ースを節約でき、処理効率もあがります (同じプロセスに存在するため) 。ス
レッドの処理効率とプロセス的な隔離を両立している、と考えられます。

複数インタープリタの機能は何十年も存在していましたが、認知度が低く、標
準ライブラリモジュールがないことから、あまり使用されていませんでした。
そのため、いくつか大きな制限事項がありますが、メイン機能になったことで
今後大きく改善していくと思われます。

現状の制限事項：

* インタープリタの起動処理がまだ最適化されていない

* インタープリタのメモリ使用量が必要以上に大きい (インタープリタ間で内
  部リソースをできるだけ共有するよう改善中)

* インタープリタ間でオブジェクトなどのデータを真の意味で共有する方法が
  まだ少ない ("memoryview" 以外)

* PyPI 上のサードパーティ拡張モジュールの多くが複数インタープリタに対
  応していない (標準ライブラリの拡張モジュールはすべて対応)

* Python 利用者はまだ複数インタープリタを使ったアプリケーション開発に
  慣れていない人が多い

今後 CPython がどう改善していくか、インタープリタがどう使われるか、
PyPI パッケージでどこまで解決できるようになるかによって、以上の制限事
項の影響度合いは変わります。用途によっては、影響は少ないかもしれません
。ぜひ使ってみてください！

さらに、今後の CPython のバージョンで、オーバーヘッドは少なくなり、
PyPI パッケージとして実装するには向かない補助機能が追加される予定です
。それまでの間、上記の制限事項のほとんどは拡張モジュールを作ることで解
消できるので、今の時点で PyPI パッケージによって穴埋めすることもできま
す。これは 3.14 から 3.12 (インタープリタが隔離が完全になり、 *GIL* の
共有がなくなったバージョン) まで可能です。同様に、インタープリタをさら
に抽象化するライブラリも PyPI に現れると予想されます。

拡張モジュールの対応については、一部の PyPI プロジェクトや、Cython、
pybind11、nanobind、PyO3などのツールの対応作業が進行中です。どうすれば
拡張モジュールを隔離できるかについては、 拡張モジュールを分離する を参
照してください。隔離のために必要な作業は、 フリースレッド の対応に必要
な作業とかなり重複するため、すでにコミュニティで進められているフリース
レッド対応作業により、複数インタープリタの対応も早まると思われます。

他の 3.14 追加要素: concurrent.futures.InterpreterPoolExecutor 。

(Eric Snow の貢献による gh-134939 )

参考: **PEP 734**


**PEP 750**: テンプレート文字列リテラル
---------------------------------------

テンプレート文字列とは、カスタムの文字列処理を行うための新しい仕組みで
す。f-string と構文が類似していますが、f-string が単に "str" を返すの
に対し、テンプレート文字列は、文字列の固定の部分と補間された部分を表す
オブジェクトを返します。

t-stringを書くには、プレフィックスとして "'f'" の代わりに "'t'" を使用
します:

   >>> variety = 'Stilton'
   >>> template = t'Try some {variety} cheese!'
   >>> type(template)
   <class 'string.templatelib.Template'>

"Template" オブジェクトでは、文字列の固定部分と補間部分 (波括弧で囲ま
れた部分) に、結合される *前に* アクセスできます。 "Template" インスタ
ンスを反復すると、各部分を順に取得できます。

   >>> list(template)
   ['Try some ', Interpolation('Stilton', 'variety', None, ''), ' cheese!']

"Template" インスタンスを処理するコードは、簡単に書いたり呼び出したり
できます。 例えば、次の関数は固定部分を小文字に、"Interpolation" イン
スタンスを大文字にして結果を生成します。

   from string.templatelib import Interpolation

   def lower_upper(template):
       """固定の箇所は小文字に、interpolationsは大文字に変換する"""
       parts = []
       for part in template:
           if isinstance(part, Interpolation):
               parts.append(str(part.value).upper())
           else:
               parts.append(part.lower())
       return ''.join(parts)

   name = 'Wenslydale'
   template = t'Mister {name}'
   assert lower_upper(template) == 'mister WENSLYDALE'

"Template" インスタンスは、固定文字列と補間部分を実行時に区別できるの
で、ユーザー入力のサニタイズに役立ちます。 ユーザー入力を HTML 内でエ
スケープする "html()" 関数を書く練習は、読者の皆さんにお任せします。
テンプレートの処理コードを工夫すれば、より柔軟に対応できます。 例えば
、さらに高度な "html()" 関数なら、HTML 属性の "dict" をテンプレート内
で直接受け取れます。

   attributes = {'src': 'limburger.jpg', 'alt': 'lovely cheese'}
   template = t'<img {attributes}>'
   assert html(template) == '<img src="limburger.jpg" alt="lovely cheese" />'

もちろん、テンプレートの処理コードは文字列のような結果を返す必要はあり
ません。 *さらに* 高度な "html()" なら、DOM のような構造を表す独自の型
を返すこともできます。

t-string を使うと、SQL のサニタイズ、安全なシェル操作、ログの改善、Web
開発 (HTML、CSS など) の新しい考え方への対応、軽量な独自の業務用 DSL
の実装などを行うシステムを書けます。

(Jim Baker, Guido van Rossum, Paul Everitt, Koudai Aono, Lysandros
Nikolaou, Dave Peck, Adam Turner, Jelle Zijlstra, Bénédikt Tran, Pablo
Galindo Salgado の貢献による gh-132661 )

参考: **PEP 750**


**PEP 768**: 安全な外部デバッガインターフェース
-----------------------------------------------

Python プロセスを停止したり再起動したりすることなく安全にデバッガやプ
ロファイラを接続できる、オーバーヘッドのないデバッグインターフェースが
Python 3.14 で追加されました。これは Python のデバッグ機能を大きく強化
するものであり、安全でない手法をとる必要がなくなります。

このインターフェースにより、インタープリタの通常の実行パスに変更を加え
ることなく、実行のオーバーヘッドを生じさせることもなく、安全にデバッガ
を接続できるポイントが追加されます。これにより、外部ツールからリアルタ
イムで Python アプリケーションの状態を取得したり操作できるようになりま
す。これは、安定稼働が必要なシステムや本番環境においては非常に重要な機
能です。

利便性のため、このインターフェースは "sys.remote_exec()" 関数として実
装されています。例えば：

   import os, sys
   from tempfile import NamedTemporaryFile

   with NamedTemporaryFile(mode='w', suffix='.py', delete=False) as f:
       script_path = f.name
       f.write(f'import my_debugger; my_debugger.connect({os.getpid()})')

   # Execute in process with PID 1234
   print('Behold! An offering:')
   sys.remote_exec(1234, script_path)

この関数は、対象プロセスの次の安全な実行ポイントで実行する Python コー
ドを送信できます。 ただし、ツールの作者は PEP の説明に従ってプロトコル
を直接実装することもできます。 PEP には、実行中のプロセスに安全に接続
するための内部の仕組みが詳しく説明されています。

このデバッグインターフェースはセキュリティを意識して慎重に設計されてお
り、アクセス制御の仕組みがいくつか備わっています：

* 環境変数 "PYTHON_DISABLE_REMOTE_DEBUG"

* コマンドラインオプション "-X disable-remote-debug"

* ビルド時に本機能を完全に無効化する、configure フラグ "--without-
  remote-debug"

(Pablo Galindo Salgado, Matt Wozniski, Ivona Stojanovic による貢献
gh-131591 )

参考: **PEP 768**.


新しいインタープリタ
--------------------

CPython に新しいインタープリタが追加されました。Python の個々の命令コ
ードを C 言語の長い "case" 文で実装する代わりに、小さな C 関数に分けて
末尾呼び出し (tail call) でお互いを呼び出すようになっています。一部の
新しいコンパイラでビルドすれば、このインタープリタのパフォーマンスは以
前のインタープリタより大きく改善します。簡易的に "pyperformance" 標準
ベンチマークでテストした結果、プラットフォームやアーキテクチャによって
は、相乗平均で 3% から 5% の速度向上がみられました。比較対象は、Clang
19 でビルドした、新しいインタープリタなしの Python 3.14 です。

このインタープリタは現状、Clang 19 以上かつ x86-64 と AArch64 アーキテ
クチャのみ対応しています。ただ、GCC も今後のバージョンで対応になる見込
みです。

この機能は今のところ明示的に有効にする必要があります。 新しいインター
プリタを使う場合は、プロファイルに基づく最適化 (PGO) を有効にすること
を強く推奨します。 パフォーマンスの改善がテスト、検証されているのは、
この構成だけだからです。 詳細は "--with-tail-call-interp" を参照してく
ださい。

注釈:

  これは Python 関数の 末尾呼び出し最適化 と混同しないでください。
  Python 関数の末尾呼び出し最適化は、現在の CPython には実装されていま
  せん。この新しい種類のインタープリタは、CPython インタープリタ内部の
  実装の詳細です。 Python プログラムの外から見える動作はまったく変わり
  ません。 パフォーマンスが向上する可能性はありますが、それ以外は何も
  変わりません。

(Ken Jin が gh-128563 で貢献し、Mark Shannon、Garrett Gu、Haoran Xu、
Josh Haberman が CPython での実装方法についてアイデアを提供しました。)


フリースレッドモードの改善
--------------------------

3.13 で初めて追加された CPython のフリースレッドモード (**PEP 703**)
は、Python 3.14 で大幅に改善されました。 C API の変更を含め、PEP 703
に記載された実装が完成し、インタープリタ内の一時的な回避策は、より恒久
的な解決策に置き換わりました。 特殊化を行う適応型インタープリタ (**PEP
659**) がフリースレッドモードでも有効になり、ほかの多くの最適化ととも
にパフォーマンスを大幅に改善しています。 フリースレッドモードでシング
ルスレッドのコードを実行した場合の性能低下は、プラットフォームと使用す
る C コンパイラによりますが、現在はおよそ 5～10% です。

Python 3.14 から、Windows で CPython のフリースレッドビルド向けに拡張
モジュールをコンパイルする際は、ビルドバックエンドがプリプロセッサ変数
"Py_GIL_DISABLED" を指定する必要があります。 C コンパイラが自動的に判
定しなくなるためです。 実行中のインタープリタについて、コンパイル時に
使われた設定は "sysconfig.get_config_var()" で調べられます。

新しい "-X context_aware_warnings" フラグは、並行処理で安全に使える警
告の制御 を有効にするかどうかを制御します。 デフォルト値は、フリースレ
ッドビルドでは真、GIL が有効なビルドでは偽です。

A new "thread_inherit_context" flag has been added, which if enabled
means that threads created with "threading.Thread" start with a copy
of the "Context()" of the caller of "start()".  Most significantly,
this makes the warning filtering context established by
"catch_warnings" be "inherited" by threads (or asyncio tasks) started
within that context.  It also affects other modules that use context
variables, such as the "decimal" context manager. This flag defaults
to true for the free-threaded build and false for the GIL-enabled
build.

(Sam Gross、Matt Page、Neil Schemenauer、Thomas Wouters、Donghee Na、
Kirill Podoprigora、Ken Jin、Itamar Oren、Brett Simmers、Dino Viehland
、Nathan Goldbaum、Ralf Gommers、Lysandros Nikolaou、Kumar Aditya、
Edgar Margffoy をはじめ、多くの方々が貢献しました。 一部の貢献者は
Meta に所属しており、同社はこのプロジェクトの支援に多大なエンジニアリ
ングリソースを提供し続けています。)


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

* インタープリタは、Python のキーワードの入力間違いを検出すると、役立
  つ候補を提示するようになりました。 Python のキーワードによく似た単語
  が現れると、エラーメッセージで正しいキーワードを提案します。 この機
  能により、プログラマはよくある入力間違いをすばやく見つけて修正できま
  す。 例えば、次のようになります。

     >>> whille True:
     ...     pass
     Traceback (most recent call last):
       File "<stdin>", line 1
         whille True:
         ^^^^^^
     SyntaxError: invalid syntax. Did you mean 'while'?

  この機能はよくある間違いを中心に対応しているため、綴りの間違い方によ
  っては通常の構文エラーになる場合もあります。 (Pablo Galindo が
  gh-132449 で貢献しました。)

* "else" ブロックの後に "elif" 文を置くと、専用のエラーメッセージが表
  示されるようになりました。 (Steele Farnsworth が gh-129902 で貢献し
  ました。)

     >>> if who == "me":
     ...     print("It's me!")
     ... else:
     ...     print("It's not me!")
     ... elif who is None:
     ...     print("Who is it?")
     File "<stdin>", line 5
       elif who is None:
       ^^^^
     SyntaxError: 'elif' block follows an 'else' block

* 条件式 (Conditional Expressions) の "else" の後に文を書いた場合や、
  "if" の前に "pass"、"break"、"continue" のいずれかを書いた場合、エラ
  ーメッセージは "expression" が必要な位置を強調表示するようになりまし
  た。 (Sergey Miryanov が gh-129515 で貢献しました。)

     >>> x = 1 if True else pass
     Traceback (most recent call last):
       File "<string>", line 1
         x = 1 if True else pass
                            ^^^^
     SyntaxError: expected expression after 'else', but statement is given

     >>> x = continue if True else break
     Traceback (most recent call last):
       File "<string>", line 1
         x = continue if True else break
             ^^^^^^^^
     SyntaxError: expected expression before 'if', but statement is given

* 文字列が誤った位置で閉じられていることを検出すると、エラーメッセージ
  は、その部分も文字列の一部として書いたのではないかと指摘するようにな
  りました。 (Pablo Galindo が gh-88535 で貢献しました。)

     >>> "The interesting object "The important object" is very important"
     Traceback (most recent call last):
     SyntaxError: invalid syntax. Is this intended to be part of the string?

* 文字列に併用できない接頭辞を付けた場合、エラーにその接頭辞が表示され
  るようになりました。 (Nikita Sobolev が gh-133197 で貢献しました。)

     >>> ub'abc'
       File "<python-input-0>", line 1
         ub'abc'
         ^^
     SyntaxError: 'u' and 'b' prefixes are incompatible

* 次の構文で "as" に不適切なターゲットを指定した場合のエラーメッセージ
  を改善しました。

  * インポート: "import ... as ..."

  * from インポート: "from ... import ... as ..."

  * 例外ハンドラ: "except ... as ..."

  * パターンマッチの case: "case ... as ..."

  (Nikita Sobolev が gh-123539、gh-123562、gh-123440 で貢献しました。)

* ハッシュ可能でない型のインスタンスを "dict" のキーや "set" の要素と
  して追加しようとした場合のエラーメッセージを改善しました。 (CF Bolz-
  Tereick と Victor Stinner が gh-132828 で貢献しました。)

     >>> s = set()
     >>> s.add({'pages': 12, 'grade': 'A'})
     Traceback (most recent call last):
       File "<python-input-1>", line 1, in <module>
         s.add({'pages': 12, 'grade': 'A'})
         ~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     TypeError: cannot use 'dict' as a set element (unhashable type: 'dict')
     >>> d = {}
     >>> l = [1, 2, 3]
     >>> d[l] = 12
     Traceback (most recent call last):
       File "<python-input-4>", line 1, in <module>
         d[l] = 12
         ~^^^
     TypeError: cannot use 'list' as a dict key (unhashable type: 'list')

* 同期コンテキストマネージャプロトコルをサポートするオブジェクトに対し
  、"with" の代わりに "async with" でコンテキストに入ろうとした場合の
  エラーメッセージを改善しました。 非同期コンテキストマネージャプロト
  コルで逆の使い方をした場合も同様です。 (Bénédikt Tran が gh-128398
  で貢献しました。)


**PEP 784**: 標準ライブラリでの Zstandard のサポート
----------------------------------------------------

新しい "compression" パッケージには、"compression.lzma"、
"compression.bz2"、"compression.gzip"、"compression.zlib" モジュールが
含まれます。 これらは、それぞれ "lzma"、"bz2"、"gzip"、"zlib" モジュー
ルを再エクスポートします。 Python 3.14 から、これらの圧縮モジュールを
インポートする際は、"compression" 配下の新しい名前を使うことを推奨しま
す。 ただし、既存のモジュール名は非推奨にはなっていません。 既存の圧縮
モジュールが非推奨になったり削除されたりするのは、早くても 3.14 のリリ
ースから 5 年後です。

新しい "compression.zstd" モジュールは、Meta の zstd ライブラリ へのバ
インディングを通して、Zstandard 形式の圧縮・展開 API を提供します。
Zstandard は広く採用されている、高効率で高速な圧縮形式です。
"compression.zstd" の API に加え、"tarfile"、"zipfile"、"shutil" モジ
ュールでも、Zstandard で圧縮したアーカイブの読み書きをサポートするよう
になりました。

新しいモジュールでデータを圧縮する例を示します。

   from compression import zstd
   import math

   data = str(math.pi).encode() * 20
   compressed = zstd.compress(data)
   ratio = len(compressed) / len(data)
   print(f"Achieved compression ratio of {ratio}")

このように、API は "lzma" や "bz2" モジュールの API に似ています。

(Emma Harper Smith、Adam Turner、Gregory P. Smith、Tomas Roun、Victor
Stinner、Rogdham が gh-132983 で貢献しました。)

参考: **PEP 784**。


asyncio のイントロスペクション機能
----------------------------------

非同期タスクを使う実行中の Python プロセスを調べる、新しいコマンドライ
ンインターフェースを追加しました。 "python -m asyncio ps PID" または
"python -m asyncio pstree PID" で利用できます。

"ps" サブコマンドは指定されたプロセス ID (PID) のプロセスを調べ、現在
実行中の asyncio タスクの情報を表示します。 タスクの表として、すべての
タスク、名前、コルーチンのスタック、それらを待機しているタスクを一覧表
示します。

"pstree" サブコマンドは同じ情報を取得しますが、コルーチンの関係を階層
的に示す非同期呼び出しツリーとして表示します。 このコマンドは、長時間
動作する非同期プログラムや、進行が止まった非同期プログラムのデバッグに
特に役立ちます。 プログラムがどこでブロックしているか、どのタスクが未
完了か、コルーチンがどうつながっているかをすばやく把握できます。

例えば、次のコードを考えます。

   import asyncio

   async def play_track(track):
       await asyncio.sleep(5)
       print(f'🎵 Finished: {track}')

   async def play_album(name, tracks):
       async with asyncio.TaskGroup() as tg:
           for track in tracks:
               tg.create_task(play_track(track), name=track)

   async def main():
       async with asyncio.TaskGroup() as tg:
           tg.create_task(
             play_album('Sundowning', ['TNDNBTG', 'Levitate']),
             name='Sundowning')
           tg.create_task(
             play_album('TMBTE', ['DYWTYLM', 'Aqua Regia']),
             name='TMBTE')

   if __name__ == '__main__':
       asyncio.run(main())

実行中のプロセスに対して新しいツールを実行すると、次のような表が得られ
ます。

   python -m asyncio ps 12345

   tid        task id              task name            coroutine stack                                    awaiter chain                                      awaiter name    awaiter id
   ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
   1935500    0x7fc930c18050       Task-1               TaskGroup._aexit -> TaskGroup.__aexit__ -> main                                                                       0x0
   1935500    0x7fc930c18230       Sundowning           TaskGroup._aexit -> TaskGroup.__aexit__ -> album   TaskGroup._aexit -> TaskGroup.__aexit__ -> main    Task-1          0x7fc930c18050
   1935500    0x7fc93173fa50       TMBTE                TaskGroup._aexit -> TaskGroup.__aexit__ -> album   TaskGroup._aexit -> TaskGroup.__aexit__ -> main    Task-1          0x7fc930c18050
   1935500    0x7fc93173fdf0       TNDNBTG              sleep -> play                                      TaskGroup._aexit -> TaskGroup.__aexit__ -> album   Sundowning      0x7fc930c18230
   1935500    0x7fc930d32510       Levitate             sleep -> play                                      TaskGroup._aexit -> TaskGroup.__aexit__ -> album   Sundowning      0x7fc930c18230
   1935500    0x7fc930d32890       DYWTYLM              sleep -> play                                      TaskGroup._aexit -> TaskGroup.__aexit__ -> album   TMBTE           0x7fc93173fa50
   1935500    0x7fc93161ec30       Aqua Regia           sleep -> play                                      TaskGroup._aexit -> TaskGroup.__aexit__ -> album   TMBTE           0x7fc93173fa50

または、次のようなツリーが得られます。

   python -m asyncio pstree 12345

   └── (T) Task-1
       └──  main example.py:13
           └──  TaskGroup.__aexit__ Lib/asyncio/taskgroups.py:72
               └──  TaskGroup._aexit Lib/asyncio/taskgroups.py:121
                   ├── (T) Sundowning
                   │   └──  album example.py:8
                   │       └──  TaskGroup.__aexit__ Lib/asyncio/taskgroups.py:72
                   │           └──  TaskGroup._aexit Lib/asyncio/taskgroups.py:121
                   │               ├── (T) TNDNBTG
                   │               │   └──  play example.py:4
                   │               │       └──  sleep Lib/asyncio/tasks.py:702
                   │               └── (T) Levitate
                   │                   └──  play example.py:4
                   │                       └──  sleep Lib/asyncio/tasks.py:702
                   └── (T) TMBTE
                       └──  album example.py:8
                           └──  TaskGroup.__aexit__ Lib/asyncio/taskgroups.py:72
                               └──  TaskGroup._aexit Lib/asyncio/taskgroups.py:121
                                   ├── (T) DYWTYLM
                                   │   └──  play example.py:4
                                   │       └──  sleep Lib/asyncio/tasks.py:702
                                   └── (T) Aqua Regia
                                       └──  play example.py:4
                                           └──  sleep Lib/asyncio/tasks.py:702

非同期の待機関係のグラフに循環が見つかった場合 (プログラムの問題を示し
ている可能性があります)、ツールはエラーを出し、ツリーの構築を妨げる循
環経路を一覧表示します。

   python -m asyncio pstree 12345

   ERROR: await-graph contains cycles - cannot print a tree!

   cycle: Task-2 → Task-3 → Task-2

(Pablo Galindo、Łukasz Langa、Yury Selivanov、Marta Gomez Macias が
gh-91048 で貢献しました。)


並行処理で安全に使える警告の制御
--------------------------------

"warnings.catch_warnings" コンテキストマネージャは、警告フィルタにコン
テキスト変数を使うよう選択できるようになりました。 "-X" コマンドライン
オプションまたは環境変数で "context_aware_warnings" フラグを設定すると
有効になります。 これにより、複数のスレッドや非同期タスクで
"catch_warnings" を使う場合も、予測可能な形で警告を制御できます。 フラ
グのデフォルト値は、フリースレッドビルドでは真、GIL が有効なビルドでは
偽です。

(Neil Schemenauer と Kumar Aditya が gh-130010 で貢献しました。)


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

* Windows で、すべての Windows コードページを 'cpXXX' コーデックとして
  サポートするようになりました。 (Serhiy Storchaka が gh-123803 で貢献
  しました。)

* C99 以降の C 規格で定められている、実数と複素数を組み合わせる混合演
  算の規則を実装しました。 (Sergey B Kirpichev が gh-69639 で貢献しま
  した。)

* 最適化や "-O" コマンドラインオプションに関係なく、より多くの構文エラ
  ーを検出するようになりました。 これには、"__debug__" への書き込み、
  "await" の誤用、非同期関数の外での非同期内包表記が含まれます。 例え
  ば、"python -O -c 'assert (__debug__ := 1)'" や "python -O -c
  'assert await 1'" は "SyntaxError" になります。 (Irit Katriel と
  Jelle Zijlstra が gh-122245 と gh-121637 で貢献しました。)

* C だけで実装された型のサブクラスを作成する際、サブクラスで明示的にオ
  ーバーライドしない限り、クラスの作成時に新しい型の C スロットがラッ
  パーに置き換わることはなくなりました。 (Tomasz Pytel が gh-132284 で
  貢献しました。)


組み込み機能
------------

* "bytes.fromhex()" と "bytearray.fromhex()" メソッドは、ASCII の
  "bytes" と *バイト列類似オブジェクト* を受け付けるようになりました。
  (Daniel Pope が gh-129349 で貢献しました。)

* Add class methods "float.from_number()" and "complex.from_number()"
  to convert a number to "float" or "complex" type correspondingly.
  They raise a "TypeError" if the argument is not a real number.
  (Contributed by Serhiy Storchaka in gh-84978.)

* ("format()" や f-strings を使う) 新しい形式の文字列書式化で、浮動小
  数点数の表示型について、小数部分でもアンダースコアとカンマによる 3
  桁区切りをサポートするようになりました。 (Sergey B Kirpichev が
  gh-87790 で貢献しました。)

* "int()" 関数は "__trunc__()" に処理を委譲しなくなりました。 "int()"
  への変換をサポートするクラスは、"__int__()" または "__index__()" を
  実装する必要があります。 (Mark Dickinson が gh-119743 で貢献しました
  。)

* "map()" 関数に、"zip()" と同様の省略可能なキーワード専用フラグ
  "strict" が追加されました。 すべてのイテラブルの長さが等しいことを確
  認できます。 (Wannes Boeykens が gh-119793 で貢献しました。)

* "memoryview" 型は添字指定をサポートし、*ジェネリック型* になりました
  。 (Brian Schubert が gh-126012 で貢献しました。)

* "NotImplemented" を真偽値の文脈で使うと、"TypeError" が発生するよう
  になりました。 この使い方は Python 3.9 から "DeprecationWarning" の
  対象でした。 (Jelle Zijlstra が gh-118767 で貢献しました。)

* 引数を三つ渡した "pow()" でも、必要に応じて "__rpow__()" の呼び出し
  を試みるようになりました。 以前は、引数二つの "pow()" と二項の累乗演
  算子でしか呼び出されませんでした。 (Serhiy Storchaka が gh-130104 で
  貢献しました。)

* "super" オブジェクトが "コピー" と "pickle 化" に対応しました。
  (Serhiy Storchaka が gh-125767 で貢献しました。)


コマンドラインと環境
--------------------

* インポート時間を表示するフラグは、新しい "-X importtime=2" により、
  すでに読み込まれた (キャッシュ済みの) モジュールも追跡できるようにな
  りました。 そのようなモジュールをインポートすると、"self" と
  "cumulative" の時間の代わりに文字列 "cached" を表示します。

  "-X importtime" の "2" より大きい値は、将来の使用のために予約されま
  した。

  (Noah Kim と Adam Turner が gh-118655 で貢献しました。)

* コマンドラインオプション "-c" は、コード引数の共通のインデントを実行
  前に自動的に取り除くようになりました。 (Jon Crall と Steven Sun が
  gh-103998 で貢献しました。)

* "-J" は Jython 用に予約されたフラグではなくなり、特別な意味を持たな
  くなりました。 (Adam Turner が gh-133336 で貢献しました。)


PEP 758: "except" と "except*" の式の括弧を省略可能に
-----------------------------------------------------

"except" と "except*" の式で、複数の例外型を指定し、"as" 節を使わない
場合は、括弧を省略できるようになりました。 例えば、次のように書けます
。

   try:
       connect_to_server()
   except TimeoutError, ConnectionRefusedError:
       print('The network has ceased to be!')

(Pablo Galindo と Brett Cannon が **PEP 758** と gh-131831 で貢献しま
した。)


PEP 765: "finally" ブロック内の制御フロー
-----------------------------------------

"return"、"break"、"continue" 文によって "finally" ブロックを抜ける場
合、コンパイラは "SyntaxWarning" を出すようになりました。 この変更は
**PEP 765** で定められています。

この変更が不便な場合 (コードの lint を行っているため警告が重複する場合
など) は、警告フィルタ に "ignore::SyntaxWarning" を追加すると、構文の
警告をすべて無効にできます。 ほかの警告をエラーに変えるフィルタと組み
合わせて指定することもできます。 例えば、CLI オプションに "-Werror
-Wignore::SyntaxWarning" を渡すか、
"PYTHONWARNINGS=error,ignore::SyntaxWarning" を設定します。

実行時に "warnings" モジュールでこのようなフィルタを適用しても、警告が
抑制されるのはフィルタ変更 *後に* コンパイルされるコードだけです。 例
えばモジュールのインポート時など、フィルタ変更前にコンパイルされたコー
ドでは、構文の警告は引き続き出ます。

(Irit Katriel が gh-130080 で貢献しました。)


ガベージコレクション
--------------------

**Python 3.14.5 以降:**

ガベージコレクタ (GC) は Python 3.14.5 で変更されました。

Python 3.14.0～3.14.4 には、新しいインクリメンタル GC が搭載されていま
した。 しかし、本番環境でメモリの圧迫が深刻になるという 報告 が複数寄
せられたため、3.13 の世代別 GC に戻されました。 Python 3.14.5 以降で使
われるのは、この GC です。

**以前の Python 3.14.0～3.14.4:**

循環ガベージコレクタがインクリメンタルになりました。 これにより、大き
なヒープでの最大停止時間は 10 分の 1 以下になります。

世代は若い世代と古い世代の二つだけになりました。 "gc.collect()" を直接
呼び出さない場合、GC の実行頻度は少し低くなります。 実行時には、一つ以
上の世代をまとめて回収する代わりに、若い世代と古い世代の一部分を回収し
ます。

"gc.collect()" の動作は少し変わります。

* "gc.collect(1)": 第 1 世代の回収ではなく、インクリメンタルなガベージ
  コレクションを 1 回進めます。

* "gc.collect()" のほかの呼び出しに変更はありません。

(Mark Shannon が gh-108362 で貢献しました。)


デフォルトの対話シェル
----------------------

* デフォルトの *対話* シェルが Python の構文を強調表示するようになりま
  した。 "PYTHON_BASIC_REPL" など、色を無効にする環境変数が設定されて
  いない限り、デフォルトで有効です。 詳細は 色の制御 を参照してくださ
  い。

  構文強調表示のデフォルトの配色は、見やすいコントラストを目指し、互換
  性を最大限に保つため 4 ビット VGA 標準の ANSI カラーコードだけを使い
  ます。 実験的な API "_colorize.set_theme()" で配色をカスタマイズでき
  ます。 対話的に呼び出すことも、"PYTHONSTARTUP" スクリプト内で呼び出
  すこともできます。 この関数の安定性は保証されず、変更や削除が行われ
  る可能性があることに注意してください。

  (Łukasz Langa が gh-131507 で貢献しました。)

* デフォルトの *対話* シェルがインポートの自動補完をサポートするように
  なりました。 "import co" と入力して "<Tab>" を押すと、"co" で始まる
  モジュールが候補に表示されます。 同様に、"from concurrent import i"
  と入力すると、"i" で始まる "concurrent" のサブモジュールが候補に表示
  されます。 現時点ではモジュールの属性の自動補完には対応していません
  。 (Tomas Roun が gh-69605 で貢献しました。)


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

* "annotationlib": *アノテーション* を調べるためのモジュールです。 詳
  細は PEP 749 を参照してください。 (Jelle Zijlstra が gh-119180 で貢
  献しました。)

* "compression" ("compression.zstd" を含む): Zstandard 圧縮形式をサポ
  ートする新しいモジュールなど、圧縮関連のモジュールをまとめたパッケー
  ジです。 詳細は PEP 784 を参照してください。 (Emma Harper Smith、
  Adam Turner、Gregory P. Smith、Tomas Roun、Victor Stinner、Rogdham
  が gh-132983 で貢献しました。)

* "concurrent.interpreters": 標準ライブラリで複数のインタープリタをサ
  ポートします。 詳細は PEP 734 を参照してください。 (Eric Snow が
  gh-134939 で貢献しました。)

* "string.templatelib": テンプレート文字列リテラル (t-string) をサポー
  トします。 詳細は PEP 750 を参照してください。 (Jim Baker、Guido van
  Rossum、Paul Everitt、Koudai Aono、Lysandros Nikolaou、Dave Peck、
  Adam Turner、Jelle Zijlstra、Bénédikt Tran、Pablo Galindo Salgado が
  gh-132661 で貢献しました。)


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


argparse
--------

* "argparse.ArgumentParser" の プログラム名 のデフォルト値は、Python
  インタープリタが "__main__" モジュールのコードをどのように探すよう指
  定されたかを反映するようになりました。 (Serhiy Storchaka と Alyssa
  Coghlan が gh-66436 で貢献しました。)

* "argparse.ArgumentParser" に、省略可能な "suggest_on_error" パラメー
  タを導入しました。 ユーザーが入力を間違えた場合に、引数の選択肢やサ
  ブパーサー名の候補を提示できます。 (Savannah Ostrowski が gh-124456
  で貢献しました。)

* ヘルプテキストの色付けが有効になりました。 "argparse.ArgumentParser"
  の省略可能な "color" パラメータで無効にできます。 環境変数 でも制御
  できます。 (Hugo van Kemenade が gh-130645 で貢献しました。)


ast
---

* 二つの AST を比較する "compare()" 関数を追加しました。 (Batuhan
  Taskaya and Jeremy Hylton が gh-60191 で貢献しました。)

* AST ノードで "copy.replace()" をサポートするようになりました。
  (Bénédikt Tran が gh-121141 で貢献しました。)

* 最適化レベル 2 では、最適化された AST からドキュメント文字列を削除す
  るようになりました。 (Irit Katriel が gh-123958 で貢献しました。)

* AST ノードの "repr()" 結果に、より多くの情報を含めるようになりました
  。 (Tomas Roun が gh-116022 で貢献しました。)

* AST を入力として呼び出した場合、"parse()" 関数はルートノードの型が適
  切かどうかを常に検証するようになりました。 (Irit Katriel が
  gh-130139 で貢献しました。)

* コマンドラインインターフェースに、"--feature-version"、"--optimize"
  、"--show-empty" オプションを追加しました。 (Semyon Moroz が
  gh-133367 で貢献しました。)


asyncio
-------

* "create_task()" という名前の関数とメソッドが、任意のキーワード引数を
  受け取るようになりました。 すべてのキーワード引数は "Task" コンスト
  ラクタまたは独自のタスクファクトリに渡されます (詳細は
  "set_task_factory()" を参照)。 "name" と "context" キーワード引数は
  、特別扱いされなくなりました。 名前はファクトリの "name" キーワード
  引数で設定する必要があり、"context" には "None" を指定できます。

  この変更は、"asyncio.create_task()"、"asyncio.loop.create_task()"、
  "asyncio.TaskGroup.create_task()" に影響します。

  (Thomas Grainger が gh-128307 で貢献しました。)

* プログラムの呼び出しグラフを調べたり表示したりする二つのユーティリテ
  ィ関数、"capture_call_graph()" と "print_call_graph()" が追加されま
  した。 詳細は asyncio のイントロスペクション機能 を参照してください
  。 (Yury Selivanov, Pablo Galindo Salgado, and Łukasz Langa が
  gh-91048 で貢献しました。)


calendar
--------

* "calendar" の コマンドライン のテキスト出力で、デフォルトでは今日の
  日付を色付きで強調表示するようになりました。 これは 環境変数 で制御
  できます。 (Hugo van Kemenade が gh-128317 で貢献しました。)


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

* 新しい executor クラス "InterpreterPoolExecutor" を追加しました。 同
  じプロセス内の複数の Python インタープリタ (「サブインタープリタ」)
  を Python コードから利用できます。 独立した Python インタープリタの
  プールを使い、呼び出しを非同期に実行します。

  これは、PEP 734 で導入された新しい "interpreters" モジュールとは別の
  ものです。 (Eric Snow が gh-124548 で貢献しました。)

* macOS 以外の Unix プラットフォームでは、"ProcessPoolExecutor" のデフ
  ォルトの 開始方式 が、fork から forkserver に変わりました。 Windows
  と macOS には影響せず、これらでは引き続き spawn がデフォルトの開始方
  式です。

  スレッドとの併用に適さない *fork* 方式が必要な場合は、
  "ProcessPoolExecutor" に multiprocessing コンテキスト "mp_context"
  を渡して、明示的に指定する必要があります。

  *fork* 方式との違い、ミュータブルな共有グローバル変数や、自動的に
  "pickle 化" できない共有オブジェクトを使う既存コードへの影響について
  は、forkserver の制限 を参照してください。

  (Gregory P. Smith が gh-84559 で貢献しました。)

* "ProcessPoolExecutor" に、"terminate_workers()" と "kill_workers()"
  という二つのメソッドを追加しました。 指定したプールで生存しているワ
  ーカープロセスをすべて終了、または強制終了できます。 (Charles
  Machalow が gh-130849 で貢献しました。)

* "Executor.map" に、省略可能な "buffersize" パラメータを追加しました
  。 投入済みで、まだ結果を返していないタスクの数を制限できます。 バッ
  ファがいっぱいの場合、バッファから結果を返すまで "iterables" の反復
  を一時停止します。 (Enzo Bonnal and Josh Rosenberg が gh-74028 で貢
  献しました。)


configparser
------------

* セキュリティ向上のため、"configparser" は自分で読み取れない設定ファ
  イルを書き込まなくなりました。 区切り文字を含むキーや、セクションヘ
  ッダのパターンで始まるキーを "write()" で書き込もうとすると、
  "InvalidWriteError" が発生します。 (Jacob Lincoln が gh-129270 で貢
  献しました。)


contextvars
-----------

* "Token" オブジェクトが *コンテキストマネージャ* プロトコルをサポート
  するようになりました。 (Andrew Svetlov が gh-129889 で貢献しました。
  )


ctypes
------

* "Structure" と "Union" オブジェクトの ビットフィールド のレイアウト
  が、プラットフォームのデフォルト (GCC/Clang または MSVC) により近い
  ものになりました。 特に、フィールドが重なり合わなくなりました。
  (Matthias Görgens が gh-97702 で貢献しました。)

* "Structure._layout_" クラス属性を設定し、デフォルト以外の ABI にレイ
  アウトを合わせやすくなりました。 (Petr Viktorin が gh-97702 で貢献し
  ました。)

* "Structure" と "Union" のフィールドデスクリプタのクラスを、"CField"
  として利用できるようになりました。 また、デバッグやイントロスペクシ
  ョンに役立つ新しい属性が追加されました。 (Petr Viktorin が gh-128715
  で貢献しました。)

* Windows の "COMError" 例外が公開されました。 (Jun Komoda が
  gh-126686 で貢献しました。)

* Windows の "CopyComPointer()" 関数が公開されました。 (Jun Komoda が
  gh-127275 で貢献しました。)

* 指定されたポインタと長さの領域を参照する "memoryview" オブジェクトを
  作成する "memoryview_at()" 関数を追加しました。 バッファのコピーを行
  わない点を除いて "ctypes.string_at()" と同様に動作します。 サイズが
  動的に決まるバッファを受け取るコールバック関数を Python だけで実装す
  る場合などに役立ちます。 (Rian Hunter が gh-112018 で貢献しました。)

* コンパイラと "libffi" ライブラリの両方が C の複素数型をサポートする
  場合に、複素数型 "c_float_complex"、"c_double_complex"、
  "c_longdouble_complex" を利用できるようになりました。 (Sergey B
  Kirpichev が gh-61103 で貢献しました。)

* 現在のプロセスが読み込んだ共有ライブラリを一覧にする
  "ctypes.util.dllist()" を追加しました。 (Brian Ward が gh-119349 で
  貢献しました。)

* "ctypes.POINTER()" の型のキャッシュを、グローバルな内部キャッシュ
  ("_pointer_type_cache") から、対応する "ctypes" の型の
  "_CData.__pointer_type__" 属性に移しました。 これにより、特定の状況
  でキャッシュが際限なく増え続けるのを防ぎます。 (Sergey Miryanov が
  gh-100926 で貢献しました。)

* "py_object" 型は添字指定をサポートし、*ジェネリック型* になりました
  。 (Brian Schubert が gh-132168 で貢献しました。)

* "ctypes" が *フリースレッドビルド* をサポートするようになりました。
  (Kumar Aditya and Peter Bierma が gh-127945 で貢献しました。)


curses
------

* 色ペア "0" を変更できるように "use_default_colors()" 関数を拡張した
  、"assume_default_colors()" 関数を追加しました。 (Serhiy Storchaka
  が gh-133139 で貢献しました。)


datetime
--------

* "datetime.date" と "datetime.time" クラスに "strptime()" メソッドを
  追加しました。 (Wannes Boeykens が gh-41431 で貢献しました。)


decimal
-------

* "Decimal" の代替コンストラクタとして "Decimal.from_number()" を追加
  しました。 (Serhiy Storchaka が gh-121798 で貢献しました。)

* IEEE 754 (2008) の十進数交換形式に対応したコンテキストを作成できるよ
  うに、"IEEEContext()" を公開しました。 (Sergey B Kirpichev が
  gh-53032 で貢献しました。)


difflib
-------

* "HtmlDiff" クラスが生成する、変更箇所を強調表示した比較ページが「ダ
  ークモード」に対応しました。 (Jiahao Li が gh-129939 で貢献しました
  。)


dis
---

* 行番号だけでなく、"命令" のソース上の位置情報をすべて表示できるよう
  になりました。 次のインターフェースに "show_positions" キーワード引
  数として追加されています。

  * "dis.Bytecode"

  * "dis.dis()"

  * "dis.distb()"

  * "dis.disassemble()"

  この機能は "dis --show-positions" からも利用できます。 (Bénédikt
  Tran が gh-123165 で貢献しました。)

* 特殊化されたバイトコードを表示する "dis --specialized" コマンドライ
  ンオプションを追加しました。 (Bénédikt Tran が gh-127413 で貢献しま
  した。)


errno
-----

* エラーコード定数 "EHWPOISON" を追加しました。 (James Roy が
  gh-126585 で貢献しました。)


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

* 対応するシステム で C のスタックトレースを表示できるようになりました
  。 新しい "dump_c_stack()" 関数、または "faulthandler.enable()" の
  "c_stack" 引数で利用できます。 (Peter Bierma が gh-127604 で貢献しま
  した。)


fnmatch
-------

* 指定されたパターンに一致する名前を除外する "filterfalse()" 関数を追
  加しました。 (Bénédikt Tran が gh-74598 で貢献しました。)


fractions
---------

* "as_integer_ratio()" メソッドを持つ任意のオブジェクトから、
  "Fraction" オブジェクトを構築できるようになりました。 (Serhiy
  Storchaka が gh-82017 で貢献しました。)

* "Fraction" の代替コンストラクタとして "Fraction.from_number()" を追
  加しました。 (Serhiy Storchaka が gh-121797 で貢献しました。)


functools
---------

* 番兵値 "Placeholder" を追加しました。 "partial()" または
  "partialmethod()" 関数で、返される partial オブジェクト 内に、後から
  渡す位置引数の場所を確保するために使えます。 (Dominykas Grigonis が
  gh-119127 で貢献しました。)

* "reduce()" の "initial" パラメータをキーワード引数として渡せるように
  なりました。 (Sayandip Dutta が gh-125916 で貢献しました。)


getopt
------

* 引数を省略できるオプションをサポートするようになりました。 (Serhiy
  Storchaka が gh-126374 で貢献しました。)

* 混在するオプションとオプション以外の引数を、元の順序で返せるようにな
  りました。 (Serhiy Storchaka が gh-126390 で貢献しました。)


getpass
-------

* "getpass()" 関数に、キーボード入力に対する表示のフィードバックを追加
  しました。 省略可能なキーワード専用引数 "echo_char" で指定できます。
  文字を入力するたびに代替の文字を表示し、文字を削除すると表示も削除し
  ます。 (Semyon Moroz が gh-77065 で貢献しました。)


graphlib
--------

* ソートを開始していない限り、"TopologicalSorter.prepare()" を複数回呼
  び出せるようになりました。 (Daniel Pope が gh-130914 で貢献しました
  。)


heapq
-----

* "heapq" モジュールは、次の新しい関数により最大ヒープのサポートを強化
  しました。

  * "heapify_max()"

  * "heappush_max()"

  * "heappop_max()"

  * "heapreplace_max()"

  * "heappushpop_max()"


hmac
----

* HACL* プロジェクトの形式検証済みのコードを使って、HMAC (**RFC
  2104**) の組み込み実装を追加しました。 この実装は、OpenSSL の HMAC
  実装が利用できない場合のフォールバックとして使われます。 (Bénédikt
  Tran が gh-99108 で貢献しました。)


http
----

* "http.server" モジュールが生成するディレクトリ一覧とエラーページで、
  ブラウザのデフォルトのダークモードを適用できるようになりました。
  (Yorik Hansen が gh-123430 で貢献しました。)

* "http.server" モジュールが、"http.server.HTTPSServer" クラスによる
  HTTPS での配信をサポートするようになりました。 コマンドラインインタ
  ーフェース ("python -m http.server") からは、次のオプションで利用で
  きます。

  * "--tls-cert <path>": TLS 証明書ファイルへのパス。

  * "--tls-key <path>": 秘密鍵ファイルへのパス (省略可能)。

  * "--tls-password-file <path>": 秘密鍵のパスワードファイルへのパス (
    省略可能)。

  (Semyon Moroz が gh-85162 で貢献しました。)


imaplib
-------

* **RFC 2177** で定義された IMAP4 の "IDLE" コマンドを実装する
  "IMAP4.idle()" を追加しました。 (Forest が gh-55454 で貢献しました。
  )


inspect
-------

* "signature()" に、アノテーションの表現に使う "annotationlib.Format"
  を制御する新しい引数 "annotation_format" を追加しました。 (Jelle
  Zijlstra が gh-101552 で貢献しました。)

* "Signature.format()" に、新しい引数 "unquote_annotations" を追加しま
  した。 真の場合、文字列の *アノテーション* を引用符で囲まずに表示し
  ます。 (Jelle Zijlstra が gh-101552 で貢献しました。)

* オブジェクトが *パッケージ* かどうかを判定する "ispackage()" 関数を
  追加しました。 (Zhikang Yan が gh-125634 で貢献しました。)


io
--

* "read" で非ブロッキングストリームからテキストを読み取る際、すぐにバ
  イト列を返せない場合は "BlockingIOError" が発生することがあるように
  なりました。 (Giovanni Siragusa が gh-109523 で貢献しました。)

* 疑似プロトコル "typing.IO"、"typing.TextIO"、"typing.BinaryIO" に代
  わる、より単純なプロトコルとして "Reader" と "Writer" を追加しました
  。 (Sebastian Rittau が gh-127648 で貢献しました。)


json
----

* JSON のシリアライズエラーに、エラーの発生箇所を特定するための例外の
  注記を追加しました。 (Serhiy Storchaka が gh-122163 で貢献しました。
  )

* "-m" スイッチで "json" モジュールをスクリプトとして実行できるように
  なりました (**python -m json**)。 *ソフト非推奨* となった **python
  -m json.tool** よりも、この方法を推奨します。 JSON コマンドラインイ
  ンターフェース のドキュメントを参照してください。 (Trey Hunner が
  gh-122873 で貢献しました。)

* JSON コマンドラインインターフェース の出力が、デフォルトで色付きで強
  調表示されるようになりました。 これは 環境変数 で制御できます。
  (Tomas Roun が gh-131952 で貢献しました。)


linecache
---------

* "getline()" で凍結されたモジュールのソースコードを取得できるようにな
  りました。 (Tian Gao が gh-131638 で貢献しました。)


logging.handlers
----------------

* "QueueListener" オブジェクトが *コンテキストマネージャ* プロトコルを
  サポートするようになりました。 (Charles Machalow が gh-132106 で貢献
  しました。)

* すでにリスナーが開始されている場合、"QueueListener.start" は
  "RuntimeError" を送出するようになりました。 (Charles Machalow が
  gh-132106 で貢献しました。)


math
----

* このモジュールの定義域エラーについて、より詳しいエラーメッセージを追
  加しました。 (Charlie Zhao and Sergey B Kirpichev が gh-101410 で貢
  献しました。)


mimetypes
---------

* **python -m mimetypes** で起動する、公開の コマンドラインインターフ
  ェース を追加しました。 (Oleg Iarygin and Hugo van Kemenade が
  gh-93096 で貢献しました。)

* RFC や一般的な用法に基づいて、いくつかの MIME タイプを追加しました。

  -[ Microsoft と **RFC 8081** のフォント用 MIME タイプ ]-

  * Embedded OpenType: "application/vnd.ms-fontobject"

  * OpenType Layout (OTF) "font/otf"

  * TrueType: "font/ttf"

  * WOFF 1.0 "font/woff"

  * WOFF 2.0 "font/woff2"

  -[ **RFC 9559** の Matroska 音声・映像データのコンテナ構造用 MIME タ
  イプ ]-

  * 映像を含まない音声: "audio/matroska" (".mka")

  * 映像: "video/matroska" (".mkv")

  * 立体映像: "video/matroska-3d" (".mk3d")

  -[ RFC で定義された画像形式 ]-

  * **RFC 1494**: CCITT Group 3 (".g3")

  * **RFC 3362**: リアルタイムファクシミリ、T.38 (".t38")

  * **RFC 3745**: JPEG 2000 (".jp2")、拡張形式 (".jpx")、複合形式
    (".jpm")

  * **RFC 3950**: Tag Image File Format Fax eXtended, TIFF-FX (".tfx")

  * **RFC 4047**: Flexible Image Transport System (".fits")

  * **RFC 7903**: 拡張メタファイル (".emf") と Windows メタファイル
    (".wmf")

  -[ その他の MIME タイプの追加と変更 ]-

  * **RFC 2361**: ".avi" の型を "video/vnd.avi" に、".wav" の型を
    "audio/vnd.wave" に変更

  * **RFC 4337**: MPEG-4 "audio/mp4" (".m4a") を追加

  * **RFC 5334**: Ogg メディア (".oga"、".ogg"、".ogx") を追加

  * **RFC 6713**: gzip "application/gzip" (".gz") を追加

  * **RFC 9639**: FLAC "audio/flac" (".flac") を追加

  * YAML ファイル (".yaml" と ".yml") 用の **RFC 9512** の MIME タイプ
    "application/yaml"

  * 7z "application/x-7z-compressed" (".7z") を追加

  * 厳密なモードでない場合に、Android Package "application/vnd.android
    .package-archive" (".apk") を追加

  * deb "application/x-debian-package" (".deb") を追加

  * glTF binary "model/gltf-binary" (".glb") を追加

  * glTF JSON/ASCII "model/gltf+json" (".gltf") を追加

  * M4V "video/x-m4v" (".m4v") を追加

  * PHP "application/x-httpd-php" (".php") を追加

  * RAR "application/vnd.rar" (".rar") を追加

  * RPM "application/x-rpm" (".rpm") を追加

  * STL "model/stl" (".stl") を追加

  * Windows Media Video "video/x-ms-wmv" (".wmv") を追加

  * 事実上の標準: WebM "audio/webm" (".weba") を追加

  * ECMA-376: ".docx"、".pptx"、".xlsx" の型を追加

  * OASIS: OpenDocument の ".odg"、".odp"、".ods"、".odt" の型を追加

  * W3C: EPUB "application/epub+zip" (".epub") を追加

  (Sahil Prajapati と Hugo van Kemenade が gh-84852 で、Sasha "Nelie"
  Chernykh と Hugo van Kemenade が gh-132056 で、Hugo van Kemenade が
  gh-89416、gh-85957、gh-129965 で貢献しました。)


multiprocessing
---------------

* macOS 以外の Unix プラットフォームでは、デフォルトの 開始方式 が、
  fork から forkserver に変わりました。 Windows と macOS には影響せず
  、これらでは引き続き spawn がデフォルトの開始方式です。

  スレッドとの併用に適さない *fork* 方式が必要な場合は、
  "get_context()" のコンテキストで明示的に指定するか (推奨)、
  "set_start_method()" でデフォルトを変更する必要があります。

  *fork* 方式との違い、ミュータブルな共有グローバル変数や、自動的に
  "pickle 化" できない共有オブジェクトを使う既存コードへの影響について
  は、forkserver の制限 を参照してください。

  (Gregory P. Smith が gh-84559 で貢献しました。)

* "multiprocessing" の "forkserver" 開始方式は、制御用ソケットで認証を
  行うようになりました。 これにより、forkserver にワーカーの生成やコー
  ドの実行を要求できる他のプロセスを制限する際に、ファイルシステムのア
  クセス権だけに依存しなくなりました。 (Gregory P. Smith が gh-97514
  で貢献しました。)

* *list* と *dict* 型の multiprocessing プロキシオブジェクト に、これ
  まで見落とされていたメソッドを追加しました。

     * "list" のプロキシに "clear()" と "copy()"

     * "dict" のプロキシに "fromkeys()"、"reversed(d)"、"d | {}"、"{}
       | d"、"d |= {'b': 2}"

  (Roy Hyunjin Han が gh-103134 で貢献しました。)

* "SyncManager.set()" を通して、共有の "set" オブジェクトをサポートす
  るようになりました。 "Manager()" で作成したマネージャで "set()" を利
  用できるようになりました。 (Mingyu Park が gh-129949 で貢献しました
  。)

* "multiprocessing.Process" オブジェクトに "interrupt()" を追加しまし
  た。 "SIGINT" を送信して子プロセスを終了させます。 これにより、
  "finally" 節で終了したプロセスのスタックトレースを表示できるようにな
  ります。 (Artem Pulkin が gh-131913 で貢献しました。)


operator
--------

* "is_none()" と "is_not_none()" という一組の関数を追加しました。
  "operator.is_none(obj)" は "obj is None" と、
  "operator.is_not_none(obj)" は "obj is not None" と同じ意味になりま
  す。 (Raymond Hettinger and Nico Mexis が gh-115808 で貢献しました。
  )


os
--

* "reload_environ()" 関数を追加しました。 "os.putenv()"、
  "os.unsetenv()"、または同じプロセス内で Python の外から行った環境の
  変更を、"os.environ" と "os.environb" に反映できます。 (Victor
  Stinner が gh-120057 で貢献しました。)

* "os" モジュールに "SCHED_DEADLINE" と "SCHED_NORMAL" 定数を追加しま
  した。 (James Roy が gh-127688 で貢献しました。)

* ファイル記述子から バッファオブジェクト に読み込む "readinto()" 関数
  を追加しました。 (Cody Maloney が gh-129205 で貢献しました。)


os.path
-------

* "realpath()" の "strict" パラメータが、新しい値 "ALLOW_MISSING" を受
  け付けるようになりました。 この値を使うと、"FileNotFoundError" 以外
  のエラーは再送出されます。 結果のパスは存在しない場合がありますが、
  シンボリックリンクは含まなくなります。 (Petr Viktorin が **CVE
  2025-4517** に対応して貢献しました。)


pathlib
-------

* "pathlib.Path" に、ファイルやディレクトリを再帰的にコピー、移動する
  メソッドを追加しました。

  * "copy()" は、指定先にファイルやディレクトリツリーをコピーします。

  * "copy_into()" は、指定先ディレクトリの *中に* コピーします。

  * "move()" は、指定先にファイルやディレクトリツリーを移動します。

  * "move_into()" は、指定先ディレクトリの *中に* 移動します。

  (Barney Gale が gh-73991 で貢献しました。)

* "info" 属性を追加しました。 新しい "pathlib.types.PathInfo" プロトコ
  ルを実装するオブジェクトを格納します。 このオブジェクトでファイルの
  種類を調べることができ、"stat()" の結果は内部でキャッシュされます。
  "iterdir()" が生成するパスオブジェクトは、親ディレクトリの走査から得
  られたファイルの種類の情報で初期化されます。 (Barney Gale が
  gh-125413 で貢献しました。)


pdb
---

* "pdb" モジュールが、新しい "-p PID" コマンドラインオプションを使って
  、実行中の Python プロセスに外部から接続できるようになりました。

     python -m pdb -p 1234

  指定された PID の Python プロセスに接続し、対話的にデバッグできるよ
  うにします。 ただし、Python インタープリタの仕組み上、接続先プロセス
  がシステムコールや I/O 待ちでブロックしている場合、接続が有効になる
  のは次のバイトコード命令が実行されるか、プロセスがシグナルを受信した
  ときだけです。

  この機能は PEP 768 と新しい "sys.remote_exec()" 関数を使って、対象プ
  ロセスに接続し、PDB コマンドを送信します。

  (Matt Wozniski と Pablo Galindo が gh-131591 で貢献しました。)

* コード内に直接記述したブレークポイント ("breakpoint()" と
  "set_trace()") は、毎回新しいインスタンスを作成する代わりに、最後に
  "set_trace()" を呼び出した "Pdb" インスタンスを再利用するようになり
  ました。 これにより、"display" や "commands" などのインスタンス固有
  のデータが、コード内のブレークポイント間で保持されます。 (Tian Gao
  が gh-121450 で貢献しました。)

* "pdb.Pdb" に新しい引数 "mode" を追加しました。 "pdb" が "inline" モ
  ードの場合、"restart" コマンドを無効にしました。 (Tian Gao が
  gh-123757 で貢献しました。)

* "inline" モードで "pdb" を終了しようとすると、確認プロンプトが表示さ
  れるようになりました。 "y"、"Y"、"<Enter>"、"EOF" で終了を確定すると
  、"bdb.BdbQuit" を送出する代わりに "sys.exit()" を呼び出します。
  (Tian Gao が gh-124704 で貢献しました。)

* "breakpoint()" や "pdb.set_trace()" のようなインラインのブレークポイ
  ントは、"skip" パターンがあっても無視し、必ず呼び出し元のフレームで
  プログラムを停止するようになりました。 (Tian Gao が gh-130493 で貢献
  しました。)

* "pdb" の複数行入力で行頭の "<tab>" を押すと、"\t" 文字を挿入する代わ
  りに、空白 4 個のインデントを挿入するようになりました。 (Tian Gao が
  gh-130471 で貢献しました。)

* "pdb" の複数行入力に自動インデントを導入しました。 前の行のインデン
  トを維持するか、新しいコードブロックを検出した場合は空白 4 個のイン
  デントを挿入します。 (Tian Gao が gh-133350 で貢献しました。)

* 現在の asyncio タスクがある場合にアクセスするための "$_asynctask" を
  追加しました。 (Tian Gao が gh-124367 で貢献しました。)

* asyncio コルーチンのデバッグをサポートする "pdb.set_trace_async()"
  を追加しました。 この関数では "await" 文を使えます。 (Tian Gao が
  gh-132576 で貢献しました。)

* "pdb" に表示されるソースコードが、構文に応じて強調表示されるようにな
  りました。 "pdb.Pdb" に新しく追加した "colorize" 引数に加えて、デフ
  ォルトの *対話* シェルと同じ方法でもこの機能を制御できます。 (Tian
  Gao and Łukasz Langa が gh-133355 で貢献しました。)


pickle
------

* "pickle" モジュールのデフォルトのプロトコルバージョンを 5 にしました
  。 詳細は pickle プロトコル を参照してください。

* pickle のシリアライズエラーに、エラーの発生箇所を特定するための例外
  の注記を追加しました。 (Serhiy Storchaka が gh-122213 で貢献しました
  。)


platform
--------

* "platform" モジュールのキャッシュされた結果を無効にする
  "invalidate_caches()" 関数を追加しました。 (Bénédikt Tran が
  gh-122549 で貢献しました。)


pydoc
-----

* ヘルプ出力内の *アノテーション* は、通常、元のソースにより近い形式で
  表示されるようになりました。 (Jelle Zijlstra が gh-101552 で貢献しま
  した。)


re
--

* "正規表現" で "\Z" の同義として "\z" をサポートするようになりました
  。 他の多くの正規表現エンジンでも、"\z" は曖昧さなく解釈されます。
  一方、"\Z" はエンジンによって動作が微妙に異なります。 (Serhiy
  Storchaka が gh-133306 で貢献しました。)

* "正規表現" の "\B" が空の入力文字列にもマッチするようになり、常に
  "\b" の逆を表すようになりました。 (Serhiy Storchaka が gh-124130 で
  貢献しました。)


socket
------

* Bluetooth ソケットのサポートを改善し、不具合を修正しました。

  * NetBSD と DragonFly BSD での Bluetooth ソケットのサポートを修正し
    ました。 (Serhiy Storchaka が gh-132429 で貢献しました。)

  * FreeBSD での "BTPROTO_HCI" のサポートを修正しました。 (Victor
    Stinner が gh-111178 で貢献しました。)

  * FreeBSD で "BTPROTO_SCO" をサポートするようになりました。 (Serhiy
    Storchaka が gh-85302 で貢献しました。)

  * FreeBSD の "BTPROTO_L2CAP" のアドレスで、"cid" と "bdaddr_type" を
    サポートするようになりました。 (Serhiy Storchaka が gh-132429 で貢
    献しました。)

  * Linux の "BTPROTO_HCI" のアドレスで、"channel" をサポートするよう
    になりました。 (Serhiy Storchaka が gh-70145 で貢献しました。)

  * Linux の "BTPROTO_HCI" のアドレスとして整数を受け付けるようになり
    ました。 (Serhiy Storchaka が gh-132099 で貢献しました。)

  * "BTPROTO_L2CAP" の "getsockname()" で、"cid" を返すようになりまし
    た。 (Serhiy Storchaka が gh-132429 で貢献しました。)

  * 多数の新しい定数を追加しました。 (Serhiy Storchaka が gh-132734 で
    貢献しました。)


ssl
---

* "ssl" モジュールが TLSv1.3 のハンドシェイク後のクライアント認証
  (PHA) をサポートするかどうかを、真偽値 "HAS_PHA" で示すようになりま
  した。 (Will Childs-Klein が gh-128036 で貢献しました。)


struct
------

* "struct" モジュールで、C の float complex 型と double complex 型をサ
  ポートするようになりました (書式文字はそれぞれ "'F'" と "'D'")。
  (Sergey B Kirpichev が gh-121249 で貢献しました。)


symtable
--------

* "Symbol" の次のメソッドを公開しました。

  * "is_comp_cell()"

  * "is_comp_iter()"

  * "is_free_class()"

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


sys
---

* 特殊な構成の Python ビルドにだけ存在する、これまでドキュメント化され
  ていなかった特殊関数 "sys.getobjects()" が、呼び出し元とは別のインタ
  ープリタのオブジェクトを返す場合もあるようになりました。 (Eric Snow
  が gh-125286 で貢献しました。)

* オブジェクトが *不死* かどうかを判定する "sys._is_immortal()" を追加
  しました。 (Peter Bierma が gh-128509 で貢献しました。)

* FreeBSD の "sys.platform" は、メジャーバージョン番号を含まなくなりま
  した。 "'freebsd13'" や "'freebsd14'" ではなく、常に "'freebsd'" に
  なります。 (Michael Osipov が gh-129393 で貢献しました。)

* "sys._clear_type_cache()" が "DeprecationWarning" を出すようになりま
  した。 この関数は Python 3.13 で非推奨になりましたが、実行時の警告は
  出していませんでした。

* 新しい外部デバッガインターフェースを実装する "sys.remote_exec()" を
  追加しました。 詳細は PEP 768 を参照してください。 (Pablo Galindo
  Salgado, Matt Wozniski, and Ivona Stojanovic が gh-131591 で貢献しま
  した。)

* ジャストインタイムコンパイルの状態を調べるためのユーティリティを含む
  、"sys._jit" 名前空間を追加しました。 (Brandt Bucher が gh-133231 で
  貢献しました。)


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

* 二つの新しい監視イベント、"BRANCH_LEFT" と "BRANCH_RIGHT" を追加しま
  した。 これらは "BRANCH" イベントに取って代わり、従来のイベントは非
  推奨になりました。 (Mark Shannon が gh-122548 で貢献しました。)

* ツール識別子に関連付けられたすべてのイベントとコールバック関数の登録
  を解除する "sys.monitoring.clear_tool_id()" を追加しました。
  "sys.monitoring.free_tool_id()" は、イベントとコールバックを登録した
  ままにするのではなく、ツール識別子を解放する前にこの関数を呼び出すよ
  うになりました。 (Tian Gao が gh-116750 で貢献しました。)


sysconfig
---------

* Windows の "get_config_vars()" に "ABIFLAGS" キーを追加しました。
  (Xuehai Pan が gh-131799 で貢献しました。)


tarfile
-------

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

* ディレクトリが削除されたか、別の種類のファイルに置き換えられている場
  合、"extractall()" はそのディレクトリの属性の調整をスキップするよう
  になりました。 (Petr Viktorin が gh-127987 and **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**.)

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


threading
---------

* "threading.Thread.start()" は、OS 上のスレッド名を
  "threading.Thread.name" に設定するようになりました。 (Victor Stinner
  が gh-59705 で貢献しました。)


tkinter
-------

* "tkinter" のウィジェットメソッド "after()" と "after_idle()" がキー
  ワード引数を受け付けるようになりました。 (Zhikang Yan が gh-126899
  で貢献しました。)

* "tkinter.OptionMenu" と "tkinter.ttk.OptionMenu" に名前を指定できる
  ようになりました。 (Zhikang Yan が gh-130482 で貢献しました。)


"turtle"
--------

* "turtle.fill()"、"turtle.poly()"、"turtle.no_animation()" のコンテキ
  ストマネージャを追加しました。 (Marie Roald and Yngve Mardal Moe が
  gh-126350 で貢献しました。)


types
-----

* "types.UnionType" は "typing.Union" の別名になりました。 詳細は 後述
  の説明 を参照してください。 (Jelle Zijlstra が gh-105499 で貢献しま
  した。)


typing
------

* "types.UnionType" と "typing.Union" は、互いに同じ型を表す別名になり
  ました。 そのため、旧式のユニオン ("Union[int, str]" で作成) と新し
  い形式のユニオン ("int | str") は、同じ実行時の型のインスタンスを作
  成します。 これにより二つの構文の動作が統一されますが、実行時に型を
  調べるユーザーに影響し得る、いくつかの動作の違いが生じます。

  * ユニオンを作成するどちらの構文も、"repr()" で同じ文字列を返すよう
    になりました。 例えば、"repr(Union[int, str])" は
    ""typing.Union[int, str]"" ではなく ""int | str"" になります。

  * 旧式の構文で作成したユニオンは、キャッシュされなくなりました。 以
    前は "Union[int, str]" を複数回評価すると同じオブジェクトを返して
    いました ("Union[int, str] is Union[int, str]" は "True" でした)
    が、今は二つの異なるオブジェクトを返します。 ユニオンが等しいかを
    比較するには、"is" ではなく "==" を使ってください。 新しい形式のユ
    ニオンは、以前からこのようにはキャッシュされていません。
    "typing.Union" への添字指定で多数のユニオンを作成するプログラムで
    は、この変更でメモリ使用量が増える可能性があります。 ただし、いく
    つかの要因がこのコストを相殺します。 **PEP 649** により、Python
    3.14 ではアノテーション内のユニオンはデフォルトでは評価されません
    。 また、"types.UnionType" のインスタンス自体が、以前の Python で
    "Union[]" が返していたオブジェクトよりもずっと小さく、キャッシュの
    削除自体もメモリを節約します。 そのため、ほとんどのユーザーにとっ
    て、この変更でメモリ使用量が大幅に増えることはないでしょう。

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

  * "typing.Union" 自体を "isinstance()" のチェックに使えるようになり
    ました。 例えば、以前は "TypeError" になっていた "isinstance(int |
    str, typing.Union)" が、"True" を返すようになります。

  * "typing.Union" オブジェクトの "__args__" 属性が書き込み不可になり
    ました。

  * "Union" オブジェクトの属性は、どれも設定できなくなりました。 以前
    のバージョンでも設定できたのは二重アンダースコア付きの属性だけで、
    ドキュメント化された機能ではなく、多くの場合に気付きにくい不具合が
    ありました。

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

* "TypeAliasType" がアスタリスクによるアンパックをサポートするようにな
  りました。


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

* Unicode データベースを Unicode 16.0.0 に更新しました。


unittest
--------

* "unittest" の出力がデフォルトで色付きになりました。 これは 環境変数
  で制御できます。 (Hugo van Kemenade が gh-127221 で貢献しました。)

* unittest のテスト探索で、開始ディレクトリとして *名前空間パッケージ*
  を再びサポートするようになりました。 この機能は Python 3.11 で削除さ
  れていました。 (Jacob Walls が gh-80958 で貢献しました。)

* "TestCase" クラスに、特定の用途に合わせたテストを行ういくつかのメソ
  ッドを追加しました。

  * "assertHasAttr()" と "assertNotHasAttr()" は、オブジェクトが特定の
    属性を持つかどうかを確認します。

  * "assertIsSubclass()" と "assertNotIsSubclass()" は、オブジェクトが
    特定のクラス、またはクラスのタプルのいずれかのサブクラスかどうかを
    確認します。

  * "assertStartsWith()"、"assertNotStartsWith()"、"assertEndsWith()"
    、"assertNotEndsWith()" は、Unicode 文字列やバイト列が特定の文字列
    で始まるか、終わるかを確認します。

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


urllib
------

* "urllib.request" が **RFC 7616** で定義された SHA-256 によるダイジェ
  スト認証をサポートし、HTTP ダイジェスト認証のアルゴリズムを強化しま
  した。 (Calvin Bui が gh-128193 で貢献しました。)

* "file:" URL の解析と生成について、使いやすさと標準への準拠を改善しま
  した。

  "url2pathname()" の変更:

  * 新しい "require_scheme" 引数が真の場合、完全な URL を受け付けます
    。

  * URL の authority がローカルのホスト名と一致する場合は、その部分を
    取り除きます。

  * 新しい "resolve_host" 引数が真の場合、URL の authority がローカル
    IP アドレスに解決されれば、その部分を取り除きます。

  * URL のクエリとフラグメントの部分を取り除きます。

  * URL の authority がローカルでない場合は "URLError" を送出します。
    ただし、Windows では従来どおり UNC パスを返します。

  "pathname2url()" の変更:

  * 新しい "add_scheme" 引数が真の場合、完全な URL を返します。

  * パスがスラッシュで始まる場合は、空の URL authority を含めます。 例
    えば、パス "/etc/hosts" は URL "///etc/hosts" に変換されます。

  Windows でドライブ文字を大文字に変換しなくなりました。 また、ドライ
  ブ文字の直後以外に ":" 文字があっても "OSError" を送出しなくなりまし
  た。

  (Barney Gale が gh-125866 で貢献しました。)


uuid
----

* **RFC 9562** で定義された UUID バージョン 6、7、8 を、それぞれ
  "uuid6()"、"uuid7()"、"uuid8()" でサポートするようになりました。
  (Bénédikt Tran が gh-89083 で貢献しました。)

* **RFC 9562** で定義された Nil UUID と Max UUID を表す "NIL" と "MAX"
  が利用できるようになりました。 (Nick Pope が gh-128427 で貢献しまし
  た。)

* "python -m uuid --count" により、コマンドラインで複数の UUID を一度
  に生成できるようになりました。 (Simon Legner が gh-131236 で貢献しま
  した。)


webbrowser
----------

* "BROWSER" 環境変数内の名前で、"webbrowser" モジュールに登録済みのブ
  ラウザを参照できるようになりました。 常に新しいブラウザのコマンドを
  生成するとは限らなくなります。

  これにより、macOS でサポートされるブラウザのいずれかの名前を
  "BROWSER" に設定できます。


zipfile
-------

* "ZipFile.writestr" で使う "ZipInfo" オブジェクトに適切なデフォルト値
  を設定する、"ZipInfo._for_archive" メソッドを追加しました。
  (Bénédikt Tran が gh-123424 で貢献しました。)

* 再現可能なビルドへの対応を改善するため、"ZipFile.writestr()" が
  "SOURCE_DATE_EPOCH" 環境変数を参照するようになりました。 (Jiahao Li
  が gh-91279 で貢献しました。)


最適化
======

* "annotationlib"、"ast"、"asyncio"、"base64"、"cmd"、"csv"、"gettext"
  、"importlib.util"、"locale"、"mimetypes"、"optparse"、"pickle"、
  "pprint"、"pstats"、"shlex"、"socket"、"string"、"subprocess"、
  "threading"、"tomllib"、"types"、"zipfile" など、いくつかの標準ライ
  ブラリモジュールのインポート時間を改善しました。

  (Adam Turner、Bénédikt Tran、Chris Markiewicz、Eli Schwartz、Hugo
  van Kemenade、Jelle Zijlstra らが gh-118761 で貢献しました。)

* インタープリタは、安全な場合には内部で参照カウントの変更を一部省くよ
  うになりました。 そのため、"sys.getrefcount()" と "Py_REFCNT()" が返
  す値は、以前の Python と異なる場合があります。 詳細は 後述の説明 を
  参照してください。


asyncio
-------

* "ネイティブのタスク" にスレッドごとの双方向連結リストを導入したこと
  で、標準ベンチマークの結果が 10～20% 改善し、メモリ使用量も減りまし
  た。 これにより、python -m asyncio pstree などの外部のイントロスペク
  ションツールが、すべてのスレッドで実行中の asyncio タスクの呼び出し
  グラフを調べられます。 (Kumar Aditya が gh-107803 で貢献しました。)

* このモジュールが *フリースレッドビルド* を正式にサポートするようにな
  りました。 これにより複数のイベントループを別々のスレッドで並列実行
  でき、スレッド数に比例して処理性能が向上します。 (Kumar Aditya が
  gh-128002 で貢献しました。)


base64
------

* "b16decode()" が最大 6 倍高速になりました。 (Bénédikt Tran, Chris
  Markiewicz, and Adam Turner が gh-118761 で貢献しました。)


bdb
---

* 基本デバッガーに "sys.monitoring" に基づくバックエンドが追加されまし
  た。 "Bdb" クラスの新しい *backend* 引数に "'monitoring'" を渡すと選
  択できます。 (Tian Gao が gh-124533 で貢献しました。)


difflib
-------

* "IS_LINE_JUNK()" 関数が最大 2 倍高速になりました。 (Adam Turner and
  Semyon Moroz が gh-130167 で貢献しました。)


gc
--

* **Python 3.14.5 以降:**

  Python 3.14.0–3.14.4 には新しいインクリメンタルなガベージコレクタが
  搭載されていました。 しかし、本番環境でメモリ使用量が大幅に増加する
  という 報告 が複数寄せられたため、3.13 の世代別 GC に戻されました。
  Python 3.14.5 以降では、この世代別 GC が使われています。

* **以前の Python 3.14.0～3.14.4:**

  新しい インクリメンタルなガベージコレクタ により、ヒープが大きい場合
  の最大停止時間が 10 分の 1 以下に短縮されます。

  この最適化により、"get_threshold()" と "set_threshold()" の結果の意
  味が、"get_count()" と "get_stats()" とともに変わりました。

  * 後方互換性のため、"get_threshold()" は引き続き 3 要素のタプルを返
    します。 最初の値は従来と同じく若い世代のコレクションの閾値です。
    2 番目の値は古い世代を走査する速さを決めます (デフォルトは 10 で、
    値が大きいほど古い世代の走査が遅くなります)。 3 番目の値に意味はな
    くなり、常にゼロになります。

  * "set_threshold()" は 3 番目以降の引数を無視するようになりました。

  * "get_count()" と "get_stats()" は引き続き同じ形式の結果を返します
    。 唯一の違いは、結果が若い世代・中間世代・古い世代を指す代わりに
    、若い世代と、古い世代の aging 領域および collecting 領域を指すこ
    とです。

  つまり、循環 GC の動作を操作するコードは意図したとおりには動かないか
  もしれませんが、悪影響を及ぼす可能性は極めて低いと考えられます。 そ
  れ以外のコードは問題なく動作します。

  (Mark Shannon が gh-108362 で貢献しました。)


io
--

* ファイルを開いて読み込む際のシステムコールの回数が減りました。 OS に
  キャッシュされた小さなファイルを丸ごと読み込む処理が最大 15% 高速に
  なりました。 (Cody Maloney and Victor Stinner が gh-120754 and
  gh-90102 で貢献しました。)


pathlib
-------

* "Path.read_bytes" がバッファリングなしのモードでファイルを開くように
  なり、ファイル全体の読み込みが 9% から 17% 高速になりました。 (Cody
  Maloney が gh-120754 で貢献しました。)


pdb
---

* "pdb" が "sys.settrace()" と "sys.monitoring" に基づく 2 つのバック
  エンドをサポートするようになりました。 pdb CLI または "breakpoint()"
  を使う場合は常に "sys.monitoring" バックエンドが使われます。
  "pdb.Pdb" やその派生クラスを明示的にインスタンス化する場合、デフォル
  トでは "sys.settrace()" バックエンドが使われますが、設定で変更できま
  す。 (Tian Gao が gh-124533 で貢献しました。)


textwrap
--------

* "dedent()" 関数を最適化し、平均で 2.4 倍高速化しました。 入力が大き
  いほど改善の幅も大きくなります。 また、スペースとタブ以外の空白文字
  を含む空行の正規化が不完全だったバグを修正しました。


uuid
----

* "uuid3()" と "uuid5()" がともに、16 バイトの名前では約 40%、1024 バ
  イトの名前では約 20% 高速になりました。 それより長い名前の処理性能は
  変わりません。 (Bénédikt Tran が gh-128150 で貢献しました。)

* "uuid4()" が約 30% 高速になりました。 (Bénédikt Tran が gh-128150 で
  貢献しました。)


zlib
----

* Windows の標準のバイナリでは、"zlib" モジュールの実装に zlib-ng が使
  われるようになりました。 "zlib-ng" と従来使われていた "zlib" の実装
  との間に、既知の非互換性はありません。 これにより、すべての圧縮レベ
  ルで性能が向上すると期待されます。

  ただし、"zlib.Z_BEST_SPEED" ("1") では従来の実装より圧縮率が大幅に下
  がる可能性がある一方、圧縮にかかる時間も大幅に短縮されます。

  (Steve Dower が gh-91349 で貢献しました。)


削除
====


argparse
--------

* "BooleanOptionalAction" の *type*、*choices*、*metavar* 引数を削除し
  ました。 これらは Python 3.12 から非推奨でした。 (Nikita Sobolev が
  gh-118805 で貢献しました。)

* 引数グループで "add_argument_group()" を呼ぶと "ValueError" が送出さ
  れるようになりました。 同様に、相互排他グループで
  "add_argument_group()" または "add_mutually_exclusive_group()" を呼
  ぶと、どちらも "ValueError" が送出されます。 この「入れ子」はサポー
  トされておらず、正しく動かないことも多く、継承により意図せず利用可能
  になっていたものです。 この機能は Python 3.11 から非推奨でした。
  (Savannah Ostrowski が gh-127186 で貢献しました。)


ast
---

* 以下のクラスを削除しました。 これらは Python 3.8 から "Constant" の
  非推奨の別名となっており、Python 3.12 から非推奨の警告を出していまし
  た。

  * "Bytes"

  * "Ellipsis"

  * "NameConstant"

  * "Num"

  * "Str"

  これらの削除に伴い、"NodeVisitor" の独自のサブクラスに定義した
  "visit_Num"、"visit_Str"、"visit_Bytes"、"visit_NameConstant"、
  "visit_Ellipsis" メソッドは、"NodeVisitor" サブクラスが AST を走査す
  るときに呼ばれなくなりました。 代わりに "visit_Constant" メソッドを
  定義してください。

  (Alex Waygood が gh-119562 で貢献しました。)

* "ast.Constant" の以下の非推奨のプロパティを削除しました。 これらは、
  今回削除された AST クラスとの互換性のために存在していました。

  * "Constant.n"

  * "Constant.s"

  代わりに "Constant.value" を使ってください。 (Alex Waygood が
  gh-119562 で貢献しました。)


asyncio
-------

* Python 3.12 から非推奨だった以下のクラス、メソッド、関数を削除しまし
  た。

  * "AbstractChildWatcher"

  * "FastChildWatcher"

  * "MultiLoopChildWatcher"

  * "PidfdChildWatcher"

  * "SafeChildWatcher"

  * "ThreadedChildWatcher"

  * "AbstractEventLoopPolicy.get_child_watcher()"

  * "AbstractEventLoopPolicy.set_child_watcher()"

  * "get_child_watcher()"

  * "set_child_watcher()"

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

* "asyncio.get_event_loop()" は現在のイベントループがない場合に
  "RuntimeError" を送出するようになり、イベントループを暗黙に作成しな
  くなりました。

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

  "asyncio.get_event_loop()" を使うパターンはいくつかありますが、その
  大半は "asyncio.run()" で置き換えられます。

  非同期関数を実行するだけなら、"asyncio.run()" を使ってください。

  変更前:

     async def main():
         ...


     loop = asyncio.get_event_loop()
     try:
         loop.run_until_complete(main())
     finally:
         loop.close()

  変更後:

     async def main():
         ...

     asyncio.run(main())

  ソケットで待ち受けるサーバなどを起動し、その後ずっと実行し続けたい場
  合は、"asyncio.run()" と "asyncio.Event" を使ってください。

  変更前:

     def start_server(loop): ...

     loop = asyncio.get_event_loop()
     try:
         start_server(loop)
         loop.run_forever()
     finally:
         loop.close()

  変更後:

     def start_server(loop): ...

     async def main():
         start_server(asyncio.get_running_loop())
         await asyncio.Event().wait()

     asyncio.run(main())

  イベントループで処理を実行し、その前後にブロッキングするコードを実行
  したい場合は、"asyncio.Runner" を使ってください。

  変更前:

     async def operation_one(): ...
     def blocking_code(): ...
     async def operation_two(): ...

     loop = asyncio.get_event_loop()
     try:
         loop.run_until_complete(operation_one())
         blocking_code()
         loop.run_until_complete(operation_two())
     finally:
         loop.close()

  変更後:

     async def operation_one(): ...
     def blocking_code(): ...
     async def operation_two(): ...

     with asyncio.Runner() as runner:
         runner.run(operation_one())
         blocking_code()
         runner.run(operation_two())


email
-----

* "email.utils.localtime()" の *isdst* 引数を削除しました。 この引数は
  Python 3.12 から非推奨で、無視されていました。 (Hugo van Kemenade が
  gh-118798 で貢献しました。)


importlib.abc
-------------

* "importlib.abc" の非推奨のクラスを削除しました。

  * "ResourceReader" (代わりに "TraversableResources" を使用)

  * "Traversable" (代わりに "Traversable" を使用)

  * "TraversableResources" (代わりに "TraversableResources" を使用)

  (Jason R. Coombs and Hugo van Kemenade が gh-93963 で貢献しました。)


itertools
---------

* "itertools" のイテレータから、コピー、深いコピー、pickle 化のサポー
  トを削除しました。 これらの操作は Python 3.12 から
  "DeprecationWarning" を出していました。 (Raymond Hettinger が
  gh-101588 で貢献しました。)


pathlib
-------

* "Path" に追加のキーワード引数を渡す機能を削除しました。 以前のバージ
  ョンでは、こうした引数はすべて無視されていました。 (Barney Gale が
  gh-74033 で貢献しました。)

* "PurePath.relative_to()" と "is_relative_to()" に追加の位置引数を渡
  す機能を削除しました。 以前のバージョンでは、こうした引数はすべて
  *other* に結合されていました。 (Barney Gale が gh-78707 で貢献しまし
  た。)


pkgutil
-------

* Python 3.12 から非推奨だった "get_loader()" 関数と "find_loader()"
  関数を削除しました。 (Bénédikt Tran が gh-97850 で貢献しました。)


pty
---

* Python 3.12 から非推奨だった "master_open()" 関数と "slave_open()"
  関数を削除しました。 代わりに "pty.openpty()" を使ってください。
  (Nikita Sobolev が gh-118824 で貢献しました。)


sqlite3
-------

* "sqlite3" モジュールから "version" と "version_info" を削除しました
  。 実行時に使われる SQLite ライブラリの実際のバージョン番号を取得す
  るには、"sqlite_version" と "sqlite_version_info" を使ってください。
  (Hugo van Kemenade が gh-118924 で貢献しました。)

* 名前付きプレースホルダーとともにパラメータのシーケンスを使うと、
  "ProgrammingError" が送出されるようになりました。 この使い方は
  Python 3.12 から非推奨でした。 (Erlend E. Aasland が gh-118928 and
  gh-101693 で貢献しました。)


urllib
------

* Python 3.11 から非推奨だった "Quoter" クラスを "urllib.parse" から削
  除しました。 (Nikita Sobolev が gh-118827 で貢献しました。)

* Python 3.3 から非推奨だった "URLopener" クラスと "FancyURLopener" ク
  ラスを "urllib.request" から削除しました。

  "myopener.open()" は "urlopen()" で置き換えられます。
  "myopener.retrieve()" は "urlretrieve()" で置き換えられます。 オープ
  ナークラスのカスタマイズは、カスタマイズしたハンドラーを
  "build_opener()" に渡すことで置き換えられます。 (Barney Gale が
  gh-84850 で貢献しました。)


非推奨
======


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

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

* "argparse":

  * "add_argument_group()" メソッドに、ドキュメントに記載のないキーワ
    ード引数 *prefix_chars* を渡すことが非推奨になりました。 (Savannah
    Ostrowski が gh-125563 で貢献しました。)

  * 型変換器 "argparse.FileType" が非推奨になりました。 リソース管理に
    関わる処理はすべて、引数の解析が終わった後の処理で行ってください。
    (Serhiy Storchaka が gh-58032 で貢献しました。)

* "asyncio":

  * "asyncio.iscoroutinefunction()" が非推奨になり、Python 3.16 で削除
    される予定です。 代わりに "inspect.iscoroutinefunction()" を使って
    ください。 (Jiahao Li and 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 で貢献しました。)

* "codecs": "codecs.open()" 関数が非推奨になり、将来の Python バージョ
  ンで削除される予定です。 代わりに "open()" を使ってください。 (Inada
  Naoki が gh-133036 で貢献しました。)

* "ctypes":

  * Windows 以外のプラットフォームで、"Structure._pack_" を設定して
    MSVC 互換のデフォルトのメモリレイアウトを使うことが非推奨になり、
    Python 3.19 で削除される予定です。 代わりに "Structure._layout_"
    を "'ms'" に設定してください。 (Petr Viktorin が gh-131747 で貢献
    しました。)

  * 文字列を指定して "ctypes.POINTER()" を呼び出すことが非推奨になりま
    した。 自己参照する構造体には 不完全型 を使ってください。 また、内
    部の "ctypes._pointer_type_cache" も非推奨になりました。 更新され
    た実装の詳細は "ctypes.POINTER()" を参照してください。 (Sergey
    Myrianov が gh-100926 で貢献しました。)

* "functools": "functools.reduce()" の Python 実装を *function* や
  *sequence* をキーワード引数として指定して呼び出すことが非推奨になり
  ました。 これらの引数は Python 3.16 で位置専用になります。 (Kirill
  Podoprigora が gh-121676 で貢献しました。)

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

* "mimetypes": "mimetypes.MimeTypes.add_type()" で有効な拡張子は、空か
  、'.' で始まるものです。 ドットで始まらない拡張子は非推奨になり、
  Python 3.16 では "ValueError" が送出されます。 (Hugo van Kemenade が
  gh-75223 で貢献しました。)

* "nturl2path": このモジュールが非推奨になりました。 代わりに
  "urllib.request.url2pathname()" と "pathname2url()" を呼び出してくだ
  さい。 (Barney Gale が gh-125866 で貢献しました。)

* "os": "os.popen()" 関数と "os.spawn*" 関数が *ソフト非推奨* になりま
  した。 新しいコードではこれらを使わないでください。 代わりに
  "subprocess" モジュールを推奨します。 (Victor Stinner が gh-120743
  で貢献しました。)

* "pathlib": "pathlib.PurePath.as_uri()" が非推奨になり、Python 3.19
  で削除予定です。 代わりに "pathlib.Path.as_uri()" を使ってください。
  (Barney Gale が gh-123599 で貢献しました。)

* "pdb": ドキュメントに記載のない "pdb.Pdb.curframe_locals" 属性が、非
  推奨の読み出し専用プロパティになりました。 このプロパティは将来の
  Python バージョンで削除される予定です。 Python 3.13 で **PEP 667**
  により低オーバーヘッドでフレームのローカル変数に動的にアクセスできる
  ようになったため、この属性に保存していたフレームのローカル変数のキャ
  ッシュへの参照は不要になりました。 派生デバッガーでは、Python 3.13
  以降は "pdb.Pdb.curframe.f_locals" に直接アクセスしてください。
  (Tian Gao が gh-124369 and gh-125951 で貢献しました。)

* "symtable": 関心が寄せられていないため
  "symtable.Class.get_methods()" が非推奨になり、Python 3.16 で削除予
  定です。 (Bénédikt Tran が gh-119698 で貢献しました。)

* "tkinter": "tkinter.Variable" の "trace_variable()"、
  "trace_vdelete()"、"trace_vinfo()" メソッドが非推奨になりました。 代
  わりに "trace_add()"、"trace_remove()"、"trace_info()" を使ってくだ
  さい。 (Serhiy Storchaka が gh-120220 で貢献しました。)

* "urllib.parse": "parse_qsl()" と "parse_qs()" に、偽と評価されるオブ
  ジェクト ("0" や "[]" など) を渡すことが非推奨になりました。 ただし
  、空文字列、バイト列類似オブジェクト、"None" は除きます。 (Serhiy
  Storchaka が gh-116897 で貢献しました。)


Python 3.15 で削除予定
----------------------

* インポートシステム：

  * モジュールの "__spec__.cached" を設定せずに "__cached__" を設定す
    ることは非推奨です。 Python 3.15 では、インポートシステムや標準ラ
    イブラリは "__cached__" を設定しなくなり、その値も参照しなくなりま
    す。 (gh-97879)

  * モジュールの "__spec__.parent" を設定せずに "__package__" を設定す
    ることは非推奨です。 Python 3.15 では、インポートシステムや標準ラ
    イブラリは "__package__" を設定しなくなり、その値も参照しなくなり
    ます。 (gh-97879)

* "ctypes":

  * ドキュメント化されていない "ctypes.SetPointerType()" 関数は Python
    3.13 から非推奨です。

* "http.server":

  * 古く、ほとんど使われていない "CGIHTTPRequestHandler" は Python
    3.13 から非推奨です。 直接の代替はありません。 Web サーバーとリク
    エストハンドラーを接続するには、CGI 以外なら *どの方法でも* よりよ
    い選択です。

  * **python -m http.server** のコマンドラインインターフェースの "--
    cgi" フラグは Python 3.13 から非推奨です。

* "importlib":

  * "load_module()" メソッド：代わりに "exec_module()" を使ってくださ
    い。

* "pathlib":

  * ".PurePath.is_reserved()" は Python 3.13 から非推奨です。 Windows
    で予約済みのパスを検出するには "os.path.isreserved()" を使ってくだ
    さい。

* "platform":

  * "platform.java_ver()" は Python 3.13 から非推奨です。 この関数が役
    立つのは Jython への対応だけで、API は分かりにくく、ほとんどテスト
    されていません。

* "sysconfig":

  * "sysconfig.is_python_build()" の "check_home" 引数は Python 3.12
    から非推奨です。

* "threading":

  * "RLock()" は Python 3.15 から引数を受け取らなくなります。 Python
    実装は引数を一切受け付けない一方、C 実装は任意の個数の位置引数やキ
    ーワード引数を受け付けてすべて無視するため、Python 3.14 から引数を
    渡すことは非推奨です。

* "types":

  * "types.CodeType"："codeobject.co_lnotab" へのアクセスは、**PEP
    626** で 3.10 から非推奨となり、3.12 で削除予定でした。 しかし、実
    際に "DeprecationWarning" が出るようになったのは 3.12 です。 3.15
    で削除される可能性があります。 (Nikita Sobolev が gh-101866 で貢献
    しました。)

* "typing":

  * "NamedTuple" クラスを作成する、ドキュメント化されていないキーワー
    ド引数による構文 (例えば "Point = NamedTuple("Point", x=int,
    y=int)") は Python 3.13 から非推奨です。 代わりにクラスベースの構
    文か関数形式の構文を使ってください。

  * "TypedDict" の関数形式の構文で、"fields" パラメータを省略すること
    ("TD = TypedDict("TD")") や "None" を渡すこと ("TD =
    TypedDict("TD", None)") は Python 3.13 から非推奨です。 フィールド
    がない TypedDict を作成するには、"class TD(TypedDict): pass" また
    は "TD = TypedDict("TD", {})" を使ってください。

  * "@typing.no_type_check_decorator" デコレーター関数は Python 3.13
    から非推奨です。 "typing" モジュールに追加されてから8年が経過しま
    したが、主要な型チェッカーではまだサポートされていません。

* "sre_compile"、"sre_constants"、"sre_parse" モジュール。

* "wave":

  * "Wave_read" クラスと "Wave_write" クラスの "getmark()"、
    "setmark()"、"getmarkers()" メソッドは Python 3.13 から非推奨です
    。

* "zipimport":

  * "zipimport.zipimporter.load_module()" は Python 3.10 から非推奨で
    す。 代わりに "exec_module()" を使ってください。 (gh-125746。)


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


CPython バイトコードの変更
==========================

* オペコード "BINARY_SUBSCR" を、"NB_SUBSCR" を oparg に持つ
  "BINARY_OP" オペコードで置き換えました。 (Irit Katriel が gh-100239
  で貢献しました。)

* 新しい "Interpolation" インスタンスと "Template" インスタンスをそれ
  ぞれ構築する "BUILD_INTERPOLATION" オペコードと "BUILD_TEMPLATE" オ
  ペコードを追加しました。 (Lysandros Nikolaou ほかが gh-132661 で貢献
  しました。 PEP 750: テンプレート文字列 も参照してください)。

* "BUILD_CONST_KEY_MAP" オペコードを削除しました。 代わりに
  "BUILD_MAP" を使ってください。 (Mark Shannon が gh-122160 で貢献しま
  した。)

* "LOAD_ASSERTION_ERROR" オペコードを "LOAD_COMMON_CONSTANT" で置き換
  え、"NotImplementedError" の読み込みをサポートしました。

* "LOAD_FAST_BORROW" オペコードと "LOAD_FAST_BORROW_LOAD_FAST_BORROW"
  オペコードを追加しました。 フレーム内の参照がスタックに読み込まれた
  参照より長く存続するとインタープリタが証明できる場合に、参照カウント
  のオーバーヘッドを削減します。 (Matt Page が gh-130704 で貢献しまし
  た。)

* "oparg" と等しい小さな整数をスタックに積む "LOAD_SMALL_INT" オペコー
  ドを追加しました。 "RETURN_CONST" オペコードは使われなくなったため削
  除しました。 (Mark Shannon が gh-125837 で貢献しました。)

* 新しい "LOAD_SPECIAL" 命令を追加しました。 "with" 文と "async with"
  文のコードは、この新しい命令を使って生成されます。 "BEFORE_WITH" 命
  令と "BEFORE_ASYNC_WITH" 命令を削除しました。 (Mark Shannon が
  gh-120507 で貢献しました。)

* 「仮想」イテレータをサポートする "POP_ITER" オペコードを追加しました
  。 (Mark Shannon が gh-132554 で貢献しました。)


擬似命令
--------

* アノテーションの遅延評価 で、モジュールレベルのアノテーションが一部
  だけ実行される場合に対応する "ANNOTATIONS_PLACEHOLDER" 擬似命令を追
  加しました。 (Jelle Zijlstra が gh-130907 で貢献しました。)

* インラインキャッシュから取得した一組の関数 (ガード関数と特殊化関数)
  を実行する "BINARY_OP_EXTEND" 擬似命令を追加しました。 (Irit Katriel
  が gh-100239 で貢献しました。)

* "CALL_KW" に 3 つの特殊化を追加しました。 Python 関数の呼び出し用の
  "CALL_KW_PY"、束縛メソッドの呼び出し用の "CALL_KW_BOUND_METHOD"、そ
  れ以外の呼び出し用の "CALL_KW_NON_PY" です。 (Mark Shannon が
  gh-118093 で貢献しました。)

* スタックに影響を与えない条件付きジャンプである "JUMP_IF_TRUE" 擬似命
  令と "JUMP_IF_FALSE" 擬似命令を追加しました。 これらは "COPY 1"、
  "TO_BOOL"、"POP_JUMP_IF_TRUE/FALSE" という命令列で置き換えられます。
  (Irit Katriel が gh-124285 で貢献しました。)

* "LOAD_CONST_MORTAL" 擬似命令を追加しました。 (Mark Shannon が
  gh-128685 で貢献しました。)

* "LOAD_CONST" と同じ動作を行い、不死オブジェクトではより効率のよい
  "LOAD_CONST_IMMORTAL" 擬似命令を追加しました。 (Mark Shannon が
  gh-125837 で貢献しました。)

* "sys.monitoring" が分岐イベント ("BRANCH_LEFT" など) を記録するため
  に使う "NOT_TAKEN" 擬似命令を追加しました。 (Mark Shannon が
  gh-122548 で貢献しました。)


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


Python 設定 C API
-----------------

C 構造体に依存せず Python の初期化を設定でき、将来 ABI 互換性を保った
変更も行える PyInitConfig C API を追加しました。

組み込み拡張モジュールを追加できる "PyInitConfig_AddModule()" を追加し
、**PEP 587** の PyConfig C API を補完しました。 この機能は従来「
inittab」と呼ばれていました。

現在のランタイム設定を取得・設定する "PyConfig_Get()" 関数と
"PyConfig_Set()" 関数を追加しました。

**PEP 587** 「Python の初期化設定」は、Python の初期化を設定するすべて
の方法を統合しました。 今回の PEP はさらに、Python の事前初期化と初期
化の設定を単一の API に統合します。 また、API をさらに簡素化するため、
Python を組み込む際の選択肢を、PEP 587 の「Python」と「Isolated」の 2
つではなく、1 つだけにしています。

CPython の実装の詳細と意図的に強く結び付く用途では、より低レベルの PEP
587 の PyConfig API を引き続き使えます。 例えば、設定の仕組みを含めた
CPython の CLI の全機能を再現する場合などです。

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

参考: **PEP 741** と **PEP 587**


C API の新機能
--------------

* Python のバージョン番号をビット単位で詰め込む 2 つの新しいマクロ、
  "Py_PACK_VERSION()" と "Py_PACK_FULL_VERSION()" を追加しました。
  "Py_Version" や "PY_VERSION_HEX" と比較する際に便利です。 (Petr
  Viktorin が gh-128629 で貢献しました。)

* Python の "sep.join(iterable)" に相当する "PyBytes_Join(sep,
  iterable)" 関数を追加しました。 (Victor Stinner が gh-121645 で貢献
  しました。)

* 実行中の Python インタープリタの設定を操作する関数を追加しました
  (PEP 741: Python 設定 C API)。

  * "PyConfig_Get()"

  * "PyConfig_GetInt()"

  * "PyConfig_Set()"

  * "PyConfig_Names()"

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

* Python の初期化を設定する関数を追加しました (PEP 741: Python 設定 C
  API)。

  * "Py_InitializeFromInitConfig()"

  * "PyInitConfig_AddModule()"

  * "PyInitConfig_Create()"

  * "PyInitConfig_Free()"

  * "PyInitConfig_FreeStrList()"

  * "PyInitConfig_GetError()"

  * "PyInitConfig_GetExitCode()"

  * "PyInitConfig_GetInt()"

  * "PyInitConfig_GetStr()"

  * "PyInitConfig_GetStrList()"

  * "PyInitConfig_HasOption()"

  * "PyInitConfig_SetInt()"

  * "PyInitConfig_SetStr()"

  * "PyInitConfig_SetStrList()"

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

* ファイルを開く "Py_fopen()" 関数を追加しました。 標準 C の "fopen()"
  関数と同様に動作しますが、*path* 引数として Python オブジェクトを受
  け取り、エラー時には例外を設定します。 ファイルを閉じるには、対応す
  る新しい "Py_fclose()" 関数を使ってください。 (Victor Stinner が
  gh-127350 で貢献しました。)

* バッファのハッシュ値を計算して返す "Py_HashBuffer()" を追加しました
  。 (Antoine Pitrou and Victor Stinner が gh-122854 で貢献しました。)

* モジュールをインポートしてその属性を取得する補助関数
  "PyImport_ImportModuleAttr()" と "PyImport_ImportModuleAttrString()"
  を追加しました。 (Victor Stinner が gh-128911 で貢献しました。)

* 戻り値の意味が曖昧な "PyIter_Next()" を置き換える
  "PyIter_NextItem()" を追加しました。 (Irit Katriel and Erlend
  Aasland が gh-105201 で貢献しました。)

* "int" オブジェクトの符号を取得する "PyLong_GetSign()" 関数を追加しま
  した。 (Sergey B Kirpichev が gh-116560 で貢献しました。)

* "PyLongObject" がそれぞれ正、負、ゼロかどうかを調べる
  "PyLong_IsPositive()"、"PyLong_IsNegative()"、"PyLong_IsZero()" を追
  加しました。 (James Roy and Sergey B Kirpichev が gh-126061 で貢献し
  ました。)

* C の "<stdint.h>" の数値と Python の "int" オブジェクトを相互に変換
  する新しい関数を追加しました。

  * "PyLong_AsInt32()"

  * "PyLong_AsInt64()"

  * "PyLong_AsUInt32()"

  * "PyLong_AsUInt64()"

  * "PyLong_FromInt32()"

  * "PyLong_FromInt64()"

  * "PyLong_FromUInt32()"

  * "PyLong_FromUInt64()"

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

* Python の "int" オブジェクトをインポート・エクスポートする新しい API
  を追加しました (**PEP 757**)。

  * "PyLong_GetNativeLayout()"

  * "PyLong_Export()"

  * "PyLong_FreeExport()"

  * "PyLongWriter_Create()"

  * "PyLongWriter_Finish()"

  * "PyLongWriter_Discard()"

  (Sergey B Kirpichev and Victor Stinner が gh-102471 で貢献しました。
  )

* "BRANCH_LEFT" イベントと "BRANCH_RIGHT" イベントをそれぞれ生成する
  "PyMonitoring_FireBranchLeftEvent()" と
  "PyMonitoring_FireBranchRightEvent()" を追加しました。 (Mark Shannon
  が gh-122548 で貢献しました。)

* 型をイミュータブルにする "PyType_Freeze()" 関数を追加しました。
  (Victor Stinner が gh-121654 で貢献しました。)

* スーパークラスの識別を容易にする "PyType_GetBaseByToken()" と
  "Py_tp_token" スロットを追加しました。 これは **PEP 630** で指摘され
  た型チェックの問題の解決を図るものです。 (gh-124153 で貢献されました
  。)

* 2 つの文字列が等しいかどうかを調べる新しい "PyUnicode_Equal()" 関数
  を追加しました。 この関数は Limited C API にも追加されています。
  (Victor Stinner が gh-124502 で貢献しました。)

* Python の "str" オブジェクトを作成する新しい "PyUnicodeWriter" API
  を追加しました。 以下の関数を含みます。

  * "PyUnicodeWriter_Create()"

  * "PyUnicodeWriter_DecodeUTF8Stateful()"

  * "PyUnicodeWriter_Discard()"

  * "PyUnicodeWriter_Finish()"

  * "PyUnicodeWriter_Format()"

  * "PyUnicodeWriter_WriteASCII()"

  * "PyUnicodeWriter_WriteChar()"

  * "PyUnicodeWriter_WriteRepr()"

  * "PyUnicodeWriter_WriteStr()"

  * "PyUnicodeWriter_WriteSubstring()"

  * "PyUnicodeWriter_WriteUCS4()"

  * "PyUnicodeWriter_WriteUTF8()"

  * "PyUnicodeWriter_WriteWideChar()"

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

* "PyArg_ParseTuple()" および同様の関数の書式 "k" と "K" が、他のすべ
  ての整数書式と同じく、利用可能な場合には "__index__()" を使うように
  なりました。 (Serhiy Storchaka が gh-112068 で貢献しました。)

* "Py_BuildValue()" に、C の整数から Python の "bool" オブジェクトを生
  成する新しい書式単位 "p" を追加しました。 (Pablo Galindo が
  bpo-45325 で貢献しました。)

* デバッグのために、オブジェクトが *不死* かどうかを判定する
  "PyUnstable_IsImmortal()" を追加しました。 (Peter Bierma が
  gh-128509 で貢献しました。)

* **PEP 703** で説明されている遅延参照カウントを有効にする
  "PyUnstable_Object_EnableDeferredRefcount()" を追加しました。

* *フリースレッド* ビルドで "Py_REFCNT(op) == 1" の代わりに使う
  "PyUnstable_Object_IsUniquelyReferenced()" を追加しました。 (Peter
  Bierma が gh-133140 で貢献しました。)

* オブジェクトがインタープリタのオペランドスタック上で一意に参照される
  一時オブジェクトかどうかを判定する
  "PyUnstable_Object_IsUniqueReferencedTemporary()" を追加しました。 C
  API 関数に引数として渡される Python オブジェクトについて、
  "Py_REFCNT()" が "1" かどうかを調べる代わりに使える場合があります。
  (Sam Gross が gh-133164 で貢献しました。)


Limited C API の変更
--------------------

* Limited C API のバージョン 3.14 以降では、"Py_TYPE()" と
  "Py_REFCNT()" が実装の詳細を隠す不透明な関数呼び出しとして実装される
  ようになりました。 (Victor Stinner が gh-120600 and gh-124127 で貢献
  しました。)

* Limited C API ではこれまで一度も正しく動作していなかったため、
  "PySequence_Fast_GET_SIZE"、"PySequence_Fast_GET_ITEM"、
  "PySequence_Fast_ITEMS" マクロを Limited C API から削除しました。
  (Victor Stinner が gh-91417 で貢献しました。)


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

* ミュータブルな基底型を持つ "イミュータブルな型" の作成は Python 3.12
  で非推奨になり、今回から "TypeError" が送出されます。 (Nikita
  Sobolev が gh-119775 で貢献しました。)

* Python 3.12 で非推奨になった "PyDictObject.ma_version_tag" メンバー
  を削除しました。 代わりに "PyDict_AddWatcher()" API を使ってください
  。 (Sam Gross が gh-124296 で貢献しました。)

* 非公開関数 "_Py_InitializeMain()" を削除しました。 これは **PEP
  587** により Python 3.8 に追加された *暫定 API* でした。 (Victor
  Stinner が gh-129033 で貢献しました。)

* ドキュメントに記載のない API "Py_C_RECURSION_LIMIT" と
  "PyThreadState.c_recursion_remaining" を削除しました。 これらは 3.13
  で追加されたもので、非推奨期間を設けずに削除されました。 C コードで
  再帰の暴走を防ぐには "Py_EnterRecursiveCall()" を使ってください。
  (Petr Viktorin が gh-133079 で削除しました。 gh-130396 も参照してく
  ださい。)


非推奨の C API
--------------

* "Py_HUGE_VAL" マクロが *ソフト非推奨* になりました。 代わりに
  "INFINITY" を使ってください。 (Sergey B Kirpichev が gh-120026 で貢
  献しました。)

* "Py_IS_NAN"、"Py_IS_INFINITY"、"Py_IS_FINITE" マクロが *ソフト非推奨
  * になりました。 代わりに C99 以降の "math.h" で利用できる "isnan"、
  "isinf"、"isfinite" を使ってください。 (Sergey B Kirpichev が
  gh-119613 で貢献しました。)

* "PyArg_ParseTuple()" やその他の 引数解析 関数で、"(items)" 書式単位
  にタプル以外のシーケンスを渡すことが、*items* に 借用バッファ または
  *借用参照* を格納する書式単位が含まれる場合には非推奨になりました。
  (Serhiy Storchaka が gh-50333 で貢献しました。)

* "_PyMonitoring_FireBranchEvent" 関数が非推奨になりました。
  "PyMonitoring_FireBranchLeftEvent()" と
  "PyMonitoring_FireBranchRightEvent()" の呼び出しに置き換えてください
  。

* 従来ドキュメントに記載のなかった "PySequence_In()" 関数が *ソフト非
  推奨* になりました。 代わりに "PySequence_Contains()" を使ってくださ
  い。 (Yuki Kobayashi が gh-127896 で貢献しました。)


Python 3.15 で削除予定
~~~~~~~~~~~~~~~~~~~~~~

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

* "PyWeakref_GetObject()" と "PyWeakref_GET_OBJECT()"：代わりに
  "PyWeakref_GetRef()" を使ってください。 pythoncapi-compat プロジェク
  ト を使うと、Python 3.12 以前でも "PyWeakref_GetRef()" を利用できま
  す。

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

* Python 3.13 で非推奨となった Python 初期化関数：

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

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

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

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

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

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

  pythoncapi-compat プロジェクト を使うと、Python 3.13 以前でも
  "PyConfig_Get()" を利用できます。

* Python 3.11 で非推奨となった、Python の初期化を設定する関数：

  * "PySys_SetArgvEx()"：代わりに "PyConfig.argv" を設定してください。

  * "PySys_SetArgv()"：代わりに "PyConfig.argv" を設定してください。

  * "Py_SetProgramName()"：代わりに "PyConfig.program_name" を設定して
    ください。

  * "Py_SetPythonHome()"：代わりに "PyConfig.home" を設定してください
    。

  * "PySys_ResetWarnOptions()"：代わりに "sys.warnoptions" と
    "warnings.filters" をクリアしてください。

  代わりに "PyConfig" と "Py_InitializeFromConfig()" API を使ってくだ
  さい。

* グローバルな設定変数：

  * "Py_DebugFlag"：代わりに "PyConfig.parser_debug" または
    "PyConfig_Get("parser_debug")" を使ってください。

  * "Py_VerboseFlag"：代わりに "PyConfig.verbose" または
    "PyConfig_Get("verbose")" を使ってください。

  * "Py_QuietFlag"：代わりに "PyConfig.quiet" または
    "PyConfig_Get("quiet")" を使ってください。

  * "Py_InteractiveFlag"：代わりに "PyConfig.interactive" または
    "PyConfig_Get("interactive")" を使ってください。

  * "Py_InspectFlag"：代わりに "PyConfig.inspect" または
    "PyConfig_Get("inspect")" を使ってください。

  * "Py_OptimizeFlag"：代わりに "PyConfig.optimization_level" または
    "PyConfig_Get("optimization_level")" を使ってください。

  * "Py_NoSiteFlag"：代わりに "PyConfig.site_import" または
    "PyConfig_Get("site_import")" を使ってください。

  * "Py_BytesWarningFlag"：代わりに "PyConfig.bytes_warning" または
    "PyConfig_Get("bytes_warning")" を使ってください。

  * "Py_FrozenFlag"：代わりに "PyConfig.pathconfig_warnings" または
    "PyConfig_Get("pathconfig_warnings")" を使ってください。

  * "Py_IgnoreEnvironmentFlag"：代わりに "PyConfig.use_environment" ま
    たは "PyConfig_Get("use_environment")" を使ってください。

  * "Py_DontWriteBytecodeFlag"：代わりに "PyConfig.write_bytecode" ま
    たは "PyConfig_Get("write_bytecode")" を使ってください。

  * "Py_NoUserSiteDirectory"：代わりに "PyConfig.user_site_directory"
    または "PyConfig_Get("user_site_directory")" を使ってください。

  * "Py_UnbufferedStdioFlag"：代わりに "PyConfig.buffered_stdio" また
    は "PyConfig_Get("buffered_stdio")" を使ってください。

  * "Py_HashRandomizationFlag"：代わりに "PyConfig.use_hash_seed" と
    "PyConfig.hash_seed" または "PyConfig_Get("hash_seed")" を使ってく
    ださい。

  * "Py_IsolatedFlag"：代わりに "PyConfig.isolated" または
    "PyConfig_Get("isolated")" を使ってください。

  * "Py_LegacyWindowsFSEncodingFlag"：代わりに
    "PyPreConfig.legacy_windows_fs_encoding" または
    "PyConfig_Get("legacy_windows_fs_encoding")" を使ってください。

  * "Py_LegacyWindowsStdioFlag"：代わりに
    "PyConfig.legacy_windows_stdio" または
    "PyConfig_Get("legacy_windows_stdio")" を使ってください。

  * "Py_FileSystemDefaultEncoding"、"Py_HasFileSystemDefaultEncoding"
    ：代わりに "PyConfig.filesystem_encoding" または
    "PyConfig_Get("filesystem_encoding")" を使ってください。

  * "Py_FileSystemDefaultEncodeErrors"：代わりに
    "PyConfig.filesystem_errors" または
    "PyConfig_Get("filesystem_errors")" を使ってください。

  * "Py_UTF8Mode"：代わりに "PyPreConfig.utf8_mode" または
    "PyConfig_Get("utf8_mode")" を使ってください。
    ("Py_PreInitialize()" を参照)

  これらのオプションを設定するには、"PyConfig" と
  "Py_InitializeFromConfig()" API を使ってください。 実行時に値を取得
  するには "PyConfig_Get()" を使えます。


Python 3.16 で削除予定
~~~~~~~~~~~~~~~~~~~~~~

* 同梱されている "libmpdec"。


Python 3.18 で削除予定
~~~~~~~~~~~~~~~~~~~~~~

* 以下の非公開関数は非推奨となり、Python 3.18 で削除予定です：

  * "_PyBytes_Join()"："PyBytes_Join()" を使ってください。

  * "_PyDict_GetItemStringWithError()"："PyDict_GetItemStringRef()" を
    使ってください。

  * "_PyDict_Pop()"："PyDict_Pop()" を使ってください。

  * "_PyLong_Sign()"："PyLong_GetSign()" を使ってください。

  * "_PyLong_FromDigits()" と "_PyLong_New()"："PyLongWriter_Create()"
    を使ってください。

  * "_PyThreadState_UncheckedGet()"："PyThreadState_GetUnchecked()" を
    使ってください。

  * "_PyUnicode_AsString()"："PyUnicode_AsUTF8()" を使ってください。

  * "_PyUnicodeWriter_Init()"："_PyUnicodeWriter_Init(&writer)" を
    "writer = PyUnicodeWriter_Create(0)" に置き換えてください。

  * "_PyUnicodeWriter_Finish()"："_PyUnicodeWriter_Finish(&writer)" を
    "PyUnicodeWriter_Finish(writer)" に置き換えてください。

  * "_PyUnicodeWriter_Dealloc()"："_PyUnicodeWriter_Dealloc(&writer)"
    を "PyUnicodeWriter_Discard(writer)" に置き換えてください。

  * "_PyUnicodeWriter_WriteChar()"：
    "_PyUnicodeWriter_WriteChar(&writer, ch)" を
    "PyUnicodeWriter_WriteChar(writer, ch)" に置き換えてください。

  * "_PyUnicodeWriter_WriteStr()"："_PyUnicodeWriter_WriteStr(&writer,
    str)" を "PyUnicodeWriter_WriteStr(writer, str)" に置き換えてくだ
    さい。

  * "_PyUnicodeWriter_WriteSubstring()"：
    "_PyUnicodeWriter_WriteSubstring(&writer, str, start, end)" を
    "PyUnicodeWriter_WriteSubstring(writer, str, start, end)" に置き換
    えてください。

  * "_PyUnicodeWriter_WriteASCIIString()": replace
    "_PyUnicodeWriter_WriteASCIIString(&writer, str, size)" with
    "PyUnicodeWriter_WriteASCII(writer, str, size)".

  * "_PyUnicodeWriter_WriteLatin1String()": replace
    "_PyUnicodeWriter_WriteLatin1String(&writer, str, size)" by
    decoding the string with "PyUnicode_DecodeLatin1()", writing the
    result with "PyUnicodeWriter_WriteStr()", and releasing the result
    with "Py_DECREF()".

  * "_PyUnicodeWriter_Prepare()"：(代替なし)。

  * "_PyUnicodeWriter_PrepareKind()"：(代替なし)。

  * "_Py_HashPointer()"："Py_HashPointer()" を使ってください。

  * "_Py_fopen_obj()"："Py_fopen()" を使ってください。

  pythoncapi-compat プロジェクト を使うと、Python 3.13 以前でもこれら
  の新しい公開関数を利用できます。 (Victor Stinner が gh-128863 で貢献
  しました。)


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

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

* "Py_TPFLAGS_HAVE_FINALIZE"：Python 3.8 以降では不要です。

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

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

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

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

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

* "PySlice_GetIndicesEx()"：代わりに "PySlice_Unpack()" と
  "PySlice_AdjustIndices()" を使ってください。

* "PyUnicode_READY()"：Python 3.12 以降では不要です。

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

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

* "PyBytesObject.ob_shash" メンバー：代わりに "PyObject_Hash()" を呼び
  出してください。

* スレッドローカルストレージ (TLS) API：

  * "PyThread_create_key()": Use "PyThread_tss_alloc()" instead.

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

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

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

  * "PyThread_delete_key_value()": Use "PyThread_tss_delete()"
    instead.

  * "PyThread_ReInitTLS()"：Python 3.7 以降では不要です。


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

* **PEP 776**: Emscripten が **ティア 3** の正式なサポート対象プラット
  フォームになりました。 この取り組みの一環として、Emscripten libc の
  バグを 25 件以上修正しました。 Emscripten が "ctypes"、"termios"、
  "fcntl" をサポートするようになり、新しい デフォルトの対話シェル も実
  験的にサポートするようになりました。 (R. Hood Chatham が gh-127146,
  gh-127683, and gh-136931 で貢献しました。)

* 公式の Android バイナリリリースが python.org で提供されるようになり
  ました。

* "configure" の生成に GNU Autoconf 2.72 が必要になりました。 (Erlend
  Aasland が gh-115765 で貢献しました。)

* "wasm32-unknown-emscripten" が **PEP 11** のティア 3 プラットフォー
  ムになりました。 (R. Hood Chatham が gh-127146, gh-127683, and
  gh-136931 で貢献しました。)

* "#pragma" による "python3*.lib" とのリンクを Py_NO_LINK_LIB で無効に
  できるようになりました。 (Jean-Christophe Fillion-Robin が gh-82909
  で貢献しました。)

* CPython はセキュリティ向上のため、推奨されるコンパイラーオプションの
  組をデフォルトで有効にするようになりました。 無効にするには
  "configure" の "--disable-safety" オプションを使ってください。 性能
  を犠牲にしてさらに多くのコンパイラーオプションを有効にするには、"--
  enable-slower-safety" オプションを使ってください。

* "WITH_FREELISTS" マクロと "configure" の "--without-freelists" オプ
  ションを削除しました。

* "configure" の新しいオプション "--with-tail-call-interp" を使うと、
  実験的な末尾呼び出しインタープリタを有効にできます。 詳しくは 新しい
  インタープリタ を参照してください。

* 新しいリモートデバッグのサポートを無効にするには、"configure" の "--
  without-remote-debug" オプションを使ってください。 セキュリティ上の
  理由で無効にしたい場合に役立ちます。

* iOS および macOS のアプリで、"stdout" と "stderr" の内容をシステムロ
  グにリダイレクトするよう設定できるようになりました。 (Russell Keith-
  Magee が gh-127592 で貢献しました。)

* iOS のテスト環境で、テストの実行中に出力を逐次転送できるようになりま
  した。 また、このテスト環境は CPython 自体以外のプロジェクトのテスト
  スイートを実行するためにも使えます。 (Russell Keith-Magee が
  gh-127592 で貢献しました。)


"build-details.json"
--------------------

Python のインストールに新しいファイル "build-details.json" が含まれる
ようになりました。 これは CPython のビルド情報を含む静的な JSON ドキュ
メントで、コードを実行せずに情報を調べられます。 Python ランチャーやク
ロスコンパイルなどの用途に役立ちます。

"build-details.json" は、プラットフォームに依存しない標準ライブラリの
ディレクトリにインストールしなければなりません。 これは "sysconfig" の
インストールパス 'stdlib' に対応し、"sysconfig.get_path('stdlib')" を
実行して取得できます。

参考:

  **PEP 739** -- "build-details.json" 1.0 -- Python のビルド情報を記述
  する静的なファイル


PGP 署名の提供終了
------------------

Python 3.14 以降のリリースでは PGP (Pretty Good Privacy) 署名を提供し
ません。 CPython の配布物を検証するには、Sigstore の検証資料 を使う必
要があります。 Python 3.11 以降、リリースは Sigstore を使って署名され
ています。

このリリース手順の変更は **PEP 761** で規定されました。


フリースレッド版 Python の正式サポート
--------------------------------------

Python のフリースレッドビルドがサポート対象となり、実験段階ではなくな
りました。 これは、フリースレッド版 Python を正式にサポートしつつ、引
き続き任意の選択肢とする フェーズ II の開始に当たります。

フリースレッド化チームは、このプロジェクトが正しい方向に進んでいると確
信しています。 Python コミュニティ全体でフリースレッド化をより広く採用
できるよう、継続的に尽力してくださっている皆さんに感謝します。

これらの提言とこの PEP の採択を受け、Python 開発者コミュニティは、フリ
ースレッド化が現在も将来もサポートされる Python のビルドオプションであ
り、適切な非推奨の計画なしには削除されないことを広く伝えていくべきです
。

フリースレッド版を Python のデフォルトまたは唯一のビルドとする フェー
ズ III への移行は、まだ決まっていません。 この判断は CPython 自体とコ
ミュニティの双方の多くの要因に左右され、将来に委ねられています。

参考:

  **PEP 779**

  PEP 779 の採択


実験的な JIT コンパイラーを含むバイナリリリース
-----------------------------------------------

macOS と Windows の公式リリースバイナリに、*実験的な* Just-In-Time
(JIT) コンパイラーが含まれるようになりました。 本番環境での使用は **推
奨しません** が、環境変数 "PYTHON_JIT=1" を設定すると試せます。 ソース
からビルドする利用者や再配布者は、設定オプション "--enable-
experimental-jit=yes-off" で同様の動作にできます。

JIT はまだ初期段階にあり、活発に開発が進められています。 そのため、有
効にした場合の典型的な性能変化は、ワークロードに応じて 10% の低速化か
ら 20% の高速化まで幅があります。 テストや評価を助けるため、"sys._jit"
名前空間に状態を調べる関数を用意しました。 "sys._jit.is_available()"
で現在の実行ファイルが JIT コンパイルに対応しているかを調べ、
"sys._jit.is_enabled()" で現在のプロセスで JIT コンパイルが有効になっ
ているかを調べられます。

現在の最も大きな機能上の制約は、"gdb" や "perf" などのネイティブデバッ
ガーやプロファイラーが JIT フレームをたどってスタックを巻き戻せないこ
とです ("pdb" や "profile" などの Python のデバッガーやプロファイラー
は、変更せずに引き続き動作します)。 フリースレッドビルドは JIT コンパ
イルをサポートしていません。

バグや大きな性能低下に遭遇した場合は、ぜひ報告してください。

参考: **PEP 744**


Python 3.14 への移行
====================

このセクションでは前述の変更とバグフィックスにより必要となるかもしれな
いコードの変更を列挙します:


Python API の変更
-----------------

* macOS 以外の Unix プラットフォームでは、"multiprocessing" と
  "ProcessPoolExecutor" のデフォルトの 開始方式 が *fork* から
  *forkserver* に変わりました。

  詳しくは (1) と (2) を参照してください。

  "multiprocessing" や "concurrent.futures" で "NameError" や pickle
  化のエラーが発生する場合は、forkserver の制約 を参照してください。

  この変更は Windows と macOS には影響せず、デフォルトの開始方式は引き
  続き 'spawn' です。

* "functools.partial" がメソッドデスクリプタになりました。 以前の動作
  を保ちたい場合は "staticmethod()" で包んでください。 (Serhiy
  Storchaka and Dominykas Grigonis が gh-121027 で貢献しました。)

* ガベージコレクタがインクリメンタルになった ため、"gc.collect()" の動
  作が少し変わります。

  * "gc.collect(1)": 第 1 世代の回収ではなく、インクリメンタルなガベー
    ジコレクションを 1 回進めます。

  * "gc.collect()" のほかの呼び出しに変更はありません。

* "locale.nl_langinfo()" 関数が、場合によって "LC_CTYPE" ロケールを一
  時的に設定するようになりました。 この一時的な変更は他のスレッドにも
  影響します。 (Serhiy Storchaka が gh-69998 で貢献しました。)

* "pickle.dump()" と "pickle.dumps()" が、一部の失敗に対して
  "PicklingError" を送出するようになりました。 従来は実装によって
  "AttributeError"、"ImportError"、"ValueError"、"UnicodeEncodeError"
  、"PicklingError" が送出されていた失敗です (例えばローカルオブジェク
  トや、所属するモジュールをインポートできないオブジェクトの pickle 化
  など)。 元の例外は "PicklingError" に連鎖されます。 これらの例外を捕
  捉していたコードでは、"PicklingError" も捕捉してください。 (Serhiy
  Storchaka が gh-122311 で貢献しました。)

* "types.UnionType" が "typing.Union" の別名となり、一部の動作が変わり
  ました。 詳しくは 前述の説明 を参照してください。 (Jelle Zijlstra が
  gh-105499 で貢献しました。)

* アノテーションの実行時の動作がさまざまな点で変わりました。 詳しくは
  前述の説明 を参照してください。 アノテーションを扱う大半のコードは引
  き続き動作するはずですが、ドキュメントに記載のない細部の動作は変わっ
  ている場合があります。

* "mimetypes" の CLI の公開に伴い、失敗時の終了ステータスが "0" から
  "1" に、コマンドライン引数が不正な場合の終了ステータスが "1" から
  "2" に変わりました。 エラーメッセージは stderr に出力されるようにな
  りました。

* 正規表現のパターン全体が "\B" の場合、空文字列にもマッチするようにな
  りました。 これにより動作が変わる可能性があります。

* FreeBSD では "sys.platform" にメジャーバージョン番号が含まれなくなり
  ました。


アノテーションの変更 (**PEP 649** と **PEP 749**)
-------------------------------------------------

この節では、アノテーションの遅延評価 に関する変更に伴い、アノテーショ
ンや、それを扱ったり調べたりする Python コードに必要となり得る変更を説
明します。

ほとんどの場合、以前の Python バージョンで動作していたコードを変更する
必要はありません。


アノテーションを付けたコードへの影響
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

例えば静的型チェッカーのためにコードにアノテーションを書いている場合、
この変更はおそらく影響しません。 以前の Python バージョンと同じように
アノテーションを書き続けられます。

前方参照のためによく使われる、アノテーション内の文字列を囲む引用符は取
り除ける可能性があります。 同様に、アノテーションを文字列で書かずに済
むよう "from __future__ import annotations" を使っている場合も、対応す
るバージョンを Python 3.14 以降だけにすれば、そのインポートを削除でき
る可能性があります。 ただし、アノテーションを読み取るサードパーティラ
イブラリに依存している場合は、引用符で囲まないアノテーションを期待どお
りに扱えるよう、そのライブラリ側の変更が必要になるかもしれません。


"__annotations__" を読み取るコードへの影響
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

オブジェクトの "__annotations__" 属性を読み取るコードでは、アノテーシ
ョンの遅延評価に依存するコードに対応するため、変更を加えたほうがよい場
合があります。 例えば、"dataclasses" モジュールが採用したように、
"annotationlib.get_annotations()" を "FORWARDREF" 形式で使う方法があり
ます。

外部パッケージ typing_extensions では、"Format" 列挙型や
"get_annotations()" 関数など、"annotationlib" モジュールの一部の機能の
部分的なバックポートを提供しています。 これらを使うと、Python 3.14 の
新しい動作を活用しながら複数のバージョンに対応するコードを書けます。


関連する変更
~~~~~~~~~~~~

Python 3.14 の変更は、ソースコードにアノテーションを書くコードや
"__annotations__" を読み取るコードへの影響を最小限にしながら、実行時の
"__annotations__" の仕組みを見直すよう設計されています。 しかし、アノ
テーションの動作のうちドキュメントに記載のない細部や、標準ライブラリの
非公開関数に依存している場合、Python 3.14 でコードが動かなくなる原因は
さまざまにあります。 将来の変更の影響を避けるには、"annotationlib" モ
ジュールのドキュメントに記載された機能だけを使ってください。

特に、型オブジェクトの名前空間辞書属性からアノテーションを直接読み取ら
ないでください。 クラスの構築中は
"annotationlib.get_annotate_from_class_namespace()" を、それ以降は
"annotationlib.get_annotations()" を使ってください。

以前のリリースでは、アノテーションが付いたクラスのインスタンスから、ク
ラスのアノテーションにアクセスできる場合がありました。 これはドキュメ
ントに記載されていない偶発的な動作であり、Python 3.14 ではできなくなり
ます。


"from __future__ import annotations"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Python 3.7 で **PEP 563** により導入された future 文 "from __future__
import annotations" は、すべてのアノテーションを文字列に変換します。

しかし、この文は現在非推奨であり、将来の Python バージョンで削除される
見込みです。 アノテーションの遅延評価をサポートしない最後のバージョン
である Python 3.13 が、2029 年にサポート終了を迎えるまでは削除されませ
ん。

Python 3.14 でも、"from __future__ import annotations" を使うコードの
動作は変わりません。


C API の変更
------------

* "Py_Finalize()" がすべてのインターンされた文字列を削除するようになり
  ました。 そのため、"Py_Finalize()" の呼び出し後もインターンされた文
  字列を保持し、その後 "Py_Initialize()" を呼び出して再利用する C 拡張
  に対して、後方互換性のない変更になります。 この動作による問題は通常
  、その後の "Py_Initialize()" の実行中に未初期化メモリへアクセスし、
  クラッシュする形で現れます。 修正するには、AddressSanitizer を使って
  インターンされた文字列に由来する解放後の使用を特定し、モジュール終了
  時にその文字列を解放してください。 (Eddie Elizondo が gh-113601 で貢
  献しました。)

* Unicode 例外オブジェクト の C API は、例外引数が "UnicodeError" オブ
  ジェクトでない場合に "TypeError" を送出するようになりました。
  (Bénédikt Tran が gh-127691 で貢献しました。)

* インタープリタは内部で、可能な場合には参照を *借用* してオペランドス
  タックにオブジェクトを読み込むことで、参照カウントの変更を一部省略し
  ます。 このため、以前の Python バージョンと比べて参照カウントが小さ
  くなる場合があります。 関数の引数が他のコードから参照されていないか
  を判定するために "Py_REFCNT()" が "1" かどうかを調べていた C API 拡
  張では、より安全な代替として
  "PyUnstable_Object_IsUniqueReferencedTemporary()" を使ってください。

* 公開 C API になった非公開関数:

  * "_PyBytes_Join()": "PyBytes_Join()"

  * "_PyLong_IsNegative()": "PyLong_IsNegative()"

  * "_PyLong_IsPositive()": "PyLong_IsPositive()"

  * "_PyLong_IsZero()": "PyLong_IsZero()"

  * "_PyLong_Sign()": "PyLong_GetSign()"

  * "_PyUnicodeWriter_Dealloc()": "PyUnicodeWriter_Discard()"

  * "_PyUnicodeWriter_Finish()": "PyUnicodeWriter_Finish()"

  * "_PyUnicodeWriter_Init()": "PyUnicodeWriter_Create()" を使用

  * "_PyUnicodeWriter_Prepare()": (代替なし)

  * "_PyUnicodeWriter_PrepareKind()": (代替なし)

  * "_PyUnicodeWriter_WriteChar()": "PyUnicodeWriter_WriteChar()"

  * "_PyUnicodeWriter_WriteStr()": "PyUnicodeWriter_WriteStr()"

  * "_PyUnicodeWriter_WriteSubstring()":
    "PyUnicodeWriter_WriteSubstring()"

  * "_PyUnicode_EQ()": "PyUnicode_Equal()"

  * "_PyUnicode_Equal()": "PyUnicode_Equal()"

  * "_Py_GetConfig()": "PyConfig_Get()" と "PyConfig_GetInt()"

  * "_Py_HashBytes()": "Py_HashBuffer()"

  * "_Py_fopen_obj()": "Py_fopen()"

  * "PyMutex_IsLocked()" : "PyMutex_IsLocked()"

  pythoncapi-compat project を使うと、Python 3.13 以前でもこれらの新し
  い関数の大半を利用できます。


3.14.5 の主な変更
=================


gc
--

* 本番環境でメモリ使用量が大幅に増加するという 報告 が複数寄せられたた
  め、Python 3.14.0–3.14.4 に搭載されていたインクリメンタルなガベージ
  コレクタを、3.13 の世代別ガベージコレクタに戻しました。 詳しくは ガ
  ベージコレクション を参照してください。
