What's New In Python 3.12
*************************

編集者:
   Adam Turner

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

参考: **PEP 693** -- Python 3.12 リリーススケジュール


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

Python 3.12 は Python プログラミング言語の安定版リリースで、言語と標準
ライブラリの両方に変更が加えられています。 ライブラリの変更は、非推奨
API の整理、使いやすさ、正確性を重視しています。 特に、"distutils" パ
ッケージが標準ライブラリから削除されました。 "os" と "pathlib" のファ
イルシステムへの対応がさまざまな点で改善され、いくつかのモジュールの性
能も向上しています。

言語の変更は使いやすさを重視しており、*f 文字列* の多くの制限が取り除
かれ、'Did you mean ...' という候補の提示も引き続き改善されています。
新しい 型引数の構文 と "type" 文により、静的型チェッカーで *ジェネリッ
ク型* と *型エイリアス* を使いやすくなりました。

この記事は全ての新機能の完全な仕様を提供しようとするものではなく、便利
な概要について説明をするものです。 全詳細については、 ライブラリリファ
レンス や 言語リファレンス などのドキュメントを参照してください。 変更
の実装や設計原理について完全に理解したい場合は、特定の新機能の PEP を
参照してください。 しかし、一旦機能が完全に実装されると、普通 PEP は最
新の状態に保たれないことに注意してください。

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

新たな構文機能:

* PEP 695, 型パラメータの構文と "type" 文

新たな文法機能:

* PEP 701, 文法の中の *f-strings*

インタープリタの改善:

* PEP 684, インタープリタごとのユニークな *GIL*

* PEP 669, 低影響なモニタリング

* "NameError", "ImportError", "SyntaxError" 例外に対する 'Did you mean
  ...' サジェストを改善 しました

Python のデータモデルの改善:

* PEP 688、Python から バッファプロトコル を利用

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

* "pathlib.Path" クラスがサブクラス化をサポートするようになりました

* "os" モジュールは Windows サポートのためにいくつかの改良が加えられま
  した

* "sqlite3" モジュールに コマンドライン・インターフェース が追加されま
  した

* "runtime-checkable プロトコル" に対する "isinstance()" のチェックは
  、2倍～20倍のスピードアップを実現します

* "asyncio" パッケージは多くのパフォーマンスを向上させ、いくつかのベン
  チマークでは75%のスピードアップを示しました。

* "uuid" モジュールに コマンドライン・インターフェース が追加されまし
  た

* PEP 701 の変更により、 "tokenize" モジュールによるトークンの生成は最
  大で64%速くなりました。

セキュリティの改善:

* "hashlib" に組み込まれた SHA1、SHA3、SHA2-384、SHA2-512、MD5 の実装
  を、HACL* プロジェクトの形式的に検証されたコードで置き換えました。
  これらの組み込み実装は、OpenSSL が該当する実装を提供していない場合に
  だけ使われる代替実装として残ります。

C API の改善:

* PEP 697, 不安定な C API 層

* PEP 683、不死オブジェクト

CPython の実装の改善:

* PEP 709, 内包表記のインライン化

* Linux "perf" プロファイラの CPython サポート

* サポートされているプラットフォームでスタック・オーバーフロー保護を実
  装します

新しい型ヒントの機能:

* PEP 692, "TypedDict" を使用して ***kwargs* をアノテートします

* PEP 698、"@typing.override" デコレータ

重要な非推奨化、削除または制限:

* **PEP 623**: Python の C API の Unicode オブジェクトから "wstr" を削
  除し、全ての "str" オブジェクトのサイズを少なくとも 8 バイト減らしま
  す

* **PEP 632**: "distutils" パッケージを削除しました。 提供されていた
  API の置き換えについては **移行ガイド** を参照してください。 Python
  3.12 以降でも "distutils" が必要な場合は、引き続きこれを提供するサー
  ドパーティパッケージ Setuptools を利用できます。

* gh-95299: "venv" で作成する仮想環境に "setuptools" をプリインストー
  ルしなくなりました。 そのため、"distutils"、"setuptools"、
  "pkg_resources"、"easy_install" はデフォルトでは利用できなくなります
  。 これらを使うには、有効化した 仮想環境で "pip install setuptools"
  を実行してください。

* "asynchat", "asyncore", "imp" モジュールが、いくつかの
  "unittest.TestCase" メソッドのエイリアス と共に削除されました。


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


PEP 695: 型パラメータの構文
---------------------------

**PEP 484** に基づくジェネリッククラスやジェネリック関数の宣言では、型
引数のスコープが不明瞭で、変性を明示的に宣言する必要のある冗長な構文を
使っていました。

**PEP 695** は ジェネリッククラス と 関数 を作成するための、よりコンパ
クトで明示的な新しい方法を紹介します:

   def max[T](args: Iterable[T]) -> T:
       ...

   class list[T]:
       def __getitem__(self, index: int, /) -> T:
           ...

       def append(self, element: T) -> None:
           ...

さらに、 PEP では 型エイリアス を宣言する新しい方法が導入されました。
"type" 文を使用し、 "TypeAliasType" のインスタンスを作成します:

   type Point = tuple[float, float]

型エイリアスは ジェネリック とすることもできます:

   type Point[T] = tuple[T, T]

新しい構文では、"TypeVarTuple" と "ParamSpec" のパラメータに加えて、上
限や制約を持つ "TypeVar" パラメータを宣言できます。

   type IntFunc[**P] = Callable[P, int]  # ParamSpec
   type LabeledTuple[*Ts] = tuple[str, *Ts]  # TypeVarTuple
   type HashableSequence[T: Hashable] = Sequence[T]  # 上限を持つ TypeVar
   type IntOrStrSequence[T: (int, str)] = Sequence[T]  # 制約を持つ TypeVar

この構文で作成された型エイリアスの値や型変数の境界や制約はオンデマンド
で評価されます (遅延評価 を参照してください)。つまり、型エイリアスはフ
ァイルの後半で定義された他の型を参照することができます。

型引数リストで宣言した型引数は、宣言のスコープとその内側のスコープで参
照でき、外側のスコープでは参照できません。 例えば、ジェネリッククラス
のメソッドの型アノテーションやクラス本体で使えますが、クラス定義後のモ
ジュールスコープでは使えません。 型引数の実行時の意味について詳しくは
型パラメータリスト を参照してください。

このようなスコープの規則を実現するため、アノテーションスコープ という
新しい種類のスコープを導入しました。 アノテーションスコープはほとんど
の点で関数スコープと同じように動作しますが、外側のクラススコープとの関
係が異なります。 Python 3.13 では *アノテーション* もアノテーションス
コープで評価されます。

より詳しくは **PEP 695** を参照してください。

(PEP は Eric Traut によって作成されました。実装は Jelle Zijlstra, Eric
Traut らによって gh-103764 で行われました。)


PEP 701: f-strings の構文的な形式化
-----------------------------------

**PEP 701** により *f 文字列* の使用上の制限がいくつか取り除かれました
。 f 文字列内の式には、正しい Python 式であれば何でも使えるようになり
ました。 例えば、外側の f 文字列と同じ引用符を使う文字列、複数行の式、
コメント、バックスラッシュ、Unicode エスケープシーケンスなどを含められ
ます。 以下で詳しく説明します。

* クォートの再利用: Python 3.11 では、 f-string を囲むクォートと同じク
  ォートを再利用すると "SyntaxError" が発生し、ユーザーは他の利用可能
  なクォート( f-string がシングルクォートを使用している場合に、ダブル
  クオートまたはトリプルクォートを使用するなど)を使用する必要がありま
  す。 Python 3.12 では次のようなことができるようになりました:

  >>> songs = ['Take me back to Eden', 'Alkaline', 'Ascensionism']
  >>> f"This is the playlist: {", ".join(songs)}"
  'This is the playlist: Take me back to Eden, Alkaline, Ascensionism'

  この変更以前は、 f-string のネスト方法に明示的な制限はありませんでし
  たが、 f-string の式コンポーネント内で文字列引用符を再利用できないと
  いう事実により、 f-string を任意にネストすることが不可能になったこと
  に注意してください。実際、これは記述できる中で最もネストされた
  f-string です。

  >>> f"""{f'''{f'{f"{1+1}"}'}'''}"""
  '2'

  f-string には式コンポーネント内に任意の有効な Python 式を含めること
  ができるため、 f-string を任意にネストできるようになりました。

  >>> f"{f"{f"{f"{f"{f"{1+1}"}"}"}"}"}"
  '2'

* 複数行の式とコメント: Python 3.11 では、f 文字列内の式は 1 行に書く
  必要がありました。 通常なら複数行にまたがって書ける式 (複数行に分け
  たリストリテラルなど) でもそうする必要があり、読みにくくなっていまし
  た。 Python 3.12 では、複数行にまたがる f 文字列を定義し、インライン
  コメントも追加できます。

  >>> f"This is the playlist: {", ".join([
  ...     'Take me back to Eden',  # My, my, those eyes like fire
  ...     'Alkaline',              # Not acid nor alkaline
  ...     'Ascensionism'           # Take to the broken skies at last
  ... ])}"
  'This is the playlist: Take me back to Eden, Alkaline, Ascensionism'

* バックスラッシュと Unicode 文字: Python 3.12 より前は、f 文字列内の
  式に "\" を含められませんでした。 これは Unicode の エスケープシーケ
  ンス ("\N{snowman}" など) にも影響していました。 こうしたエスケープ
  シーケンスには、従来 f 文字列内の式で使えなかった "\N" が含まれるた
  めです。 次のような式を定義できるようになりました。

  >>> print(f"This is the playlist: {"\n".join(songs)}")
  This is the playlist: Take me back to Eden
  Alkaline
  Ascensionism
  >>> print(f"This is the playlist: {"\N{BLACK HEART SUIT}".join(songs)}")
  This is the playlist: Take me back to Eden♥Alkaline♥Ascensionism

より詳しくは **PEP 701** を参照してください。

この機能を **PEG パーサ** で f 文字列を解析する形で実装したことにより
、エラーメッセージも改善されました。 f 文字列のエラーメッセージがより
正確になり、エラーの正確な位置も表示されます。 例えば Python 3.11 では
、次の f 文字列が "SyntaxError" を送出します。

   >>> my_string = f"{x z y}" + f"{1 + 1}"
     File "<stdin>", line 1
       (x z y)
        ^^^
   SyntaxError: f-string: invalid syntax. Perhaps you forgot a comma?

しかし、エラーメッセージは行内の正確なエラーの位置を含まず、また式が人
為的に括弧で囲まれています。 Python 3.12 では、 f-string は PEG パーサ
で解析されるため、エラーメッセージはより正確になり、行全体が表示されま
す:

   >>> my_string = f"{x z y}" + f"{1 + 1}"
     File "<stdin>", line 1
       my_string = f"{x z y}" + f"{1 + 1}"
                      ^^^
   SyntaxError: invalid syntax. Perhaps you forgot a comma?

(Pablo Galindo、Batuhan Taskaya、Lysandros Nikolaou、Cristián
Maureira-Fredes、Marta Gómez が gh-102856 で貢献しました。 PEP は
Pablo Galindo、Batuhan Taskaya、Lysandros Nikolaou、Marta Gómez が執筆
しました)。


PEP 684: インタープリタごとの GIL
---------------------------------

**PEP 684** ではインタープリタごとの *GIL* が導入され、インタープリタ
ごとの固有の GIL を使用してサブインタープリタを作成できるようになりま
した。これにより、 Python プログラムは複数の CPU コアを最大限に活用で
きるようになります。これは現在 C-API を通じてのみ利用できますが、
Python API は **3.13** で利用可能になる予定です。

独自の GIL を持つインタープリタを作成するには、新しい
"Py_NewInterpreterFromConfig()" 関数を使います:

   PyInterpreterConfig config = {
       .check_multi_interp_extensions = 1,
       .gil = PyInterpreterConfig_OWN_GIL,
   };
   PyThreadState *tstate = NULL;
   PyStatus status = Py_NewInterpreterFromConfig(&tstate, &config);
   if (PyStatus_Exception(status)) {
       return -1;
   }
   /* 新しいインタープリタが現在のスレッドでアクティブになりました。 */

インタープリタごとの GIL を持つサブインタープリタ向け C API の使用例に
ついては、"Modules/_xxsubinterpretersmodule.c" も参照してください。

(寄稿: Eric Snow, gh-104210 ほか)


PEP 669: CPython の低影響モニタリング
-------------------------------------

**PEP 669** は、プロファイラーやデバッガーなどのツールが CPython のイ
ベントを監視するための新しい "API" を定義します。 呼び出し、リターン、
行の実行、例外、ジャンプなど、幅広いイベントを扱います。 使った機能の
分だけコストがかかるため、オーバーヘッドがほぼゼロのデバッガーやカバレ
ッジツールを実現できます。 詳しくは "sys.monitoring" を参照してくださ
い。

(Mark Shannon による gh-103082 での貢献)


PEP 688: バッファプロトコルを Python で利用可能にする
-----------------------------------------------------

**PEP 688** は Python のコードから バッファプロトコル を利用する方法を
導入します。 "__buffer__()" メソッドを実装するクラスは今やバッファ型と
して利用可能です。

新しい ABC "collections.abc.Buffer" は、例えば型アノテーションでバッフ
ァオブジェクトを表す標準的な方法を提供します。 新しい列挙型
"inspect.BufferFlags" は、バッファの作成方法を調整するフラグを表します
。 (Jelle Zijlstra が gh-102500 で貢献しました。)


PEP 709: 内包表記のインライン化
-------------------------------

辞書、リスト、そして集合の内包表記は今やインライン化され、内包表記の毎
回の実行の度に一度しか使われない関数オブジェクトが新規作成されることは
なくなります。これにより内包表記の実行は最大２倍速くなります。詳しくは
**PEP 709** を参照してください。

内包表記の反復変数は引き続き独立しており、外側のスコープの同名の変数を
上書きせず、内包表記の後からも参照できません。 ただし、インライン化に
より外から見える動作がいくつか変わります。

* トレースバックに内包表記専用のフレームが表示されなくなり、トレースや
  プロファイリングでも内包表記が関数呼び出しとして表示されなくなりまし
  た。

* "symtable" モジュールが内包表記ごとの子シンボルテーブルを生成しなく
  なりました。 代わりに、内包表記のローカル変数は親関数のシンボルテー
  ブルに含まれます。

* 内包表記の中で "locals()" を呼び出すと、内包表記の外側の変数も含まれ
  るようになりました。 また、内包表記の「引数」のために生成されていた
  変数 ".0" は含まれなくなりました。

* "locals()" を直接反復する内包表記 (例えば "[k for k in locals()]")
  は、トレース下で実行すると (コードカバレッジ測定など)、
  "RuntimeError: dictionary changed size during iteration" になる場合
  があります。 これは "for k in locals():" などでも既に見られる動作と
  同じです。 このエラーを避けるには、先に反復するキーのリストを作成し
  てください: "keys = list(locals()); [k for k in keys]"。

(Carl Meyer and Vladimir Matveev が **PEP 709** で貢献しました。)


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

* "NameError" がトップレベルまで伝播した際にインタープリタが表示するエ
  ラーメッセージで、標準ライブラリのモジュールが候補として提示されるよ
  うになりました。 (Pablo Galindo が gh-98254 で貢献しました。)

  >>> sys.version_info
  Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
  NameError: name 'sys' is not defined. Did you forget to import 'sys'?

* インスタンスに関する "NameError" 例外の候補提示を改善しました。 メソ
  ッドで "NameError" が送出され、例外中の名前と完全に一致する属性をイ
  ンスタンスが持つ場合、メソッドのスコープで最も近い名前の代わりに
  "self.<NAME>" を候補として提示するようになりました。 (Pablo Galindo
  が gh-99139 で貢献しました。)

  >>> class A:
  ...    def __init__(self):
  ...        self.blech = 1
  ...
  ...    def foo(self):
  ...        somethin = blech
  ...
  >>> A().foo()
  Traceback (most recent call last):
    File "<stdin>", line 1
      somethin = blech
                 ^^^^^
  NameError: name 'blech' is not defined. Did you mean: 'self.blech'?

* "from y import x" の代わりに "import x from y" と入力した場合の
  "SyntaxError" のエラーメッセージを改善しました。 (Pablo Galindo が
  gh-98931 で貢献しました。)

  >>> import a.y.z from b.y.z
  Traceback (most recent call last):
    File "<stdin>", line 1
      import a.y.z from b.y.z
      ^^^^^^^^^^^^^^^^^^^^^^^
  SyntaxError: Did you mean to use 'from ... import ...' instead?

* "from <module> import <name>" 文の失敗時に送出される "ImportError"
  例外で、"<module>" 内の利用可能な名前に基づき "<name>" の候補を提示
  するようになりました。 (Pablo Galindo が gh-91058 で貢献しました。)

  >>> from collections import chainmap
  Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
  ImportError: cannot import name 'chainmap' from 'collections'. Did you mean: 'ChainMap'?


型ヒントに関連する新しい機能
============================

この節では、**型ヒント** と "typing" モジュールに関わる主な変更を説明
します。


PEP 692: "TypedDict" を使った、より正確な "**kwargs" の型付け
-------------------------------------------------------------

**PEP 484** で導入された関数シグネチャ内の "**kwargs" の型付けでは、す
べての "**kwargs" が同じ型である場合にしか適切なアノテーションを付けら
れませんでした。

**PEP 692** は、型付き辞書を使って "**kwargs" をより正確に型付けする方
法を規定します。

   from typing import TypedDict, Unpack

   class Movie(TypedDict):
     name: str
     year: int

   def foo(**kwargs: Unpack[Movie]): ...

より詳しくは **PEP 692** を参照してください。

(Franek Magiera が gh-103629 で貢献しました。)


PEP 698: 静的型付けのための override デコレータ
-----------------------------------------------

"typing" モジュールに新しいデコレータ "@typing.override" を追加しまし
た。 メソッドがスーパークラスのメソッドをオーバーライドする意図である
ことを型チェッカーに伝えます。 これにより、基底クラスのメソッドをオー
バーライドするつもりが、実際にはそうなっていないという間違いを型チェッ
カーが検出できます。

以下はプログラム例です:

   from typing import override

   class Base:
     def get_color(self) -> str:
       return "blue"

   class GoodChild(Base):
     @override  # OK: Base.get_color をオーバーライドする
     def get_color(self) -> str:
       return "yellow"

   class BadChild(Base):
     @override  # 型チェッカーのエラー: Base.get_color をオーバーライドしていない
     def get_colour(self) -> str:
       return "red"

詳細は **PEP 698** を参照してください。

(Steven Troxler が gh-101561 で貢献しました。)


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

* パーサが、ヌルバイトを含むソースコードを解析する際に "SyntaxError"
  を送出するようになりました。 (Pablo Galindo が gh-96670 で貢献しまし
  た。)

* バックスラッシュとそれに続く文字が有効なエスケープシーケンスでない場
  合、"DeprecationWarning" の代わりに "SyntaxWarning" が出るようになり
  ました。 例えば "re.compile("\d+\.\d+")" は "SyntaxWarning" を出しま
  す (""\d"" は無効なエスケープシーケンスなので、正規表現には
  "re.compile(r"\d+\.\d+")" のように raw 文字列を使ってください)。 将
  来の Python バージョンでは、"SyntaxWarning" の代わりに "SyntaxError"
  が送出されるようになります。 (Victor Stinner が gh-98401 で貢献しま
  した。)

* Python 3.11 で非推奨になった、値が "0o377" より大きい 8 進エスケープ
  (""\477"" など) は、"DeprecationWarning" の代わりに "SyntaxWarning"
  を出すようになりました。 将来の Python バージョンでは "SyntaxError"
  になります。 (Victor Stinner が gh-98401 で貢献しました。)

* 内包表記の代入先部分で使われていても、その変数自体には代入されない変
  数は、代入式 (":=") で使えるようになりました。 例えば "[(b := 1) for
  a, b.prop in some_iter]" で、"b" への代入が認められるようになりまし
  た。 ただし、内包表記の代入先部分で実際に代入される変数 ("a" など)
  への代入は、**PEP 572** に従い引き続き禁止されています。 (Nikita
  Sobolev が gh-100581 で貢献しました。)

* クラスや型の "__set_name__" メソッドで送出された例外が、
  "RuntimeError" で包まれなくなりました。 状況に関する情報は **PEP
  678** の注記として例外に追加されます。 (Irit Katriel が gh-77757 で
  貢献しました。)

* "try-except*" 構文で "ExceptionGroup" 全体を処理し、別の例外を 1 つ
  送出した場合、その例外が "ExceptionGroup" で包まれなくなりました。
  この変更はバージョン 3.11.4 にも適用されています。 (Irit Katriel が
  gh-103590 で貢献しました。)

* ガベージコレクタは、オブジェクトの割り当て時ではなく、Python のバイ
  トコード評価ループの eval breaker の仕組みによってのみ実行されるよう
  になりました。 "PyErr_CheckSignals()" の呼び出し時にも GC を実行でき
  るため、Python コードを実行せず長時間動作する必要のある C 拡張にも、
  定期的に GC を実行する機会があります。 (Pablo Galindo が gh-97922 で
  貢献しました。)

* 真偽値の引数を取るすべての組み込みおよび拡張の呼び出し可能オブジェク
  トが、"bool" と "int" だけでなく、任意の型の引数を受け付けるようにな
  りました。 (Serhiy Storchaka が gh-60203 で貢献しました。)

* "memoryview" が半精度浮動小数点型 (書式コード "e") をサポートするよ
  うになりました。 (Donghee Na and Antoine Pitrou が gh-90751 で貢献し
  ました。)

* "slice" objects are now hashable, allowing them to be used as dict
  keys and set items. (Contributed by Will Bradshaw, Furkan Onder, and
  Raymond Hettinger in gh-101264.)

* "sum()" は、浮動小数点数の和や、整数と浮動小数点数が混在する和の精度
  と可換性を改善するため、Neumaier の加算アルゴリズムを使うようになり
  ました。 (Raymond Hettinger が gh-100425 で貢献しました。)

* "ast.parse()" は、ヌルバイトを含むソースコードを解析する際に
  "ValueError" の代わりに "SyntaxError" を送出するようになりました。
  (Pablo Galindo が gh-96670 で貢献しました。)

* "tarfile" の展開用メソッドと "shutil.unpack_archive()" に、新しい
  *filter* 引数を追加しました。 展開先ディレクトリの外にファイルを作成
  するなど、予想外の動作や危険をもたらす可能性のある tar の機能を制限
  できます。 詳しくは tarfile の展開フィルター を参照してください。
  Python 3.14 ではデフォルトが "'data'" に変わります。 (Petr Viktorin
  が **PEP 706** で貢献しました。)

* 基となるマッピングがハッシュ可能な場合、"types.MappingProxyType" の
  インスタンスもハッシュ可能になりました。 (Serhiy Storchaka が
  gh-87995 で貢献しました。)

* 新しい環境変数 "PYTHONPERFSUPPORT" とコマンドラインオプション "-X
  perf"、および新しい関数 "sys.activate_stack_trampoline()"、
  "sys.deactivate_stack_trampoline()"、
  "sys.is_stack_trampoline_active()" により、perf プロファイラーへの対
  応 を追加しました。 (Pablo Galindo が設計しました。 Pablo Galindo と
  Christian Heimes が、Gregory P. Smith [Google] と Mark Shannon の協
  力を得て gh-96123 で貢献しました。)


新たなモジュール
================

* ありません。


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


array
-----

* "array.array" クラスが添字指定をサポートし、*ジェネリック型* になり
  ました。 (Jelle Zijlstra が gh-98658 で貢献しました。)


asyncio
-------

* "asyncio" のソケットへの書き込み性能が大幅に向上しました。 "asyncio"
  はソケットに書き込む際の不要なコピーを避け、プラットフォームが対応し
  ていれば "sendmsg()" を使うようになりました。 (Kumar Aditya が
  gh-91166 で貢献しました。)

* イベントループでタスクの即時実行を選択できる
  "asyncio.eager_task_factory()" 関数と
  "asyncio.create_eager_task_factory()" 関数を追加しました。 一部の用
  途で 2 倍から 5 倍高速になります。 (Jacob Bower と Itamar Oren が
  gh-102853、gh-104140、gh-104138 で貢献しました。)

* Linux で "os.pidfd_open()" が利用可能で正常に機能する場合、"asyncio"
  はデフォルトで "asyncio.ThreadedChildWatcher" の代わりに
  "asyncio.PidfdChildWatcher" を使うようになりました。 (Kumar Aditya
  が gh-98024 で貢献しました。)

* イベントループが、各プラットフォームで利用できる最適な子プロセスウォ
  ッチャー (対応していれば "asyncio.PidfdChildWatcher"、そうでなければ
  "asyncio.ThreadedChildWatcher") を使うようになったため、子プロセスウ
  ォッチャーを手動で設定することは推奨されません。 (Kumar Aditya が
  gh-94597 で貢献しました。)

* "asyncio.run()" に *loop_factory* 引数を追加し、独自のイベントループ
  ファクトリーを指定できるようにしました。 (Kumar Aditya が gh-99388
  で貢献しました。)

* "asyncio.current_task()" の C 実装を追加し、4 倍から 6 倍高速化しま
  した。 (Itamar Oren and Pranav Thulasiram Bhat が gh-100344 で貢献し
  ました。)

* "asyncio" が従来のジェネレータベースのコルーチンをサポートしていない
  ため、"asyncio.iscoroutine()" はジェネレータに対して "False" を返す
  ようになりました。 (Kumar Aditya が gh-102748 で貢献しました。)

* "asyncio.wait()" と "asyncio.as_completed()" が、タスクを yield する
  ジェネレータを受け付けるようになりました。 (Kumar Aditya が gh-78530
  で貢献しました。)


calendar
--------

* 月と曜日を定義する列挙型 "calendar.Month" と "calendar.Day" を追加し
  ました。 (Prince Roshan が gh-103636 で貢献しました。)


csv
---

* "reader" オブジェクトと "writer" オブジェクトによる "None" と空文字
  列の扱いをより細かく制御するため、"csv.QUOTE_NOTNULL" フラグと
  "csv.QUOTE_STRINGS" フラグを追加しました。


dis
---

* 擬似命令のオペコード (コンパイラーで使われるものの、実行可能なバイト
  コードには現れないもの) が "dis" モジュールで公開されました。
  "HAVE_ARGUMENT" は実際のオペコードでは引き続き意味がありますが、擬似
  命令には役立ちません。 代わりに、新しい "dis.hasarg" コレクションを
  使ってください。 (Irit Katriel が gh-94216 で貢献しました。)

* 例外ハンドラーを設定する命令を示す "dis.hasexc" コレクションを追加し
  ました。 (Irit Katriel が gh-94216 で貢献しました。)


fractions
---------

* "fractions.Fraction" 型のオブジェクトが、浮動小数点数と同じ形式の書
  式化をサポートするようになりました。 (Mark Dickinson が gh-100161 で
  貢献しました。)


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

* "importlib.resources.as_file()" がリソースディレクトリをサポートする
  ようになりました。 (Jason R. Coombs が gh-97930 で貢献しました。)

* "importlib.resources.files()" の最初の引数の名前を *anchor* に変更し
  ました。 (Jason R. Coombs が gh-100598 で貢献しました。)


inspect
-------

* *コルーチン* を返す同期関数に印を付け、
  "inspect.iscoroutinefunction()" で判定できるようにする
  "inspect.markcoroutinefunction()" を追加しました。 (Carlton Gibson
  が gh-99247 で貢献しました。)

* 非同期ジェネレータの現在の状態を調べる "inspect.getasyncgenstate()"
  と "inspect.getasyncgenlocals()" を追加しました。 (Thomas
  Krennwallner が gh-79940 で貢献しました。)

* "inspect.getattr_static()" の性能が大幅に向上しました。 ほとんどの呼
  び出しで、Python 3.11 に比べて少なくとも 2 倍高速になるはずです。
  (Alex Waygood が gh-103193 で貢献しました。)


itertools
---------

* 要素を同じ大きさのタプルにまとめる "itertools.batched()" を追加しま
  した。 最後のバッチは他より短くなる場合があります。 (Raymond
  Hettinger が gh-98363 で貢献しました。)


math
----

* 積の和を計算する "math.sumprod()" を追加しました。 (Raymond
  Hettinger が gh-100485 で貢献しました。)

* "math.nextafter()" に *steps* 引数を追加し、一度に複数ステップ上下に
  移動できるようにしました。 (Matthias Goergens, Mark Dickinson, and
  Raymond Hettinger が gh-94906 で貢献しました。)


os
--

* "os.pidfd_open()" でプロセスのファイル記述子を非ブロッキングモードで
  開くための "os.PIDFD_NONBLOCK" を追加しました。 (Kumar Aditya が
  gh-93312 で貢献しました。)

* "os.DirEntry" に、エントリーがジャンクションかどうかを調べる
  "os.DirEntry.is_junction()" メソッドを追加しました。 (Charles
  Machalow が gh-99547 で貢献しました。)

* Windows でドライブ、ボリューム、マウントポイントを列挙する
  "os.listdrives()"、"os.listvolumes()"、"os.listmounts()" 関数を追加
  しました。 (Steve Dower が gh-102519 で貢献しました。)

* Windows で "os.stat()" と "os.lstat()" の結果がより正確になりました
  。 "st_birthtime" フィールドにはファイルの作成時刻が格納されるように
  なりました。 "st_ctime" は非推奨ですが、引き続き作成時刻が格納されま
  す (将来は他のプラットフォームとの一貫性のため、メタデータの最終変更
  時刻を返すようになります)。 ファイルシステムによっては "st_dev" が最
  大 64 ビット、"st_ino" が最大 128 ビットになり、"st_rdev" には誤った
  値ではなく常にゼロが設定されます。 新しい Windows リリースでは、どち
  らの関数も大幅に高速になる可能性があります。 (Steve Dower が
  gh-99726 で貢献しました。)


os.path
-------

* 指定したパスがジャンクションかどうかを調べる "os.path.isjunction()"
  を追加しました。 (Charles Machalow が gh-99547 で貢献しました。)

* パスを 3 つ組 "(drive, root, tail)" に分割する "os.path.splitroot()"
  を追加しました。 (Barney Gale が gh-101000 で貢献しました。)


pathlib
-------

* "pathlib.PurePath" と "pathlib.Path"、およびそれらの Posix 向け・
  Windows 向けのクラスが、サブクラス化をサポートするようになりました。
  サブクラスでは "pathlib.PurePath.with_segments()" メソッドをオーバー
  ライドして、パスのインスタンス間で情報を引き継げます。

* "os.walk()" と同様にディレクトリツリーを走査して、その中のすべてのフ
  ァイル名やディレクトリ名を生成する "pathlib.Path.walk()" を追加しま
  した。 (Stanislav Zmiev が gh-90385 で貢献しました。)

* "pathlib.PurePath.relative_to()" に省略可能な *walk_up* 引数を追加し
  、結果に ".." を挿入できるようにしました。 この動作は
  "os.path.relpath()" により近いものです。 (Domenico Ragusa が
  gh-84538 で貢献しました。)

* "os.path.isjunction()" の処理を呼び出す "pathlib.Path.is_junction()"
  を追加しました。 (Charles Machalow が gh-99547 で貢献しました。)

* "pathlib.Path.glob()"、"pathlib.Path.rglob()"、
  "pathlib.PurePath.match()" に省略可能な *case_sensitive* 引数を追加
  しました。 パスの大文字・小文字を区別するかどうかを指定し、マッチ処
  理をより正確に制御できます。


platform
--------

* Windows 11 と Windows Server 2012 より後のリリースの検出をサポートし
  ました。 従来、Windows Server 2012 より新しい Windows Server や
  Windows 11 では、調べると "Windows-10" が返されていました。 (Steve
  Dower が gh-89545 で貢献しました。)


pdb
---

* デバッグセッション中に値を一時的に保持し、現在のフレームや戻り値など
  へ素早くアクセスできるコンビニエンス変数を追加しました。 (Tian Gao
  が gh-103693 で貢献しました。)


random
------

* "random.binomialvariate()" を追加しました。 (Raymond Hettinger が
  gh-81620 で貢献しました。)

* "random.expovariate()" にデフォルト値 "lambd=1.0" を追加しました。
  (Raymond Hettinger が gh-100234 で貢献しました。)


shutil
------

* "shutil.make_archive()" は、対応している独自のアーカイバーに
  *root_dir* 引数を渡すようになりました。 この場合、アーカイブ作成のた
  めにプロセスの現在の作業ディレクトリを一時的に *root_dir* に変更する
  ことはなくなりました。 (Serhiy Storchaka が gh-74696 で貢献しました
  。)

* "shutil.rmtree()" が新しい引数 *onexc* を受け付けるようになりました
  。 *onerror* と同様のエラーハンドラーですが、*(typ, val, tb)* という
  3 つ組の代わりに例外インスタンスを受け取ります。 *onerror* は非推奨
  になりました。 (Irit Katriel が gh-102828 で貢献しました。)

* Windows で "shutil.which()" が *PATH* 内の一致するファイルを探す際に
  、指定された *cmd* にディレクトリ部分が含まれる場合でも、環境変数
  *PATHEXT* を参照するようになりました。 (Charles Machalow が
  gh-103179 で貢献しました。)

  "shutil.which()" は Windows で実行ファイルを探す際に
  "NeedCurrentDirectoryForExePathW" を呼び出し、現在の作業ディレクトリ
  を検索パスの先頭に追加すべきかを判断するようになりました。 (Charles
  Machalow が gh-103179 で貢献しました。)

  Windows で "shutil.which()" は、検索パスの他の場所にある *cmd* その
  ものと一致するパスよりも、"PATHEXT" の要素を *cmd* に付けて一致する
  パスを優先して返すようになりました。 (Charles Machalow が gh-103179
  で貢献しました。)


sqlite3
-------

* コマンドラインインターフェース を追加しました。 (Erlend E. Aasland
  が gh-77617 で貢献しました。)

* "sqlite3.Connection" に "sqlite3.Connection.autocommit" 属性を、
  "sqlite3.connect()" に *autocommit* 引数を追加しました。 **PEP 249**
  に準拠した トランザクション処理 を制御できます。 (Erlend E. Aasland
  が gh-83638 で貢献しました。)

* "sqlite3.Connection.load_extension()" にキーワード専用引数
  *entrypoint* を追加し、SQLite 拡張のエントリーポイントを指定して上書
  きできるようにしました。 (Erlend E. Aasland が gh-103015 で貢献しま
  した。)

* "sqlite3.Connection" に、データベース接続の設定を変更する
  "sqlite3.Connection.getconfig()" と "sqlite3.Connection.setconfig()"
  を追加しました。 (Erlend E. Aasland が gh-103489 で貢献しました。)


statistics
----------

* "statistics.correlation()" に "ranked" という計算方法を追加し、順位
  データのスピアマンの相関係数を計算できるようにしました。 (Raymond
  Hettinger が gh-95861 で貢献しました。)


sys
---

* PEP 669 の新しいモニタリング API を公開する "sys.monitoring" 名前空
  間を追加しました。 (Mark Shannon が gh-103082 で貢献しました。)

* スタックプロファイラーのトランポリンを有効・無効にする
  "sys.activate_stack_trampoline()" と
  "sys.deactivate_stack_trampoline()"、および有効かどうかを調べる
  "sys.is_stack_trampoline_active()" を追加しました。 (Pablo Galindo
  and Christian Heimes with contributions from Gregory P. Smith
  [Google] and Mark Shannon が gh-96123 で貢献しました。)

* 最後に送出されて未処理となった例外を保持する "sys.last_exc" を追加し
  ました (事後デバッグ用)。 同じ情報を従来の形式で保持していた 3 つの
  フィールド、"sys.last_type"、"sys.last_value"、"sys.last_traceback"
  は非推奨になりました。 (Irit Katriel が gh-102778 で貢献しました。)

* "sys._current_exceptions()" が、スレッド ID から "(typ, exc, tb)" タ
  プルへのマッピングではなく、例外インスタンスへのマッピングを返すよう
  になりました。 (Irit Katriel が gh-103176 で貢献しました。)

* "sys.setrecursionlimit()" と "sys.getrecursionlimit()" の再帰上限は
  、Python コードだけに適用されるようになりました。 組み込み関数はこの
  再帰上限を使わず、再帰による仮想マシンのクラッシュを防ぐ別の仕組みで
  保護されます。


tempfile
--------

* "tempfile.NamedTemporaryFile" 関数に、省略可能な引数
  *delete_on_close* を追加しました。 (Evgeny Zorin が gh-58451 で貢献
  しました。)

* "tempfile.mkdtemp()" は、*dir* 引数に相対パスを渡した場合でも、常に
  絶対パスを返すようになりました。


threading
---------

* 呼び出し元だけでなく、実行中のすべてのスレッドにトレース関数やプロフ
  ァイル関数を設定する "threading.settrace_all_threads()" と
  "threading.setprofile_all_threads()" を追加しました。 (Pablo Galindo
  が gh-93503 で貢献しました。)


tkinter
-------

* "tkinter.Canvas.coords()" が引数の入れ子を平坦化するようになりました
  。 座標を個別の引数 ("x1, y1, x2, y2, ...") やシーケンス ("[x1, y1,
  x2, y2, ...]") として受け取るだけでなく、"create_*()" メソッドと同様
  に、ペアにまとめた座標 ("(x1, y1), (x2, y2), ..." や "[(x1, y1),
  (x2, y2), ...]") も受け付けるようになりました。 (Serhiy Storchaka が
  gh-94473 で貢献しました。)


tokenize
--------

* "tokenize" モジュールに **PEP 701** で導入された変更を反映しました。
  (Marta Gómez Macías と Pablo Galindo が gh-102856 で貢献しました。)
  "tokenize" モジュールの変更について詳しくは Python 3.12 への移植 を
  参照してください。


types
-----

* ユーザー定義のジェネリック型 をサブクラス化した際に、その情報をより
  詳しく調べるための "types.get_original_bases()" を追加しました。
  (James Hilton-Balfe and Alex Waygood が gh-101827 で貢献しました。)


typing
------

* "実行時チェック可能なプロトコル" に対する "isinstance()" のチェック
  では、属性の存在確認に "hasattr()" ではなく
  "inspect.getattr_static()" を使うようになりました。 これにより、実行
  時チェック可能なプロトコルに対する "isinstance()" チェック中に、デス
  クリプタや "__getattr__()" メソッドが予期せず評価されることがなくな
  ります。 ただし、従来は実行時チェック可能なプロトコルのインスタンス
  と見なされていたオブジェクトが、Python 3.12 以降ではそう見なされなく
  なる場合や、その逆の場合もあります。 ほとんどの利用者はこの変更の影
  響を受けないと考えられます。 (Alex Waygood が gh-102433 で貢献しまし
  た。)

* 実行時チェック可能なプロトコルのメンバーは、クラスが作成された時点で
  「固定」されたものとして扱われるようになりました。 実行時チェック可
  能なプロトコルの属性をモンキーパッチで変更することは引き続きできます
  が、オブジェクトとそのプロトコルを比較する "isinstance()" チェックに
  は影響しません。 例えば、次のとおりです。

     >>> from typing import Protocol, runtime_checkable
     >>> @runtime_checkable
     ... class HasX(Protocol):
     ...     x = 1
     ...
     >>> class Foo: ...
     ...
     >>> f = Foo()
     >>> isinstance(f, HasX)
     False
     >>> f.x = 1
     >>> isinstance(f, HasX)
     True
     >>> HasX.y = 2
     >>> isinstance(f, HasX)  # HasX に "y" 属性が加わっても結果は変わらない
     True

  この変更は、実行時チェック可能なプロトコルに対する "isinstance()" チ
  ェックを高速化するために行われました。

* "実行時チェック可能なプロトコル" に対する "isinstance()" チェックの
  性能特性が大きく変わりました。 メンバーが少ないプロトコルに対する
  "isinstance()" チェックの大半は、3.11 と比べて少なくとも 2 倍高速に
  なり、中には 20 倍以上高速になるものもあります。 ただし、メンバーが
  多いプロトコルに対する "isinstance()" チェックは、Python 3.11 より遅
  くなる場合があります。 (Alex Waygood が gh-74690 and gh-103193 で貢
  献しました。)

* すべての "typing.TypedDict" クラスと "typing.NamedTuple" クラスが
  "__orig_bases__" 属性を持つようになりました。 (Adrian Garcia
  Badaracco が gh-103699 で貢献しました。)

* "@typing.dataclass_transform" に "frozen_default" 引数を追加しました
  。 (Erik De Bonte が gh-99957 で貢献しました。)


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

* Unicode データベースをバージョン 15.0.0 に更新しました。 (Benjamin
  Peterson が gh-96734 で貢献しました)。


unittest
--------

最も時間がかかったテストケースを N 件表示するコマンドラインオプション
"--durations" を追加しました。

   python3 -m unittest --durations=3 lib.tests.test_threading
   .....
   Slowest test durations
   ----------------------------------------------------------------------
   1.210s     test_timeout (Lib.test.test_threading.BarrierTests)
   1.003s     test_default_timeout (Lib.test.test_threading.BarrierTests)
   0.518s     test_timeout (Lib.test.test_threading.EventTests)

   (0.000 durations hidden.  Use -v to show these durations.)
   ----------------------------------------------------------------------
   Ran 158 tests in 9.869s

   OK (skipped=3)

(Giampaolo Rodola が gh-48330 で貢献しました。)


uuid
----

* コマンドラインインターフェース を追加しました。 (Adam Chhina が
  gh-88597 で貢献しました。)


最適化
======

* Unicode オブジェクトから "wstr" メンバーと "wstr_length" メンバーを
  削除しました。 64 ビットプラットフォームでは、オブジェクトのサイズが
  8 または 16 バイト小さくなります。 (**PEP 623**) (Inada Naoki が
  gh-92536 で貢献しました。)

* ビルド処理で BOLT バイナリオプティマイザーを使う実験的なサポートを追
  加しました。 性能が 1～5% 向上します。 (Kevin Modzelewski が
  gh-90536 で貢献し、Donghee Na が gh-101525 で調整しました。)

* グループ参照を含む置換文字列を使う正規表現の置換 ("re.sub()" 関数、
  "re.subn()" 関数、および対応する "re.Pattern" のメソッド) を 2～3 倍
  高速化しました。 (Serhiy Storchaka が gh-91524 で貢献しました。)

* コストの高い文字列の書式化を遅らせることで、"asyncio.Task" の作成を
  高速化しました。 (Itamar Oren が gh-103793 で貢献しました。)

* "tokenize" モジュールで **PEP 701** に対応するための変更に伴い、
  "tokenize.tokenize()" 関数と "tokenize.generate_tokens()" 関数が最大
  64% 高速になりました。 (Marta Gómez Macías and Pablo Galindo が
  gh-102856 で貢献しました。)

* 新しい "LOAD_SUPER_ATTR" 命令により、"super()" を経由したメソッド呼
  び出しと属性の読み込みを高速化しました。 (Carl Meyer and Vladimir
  Matveev が gh-103497 で貢献しました。)


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

* "LOAD_METHOD" 命令を削除し、"LOAD_ATTR" に統合しました。 "LOAD_ATTR"
  は、oparg の最下位ビットがセットされている場合、従来の "LOAD_METHOD"
  命令と同じように動作します。 (Ken Jin が gh-93429 で貢献しました。)

* "JUMP_IF_FALSE_OR_POP" 命令と "JUMP_IF_TRUE_OR_POP" 命令を削除しまし
  た。 (Irit Katriel が gh-102859 で貢献しました。)

* "PRECALL" 命令を削除しました。 (Mark Shannon が gh-92925 で貢献しま
  した。)

* "BINARY_SLICE" 命令と "STORE_SLICE" 命令を追加しました。 (Mark
  Shannon が gh-94163 で貢献しました。)

* "CALL_INTRINSIC_1" 命令を追加しました。 (Mark Shannon が gh-99005 で
  貢献しました。)

* "CALL_INTRINSIC_2" 命令を追加しました。 (Irit Katriel が gh-101799
  で貢献しました。)

* "CLEANUP_THROW" 命令を追加しました。 (Brandt Bucher が gh-90997 で貢
  献しました。)

* "END_SEND" 命令を追加しました。 (Mark Shannon が gh-103082 で貢献し
  ました。)

* **PEP 709** の実装の一部として、"LOAD_FAST_AND_CLEAR" 命令を追加しま
  した。 (Carl Meyer が gh-101441 で貢献しました。)

* "LOAD_FAST_CHECK" 命令を追加しました。 (Dennis Sweeney が gh-93143
  で貢献しました。)

* **PEP 695** の実装の一部として、"LOAD_FROM_DICT_OR_DEREF"、
  "LOAD_FROM_DICT_OR_GLOBALS"、"LOAD_LOCALS" オペコードを追加しました
  。 "LOAD_CLASSDEREF" オペコードを削除しました。 これは "LOAD_LOCALS"
  と "LOAD_FROM_DICT_OR_DEREF" の組み合わせで置き換えられます。 (Jelle
  Zijlstra が gh-103764 で貢献しました。)

* "LOAD_SUPER_ATTR" 命令を追加しました。 (Carl Meyer and Vladimir
  Matveev が gh-103497 で貢献しました。)

* "RETURN_CONST" 命令を追加しました。 (Wenyang Wang が gh-101632 で貢
  献しました。)


デモとツール
============

* 古いデモスクリプトを含む "Tools/demo/" ディレクトリを削除しました。
  コピーは old-demos プロジェクト にあります。 (Victor Stinner が
  gh-97681 で貢献しました。)

* "Tools/scripts/" ディレクトリの古くなったサンプルスクリプトを削除し
  ました。 コピーは old-demos プロジェクト にあります。 (Victor
  Stinner が gh-97669 で貢献しました。)


非推奨
======

* "argparse": "argparse.BooleanOptionalAction" の *type*、*choices*、
  *metavar* 引数が非推奨になり、3.14 で削除される予定です。 (Nikita
  Sobolev が gh-92248 で貢献しました。)

* "ast": 以下の "ast" の機能は、Python 3.8 からドキュメントで非推奨と
  されていましたが、今回から実行時にアクセスまたは使用すると
  "DeprecationWarning" を出すようになりました。 Python 3.14 で削除され
  る予定です。

  * "ast.Num"

  * "ast.Str"

  * "ast.Bytes"

  * "ast.NameConstant"

  * "ast.Ellipsis"

  代わりに "ast.Constant" を使ってください。 (Serhiy Storchaka が
  gh-90953 で貢献しました。)

* "asyncio":

  * 子プロセスウォッチャーのクラス "asyncio.MultiLoopChildWatcher"、
    "asyncio.FastChildWatcher"、"asyncio.AbstractChildWatcher"、
    "asyncio.SafeChildWatcher" が非推奨になり、Python 3.14 で削除され
    る予定です。 (Kumar Aditya が gh-94597 で貢献しました。)

  * "asyncio.set_child_watcher()"、"asyncio.get_child_watcher()"、
    "asyncio.AbstractEventLoopPolicy.set_child_watcher()"、
    "asyncio.AbstractEventLoopPolicy.get_child_watcher()" が非推奨にな
    り、Python 3.14 で削除される予定です。 (Kumar Aditya が gh-94597
    で貢献しました。)

  * デフォルトのイベントループポリシーの "get_event_loop()" メソッドは
    、現在のイベントループが設定されておらず、新たに作成する場合に
    "DeprecationWarning" を出すようになりました。 (Serhiy Storchaka
    and Guido van Rossum が gh-100160 で貢献しました。)

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

* "collections.abc": "collections.abc.ByteString" が非推奨になりました
  。

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

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

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

* "datetime": "datetime.datetime" の "utcnow()" と
  "utcfromtimestamp()" が非推奨になり、将来のバージョンで削除される予
  定です。 代わりに、UTC の日時を表すにはタイムゾーン情報を持つオブジ
  ェクトを使ってください。 それぞれ "now()" と "fromtimestamp()" を、
  *tz* 引数に "datetime.UTC" を指定して呼び出してください。 (Paul
  Ganssle が gh-103857 で貢献しました。)

* "email": "email.utils.localtime()" の *isdst* 引数が非推奨になりまし
  た。 (Alan Williams が gh-72346 で貢献しました。)

* "importlib.abc": 以下のクラスが非推奨になり、Python 3.14 で削除予定
  です。

  * "importlib.abc.ResourceReader"

  * "importlib.abc.Traversable"

  * "importlib.abc.TraversableResources"

  代わりに "importlib.resources.abc" のクラスを使ってください。

  * "importlib.resources.abc.Traversable"

  * "importlib.resources.abc.TraversableResources"

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

* "itertools": コピー、深いコピー、pickle 化のサポートが非推奨になりま
  した。 この機能はドキュメントに記載されておらず、非効率で、以前から
  バグが多く、一貫性もありませんでした。 コード量と保守の負担を大幅に
  減らすため、3.14 で削除される予定です。 (Raymond Hettinger が
  gh-101588 で貢献しました。)

* "multiprocessing": Python 3.14 では、Linux、BSD、および現在 "'fork'"
  がデフォルトの macOS 以外の POSIX プラットフォームで、
  "multiprocessing" のデフォルトの開始方式がより安全なものに変わります
  (gh-84559)。 ほとんどのコードでは影響を受けないと考えられるため、こ
  の変更について実行時に警告を出すのは混乱が大きすぎると判断されました
  。 コードが "'fork'" を *必要とする* 場合は、"get_context()" または
  "set_start_method()" API で明示的に指定してください。 コンテキストと
  開始方式 を参照してください。

* "pkgutil": "pkgutil.find_loader()" と "pkgutil.get_loader()" が非推
  奨になり、Python 3.14 で削除される予定です。 代わりに
  "importlib.util.find_spec()" を使ってください。 (Nikita Sobolev が
  gh-97850 で貢献しました。)

* "pty": ドキュメントに記載のない "master_open()" と "slave_open()" と
  いう 2 つの関数は Python 2 から非推奨でしたが、3.12 で初めて
  "DeprecationWarning" を出すようになりました。 3.14 で削除される予定
  です。 (Soumendra Ganguly and Gregory P. Smith が gh-85984 で貢献し
  ました。)

* "os":

  * Windows で "os.stat()" と "os.lstat()" が返す "st_ctime" フィール
    ドが非推奨になりました。 将来のリリースでは、他のプラットフォーム
    と同じくメタデータの最終変更時刻が格納されるようになります。 現在
    は引き続き作成時刻が格納されますが、この値は新しい "st_birthtime"
    フィールドでも取得できます。 (Steve Dower が gh-99726 で貢献しまし
    た。)

  * POSIX プラットフォームでは、マルチスレッドのプロセスから呼び出され
    たことを検出できた場合、"os.fork()" が "DeprecationWarning" を出す
    ことがあります。 こうした呼び出しは、たとえコードが動作している *
    ように見えても*、以前から POSIX プラットフォームと根本的に相容れな
    いものでした。 このようなコードで問題に遭遇する機会が増えているた
    め、注意を促す警告を追加しました。 詳細については "os.fork()" のド
    キュメントを参照してください。 また、以前からあるこのプラットフォ
    ーム互換性の問題を *なぜ* 今開発者に伝えるのかについては、fork と
    スレッドの非互換性に関する議論 を参照してください。

  "multiprocessing" または "concurrent.futures" の使用によってこの警告
  が出る場合は、"multiprocessing" の開始方式を ""spawn"" や
  ""forkserver"" などに変更してください。

* "shutil": "shutil.rmtree()" の *onerror* 引数が非推奨になりました。
  代わりに *onexc* を使ってください。 (Irit Katriel が gh-102828 で貢
  献しました。)

* "sqlite3":

  * デフォルトのアダプターとコンバーター が非推奨になりました。 代わり
    に 適合関数と変換関数のレシピ集 を用途に合わせて調整して使ってくだ
    さい。 (Erlend E. Aasland が gh-90016 で貢献しました。)

  * "execute()" で 名前付きプレースホルダー を使い、パラメータを
    "dict" ではなく *シーケンス* として渡すと、"DeprecationWarning" が
    出るようになりました。 Python 3.14 からは、名前付きプレースホルダ
    ーとともにシーケンスでパラメータを渡すと "ProgrammingError" が送出
    されるようになります。 (Erlend E. Aasland が gh-101698 で貢献しま
    した。)

* "sys": "sys.last_type"、"sys.last_value"、"sys.last_traceback" フィ
  ールドが非推奨になりました。 代わりに "sys.last_exc" を使ってくださ
  い。 (Irit Katriel が gh-102778 で貢献しました。)

* "tarfile": *filter* を指定せずに tar アーカイブを展開することは、
  "'data'" フィルターがデフォルトになる Python 3.14 まで非推奨です。
  詳しくは 展開フィルター を参照してください。

* "typing":

  * それぞれ "collections.abc.Hashable" と "collections.abc.Sized" の
    別名である "typing.Hashable" と "typing.Sized" が非推奨になりまし
    た。 (gh-94309。)

  * Python 3.9 から非推奨だった "typing.ByteString" が、使用時に
    "DeprecationWarning" を出すようになりました。 (Alex Waygood が
    gh-91896 で貢献しました。)

* "xml.etree.ElementTree": "xml.etree.ElementTree.Element" の真偽値を
  調べると "DeprecationWarning" が出るようになりました。 従来は Python
  実装では "FutureWarning" が出て、C 実装では何も出ませんでした。
  (Jacob Walls が gh-83122 で貢献しました。)

* "コルーチンの throw()"、"ジェネレータの throw()"、"非同期ジェネレー
  タの throw()" の 3 引数 ("type"、"value"、"traceback") のシグネチャ
  が非推奨になり、将来の Python バージョンで削除される可能性があります
  。 代わりに引数が 1 つの形式を使ってください。 (Ofey Chan が
  gh-89874 で貢献しました。)

* モジュールの "__package__" が "__spec__.parent" と異なる場合、従来の
  "ImportWarning" の代わりに "DeprecationWarning" が出るようになりまし
  た。 (Brett Cannon が gh-65961 で貢献しました。)

* Setting "__package__" or "__cached__" on a module is deprecated, and
  will cease to be set or taken into consideration by the import
  system in Python 3.14. (Contributed by Brett Cannon in gh-65961.)

* bool に対するビット単位の反転演算子 ("~") が非推奨になりました。
  Python 3.16 ではエラーになります。 bool の論理否定には、代わりに
  "not" を使ってください。 元の "int" のビット単位の反転が本当に必要に
  なるまれな場合には、"~int(x)" のように明示的に int に変換してくださ
  い。 (Tim Hoffmann が gh-103487 で貢献しました。)

* コードオブジェクトの "codeobject.co_lnotab" へのアクセスは **PEP
  626** により Python 3.10 で非推奨になりましたが、3.12 で初めて
  "DeprecationWarning" を出すようになりました。 3.15 で削除される可能
  性があります。 (Nikita Sobolev が gh-101866 で貢献しました。)


Python 3.13 で削除予定
----------------------

モジュール(**PEP 594** を参照):

* "aifc"

* "audioop"

* "cgi"

* "cgitb"

* "chunk"

* "crypt"

* "imghdr"

* "mailcap"

* "msilib"

* "nis"

* "nntplib"

* "ossaudiodev"

* "pipes"

* "sndhdr"

* "spwd"

* "sunau"

* "telnetlib"

* "uu"

* "xdrlib"

その他のモジュール:

* "lib2to3" と **2to3** プログラム (gh-84540)

API

* "configparser.LegacyInterpolation" (gh-90765)

* "locale.resetlocale()" (gh-90817)

* "turtle.RawTurtle.settiltangle()" (gh-50096)

* "unittest.findTestCases()" (gh-50096)

* "unittest.getTestCaseNames()" (gh-50096)

* "unittest.makeSuite()" (gh-50096)

* "unittest.TestProgram.usageExit()" (gh-67048)

* "webbrowser.MacOSX" (gh-86421)

* "classmethod" のデスクリプタの連鎖 (gh-89519)


Python 3.14 で削除予定
----------------------

* "argparse": "argparse.BooleanOptionalAction" の *type*、*choices*、
  *metavar* 引数が非推奨になり、3.14 で削除される予定です。 (Nikita
  Sobolev が gh-92248 で貢献しました。)

* "ast"：以下の機能は Python 3.8 からドキュメントで非推奨とされていま
  したが、アクセスや使用をすると実行時に "DeprecationWarning" が出るよ
  うになりました。 Python 3.14 で削除されます：

  * "ast.Num"

  * "ast.Str"

  * "ast.Bytes"

  * "ast.NameConstant"

  * "ast.Ellipsis"

  代わりに "ast.Constant" を使ってください。 (Serhiy Storchaka が
  gh-90953 で貢献しました。)

* "asyncio":

  * 子プロセスウォッチャーのクラス "asyncio.MultiLoopChildWatcher"、
    "asyncio.FastChildWatcher"、"asyncio.AbstractChildWatcher"、
    "asyncio.SafeChildWatcher" が非推奨になり、Python 3.14 で削除され
    る予定です。 (Kumar Aditya が gh-94597 で貢献しました。)

  * "asyncio.set_child_watcher()"、"asyncio.get_child_watcher()"、
    "asyncio.AbstractEventLoopPolicy.set_child_watcher()"、
    "asyncio.AbstractEventLoopPolicy.get_child_watcher()" が非推奨にな
    り、Python 3.14 で削除される予定です。 (Kumar Aditya が gh-94597
    で貢献しました。)

  * デフォルトのイベントループポリシーの "get_event_loop()" メソッドは
    、現在のイベントループが設定されておらず、新たに作成する場合に
    "DeprecationWarning" を出すようになりました。 (Serhiy Storchaka
    and Guido van Rossum が gh-100160 で貢献しました。)

* "email"："email.utils.localtime()" の "isdst" パラメータは非推奨にな
  りました。 (Alan Williams が gh-72346 で貢献しました。)

* "importlib.abc" の非推奨のクラス：

  * "importlib.abc.ResourceReader"

  * "importlib.abc.Traversable"

  * "importlib.abc.TraversableResources"

  代わりに "importlib.resources.abc" のクラスを使ってください。

  * "importlib.resources.abc.Traversable"

  * "importlib.resources.abc.TraversableResources"

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

* "itertools" は copy、deepcopy、pickle の操作をサポートしていましたが
  、ドキュメント化されておらず、非効率で、以前からバグが多く、一貫性も
  ありませんでした。 コード量と保守の負担を大幅に減らすため、このサポ
  ートは 3.14 で削除されます。 (Raymond Hettinger が gh-101588 で貢献
  しました。)

* "multiprocessing"：Linux、BSD、および現在 "'fork'" がデフォルトとな
  っている macOS 以外の POSIX プラットフォームでは、デフォルトの開始方
  式がより安全なものに変わります (gh-84559)。 ほとんどのコードでは影響
  を受けないと考えられるため、この変更について実行時に警告を出すのは混
  乱が大きすぎると判断されました。 コードが "'fork'" を *必要とする*
  場合は、"get_context()" または "set_start_method()" API で明示的に指
  定してください。 コンテキストと開始方式 を参照してください。

* "pathlib"："is_relative_to()" と "relative_to()" に追加の引数を渡す
  ことは非推奨です。

* "pkgutil"："pkgutil.find_loader()" と "pkgutil.get_loader()" は
  "DeprecationWarning" を出すようになりました。 代わりに
  "importlib.util.find_spec()" を使ってください。 (Nikita Sobolev が
  gh-97850 で貢献しました。)

* "pty":

  * "master_open()"："pty.openpty()" を使ってください。

  * "slave_open()"："pty.openpty()" を使ってください。

* "sqlite3":

  * "version" と "version_info"。

  * "execute()" と "executemany()" で、名前付きプレースホルダー を使い
    、"parameters" に "dict" ではなくシーケンスを渡すこと。

* "urllib"："urllib.parse.Quoter" は非推奨です。 公開 API として意図さ
  れたものではありませんでした。 (Gregory P. Smith が gh-88168 で貢献
  しました。)


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


削除
====


asynchat と asyncore
--------------------

* Python 3.6 から非推奨だったこの 2 つのモジュールを、**PEP 594** の予
  定に従って削除しました。 代わりに "asyncio" を使ってください。
  (Nikita Sobolev が gh-96580 で貢献しました。)


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

* "configparser" で 3.2 の時点から非推奨だった以下の名前を、gh-89336
  に従って削除しました。

  * "configparser.ParsingError" の "filename" 属性と引数を削除しました
    。 代わりに "source" 属性と引数を使ってください。

  * "configparser" の "SafeConfigParser" クラスを削除しました。 代わり
    に短い名前の "ConfigParser" を使ってください。

  * "configparser.ConfigParser" の "readfp" メソッドを削除しました。
    代わりに "read_file()" を使ってください。


distutils
---------

* "distutils" パッケージを削除しました。 これは **PEP 632** 「
  distutils モジュールの非推奨化」により Python 3.10 で非推奨になって
  いました。 "distutils" を使っていて他の仕組みに移行できないプロジェ
  クトでは、引き続き "distutils" を提供する "setuptools" プロジェクト
  をインストールできます。 (Victor Stinner が gh-92584 で貢献しました
  。)


ensurepip
---------

* "ensurepip" に同梱していた setuptools の wheel を削除し、"venv" で作
  成する環境に setuptools をインストールしなくなりました。

  "pip (>= 22.1)" は、実行環境への setuptools のインストールを必要とし
  ません。 pip はパッケージのビルドに使う環境に "setuptools" を用意す
  るため、"setuptools" ベース (および "distutils" ベース) のパッケージ
  も引き続き "pip install" で利用できます。

  "easy_install"、"pkg_resources"、"setuptools"、"distutils" は
  "setuptools" パッケージの一部であるため、"venv" で作成した環境や
  "ensurepip" で初期設定した環境には、デフォルトで提供されなくなりまし
  た。 実行時にこれらに依存するプロジェクトでは、"setuptools" プロジェ
  クトを依存関係として宣言し、別途インストールする必要があります (通常
  は pip を使います)。

  (Pradyun Gedam が gh-95299 で貢献しました。)


enum
----

* "enum" の "EnumMeta.__getattr__" を削除しました。 列挙型の属性へのア
  クセスに必要なくなったためです。 (Ethan Furman が gh-95083 で貢献し
  ました。)


ftplib
------

* "ftplib" のクラス属性 "FTP_TLS.ssl_version" を削除しました。 代わり
  に *context* 引数を使ってください。 (Victor Stinner が gh-94172 で貢
  献しました。)


gzip
----

* "gzip" の "gzip.GzipFile" から、Python 2.6 から非推奨だった
  "filename" 属性を削除しました。 代わりに "name" 属性を使ってください
  。 書き込みモードでは、"filename" 属性はファイル拡張子 "'.gz'" がな
  ければ追加していました。 (Victor Stinner が gh-94196 で貢献しました
  。)


hashlib
-------

* "hashlib" の "hashlib.pbkdf2_hmac()" から、Python 3.10 で非推奨にな
  った純 Python 実装を削除しました。 Python 3.10 以降には OpenSSL
  1.1.1 が必要です (**PEP 644**)。 このバージョンの OpenSSL は、より高
  速な "pbkdf2_hmac()" の C 実装を提供します。 (Victor Stinner が
  gh-94199 で貢献しました。)


importlib
---------

* "importlib" で以前から非推奨だった機能の整理を、多くの箇所で完了しま
  した。

  * "module_repr()" への参照とサポートを削除しました。 (Barry Warsaw
    が gh-97850 で貢献しました。)

  * "importlib.util.set_package"、"importlib.util.set_loader"、
    "importlib.util.module_for_loader" をすべて削除しました。 (Brett
    Cannon and Nikita Sobolev が gh-65961 and gh-97850 で貢献しました
    。)

  * "find_loader()" API と "find_module()" API のサポートを削除しまし
    た。 (Barry Warsaw が gh-98040 で貢献しました。)

  * "importlib.abc.Finder"、"pkgutil.ImpImporter"、"pkgutil.ImpLoader"
    を削除しました。 (Barry Warsaw が gh-98040 で貢献しました。)


imp
---

* "imp" モジュールを削除しました。 (Barry Warsaw が gh-98040 で貢献し
  ました。)

  移行には、以下の対応表を参照してください。

     +-----------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------+
     | imp                               | importlib                                                                                                                                         |
     |===================================|===================================================================================================================================================|
     | "imp.NullImporter"                | "sys.path_importer_cache" に "None" を挿入する                                                                                                    |
     +-----------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------+
     | "imp.cache_from_source()"         | "importlib.util.cache_from_source()"                                                                                                              |
     +-----------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------+
     | "imp.find_module()"               | "importlib.util.find_spec()"                                                                                                                      |
     +-----------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------+
     | "imp.get_magic()"                 | "importlib.util.MAGIC_NUMBER"                                                                                                                     |
     +-----------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------+
     | "imp.get_suffixes()"              | "importlib.machinery.SOURCE_SUFFIXES"、 "importlib.machinery.EXTENSION_SUFFIXES"、 "importlib.machinery.BYTECODE_SUFFIXES"                        |
     +-----------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------+
     | "imp.get_tag()"                   | "sys.implementation.cache_tag"                                                                                                                    |
     +-----------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------+
     | "imp.load_module()"               | "importlib.import_module()"                                                                                                                       |
     +-----------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------+
     | "imp.new_module(name)"            | "types.ModuleType(name)"                                                                                                                          |
     +-----------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------+
     | "imp.reload()"                    | "importlib.reload()"                                                                                                                              |
     +-----------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------+
     | "imp.source_from_cache()"         | "importlib.util.source_from_cache()"                                                                                                              |
     +-----------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------+
     | "imp.load_source()"               | *下記を参照*                                                                                                                                      |
     +-----------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------+

  "imp.load_source()" を次のコードで置き換えてください。

     import importlib.util
     import importlib.machinery

     def load_source(modname, filename):
         loader = importlib.machinery.SourceFileLoader(modname, filename)
         spec = importlib.util.spec_from_file_location(modname, filename, loader=loader)
         module = importlib.util.module_from_spec(spec)
         # モジュールは常に実行され、sys.modules にはキャッシュされない。
         # モジュールをキャッシュするには、次の行のコメントを外す。
         # sys.modules[module.__name__] = module
         loader.exec_module(module)
         return module

* 代替のない "imp" の関数と属性を削除しました。

  * ドキュメント化されていない関数:

    * "imp.init_builtin()"

    * "imp.load_compiled()"

    * "imp.load_dynamic()"

    * "imp.load_package()"

  * "imp.lock_held()"、"imp.acquire_lock()"、"imp.release_lock()": ロ
    ック方式は Python 3.3 でモジュールごとのロックに変わりました。

  * "imp.find_module()" の定数: "SEARCH_ERROR"、"PY_SOURCE"、
    "PY_COMPILED"、"C_EXTENSION"、"PY_RESOURCE"、"PKG_DIRECTORY"、
    "C_BUILTIN"、"PY_FROZEN"、"PY_CODERESOURCE"、"IMP_HOOK"。


io
--

* "io" の "io.OpenWrapper" と "_pyio.OpenWrapper" を削除しました。 こ
  れらは Python 3.10 で非推奨になっていました。 代わりに "open()" をそ
  のまま使ってください。 "open()" ("io.open()") は組み込み関数です。
  Python 3.10 以降では "_pyio.open()" も静的メソッドになっています。
  (Victor Stinner が gh-94169 で貢献しました。)


locale
------

* "locale" の "locale.format()" 関数を削除しました。 これは Python 3.7
  で非推奨になっていました。 代わりに "locale.format_string()" を使っ
  てください。 (Victor Stinner が gh-94226 で貢献しました。)


smtpd
-----

* Python 3.4.7 と 3.5.4 で非推奨になった "smtpd" モジュールを、**PEP
  594** の予定に従って削除しました。 代わりに PyPI の aiosmtpd モジュ
  ールや、他の "asyncio" ベースのサーバーを使ってください。 (Oleg
  Iarygin が gh-93243 で貢献しました。)


sqlite3
-------

* Python 3.10 で非推奨になった、ドキュメントに記載のない以下の
  "sqlite3" の機能を削除しました。

  * "sqlite3.enable_shared_cache()"

  * "sqlite3.OptimizedUnicode"

  共有キャッシュが必要な場合は、クエリーパラメータ "cache=shared" を指
  定して URI モードでデータベースを開いてください。

  テキストファクトリー "sqlite3.OptimizedUnicode" は、Python 3.3 から
  "str" の別名でした。 以前テキストファクトリーを "OptimizedUnicode"
  に設定していたコードでは、"str" を明示的に指定するか、同じく "str"
  であるデフォルト値を使えます。

  (Erlend E. Aasland が gh-92548 で貢献しました。)


ssl
---

* "ssl" の "ssl.RAND_pseudo_bytes()" 関数を削除しました。 これは
  Python 3.6 で非推奨になっていました。 代わりに "os.urandom()" または
  "ssl.RAND_bytes()" を使ってください。 (Victor Stinner が gh-94199 で
  貢献しました。)

* "ssl.match_hostname()" 関数を削除しました。 これは Python 3.7 で非推
  奨になっていました。 Python 3.7 以降では OpenSSL がホスト名の照合を
  行うため、Python は "ssl.match_hostname()" 関数を使わなくなりました
  。 (Victor Stinner が gh-94199 で貢献しました。)

* Python 3.7 で非推奨になった "ssl.wrap_socket()" 関数を削除しました。
  代わりに "ssl.SSLContext" オブジェクトを作成し、その
  "ssl.SSLContext.wrap_socket" メソッドを呼び出してください。
  "ssl.wrap_socket()" をまだ使っているパッケージには問題があり、安全で
  はありません。 この関数は SNI TLS 拡張を送信せず、サーバーのホスト名
  も検証しません。 こうしたコードは **CWE 295** (証明書の検証不備) に
  該当します。 (Victor Stinner が gh-94199 で貢献しました。)


unittest
--------

* "unittest" の長らく非推奨だった多数の機能を削除しました。

  * "TestCase" の以下のメソッドの別名:

    +------------------------------+---------------------------------+-----------------+
    | 非推奨のエイリアス           | メソッド名                      | 非推奨となるバ  |
    |                              |                                 | ージョン        |
    |==============================|=================================|=================|
    | "failUnless"                 | "assertTrue()"                  | 3.1             |
    +------------------------------+---------------------------------+-----------------+
    | "failIf"                     | "assertFalse()"                 | 3.1             |
    +------------------------------+---------------------------------+-----------------+
    | "failUnlessEqual"            | "assertEqual()"                 | 3.1             |
    +------------------------------+---------------------------------+-----------------+
    | "failIfEqual"                | "assertNotEqual()"              | 3.1             |
    +------------------------------+---------------------------------+-----------------+
    | "failUnlessAlmostEqual"      | "assertAlmostEqual()"           | 3.1             |
    +------------------------------+---------------------------------+-----------------+
    | "failIfAlmostEqual"          | "assertNotAlmostEqual()"        | 3.1             |
    +------------------------------+---------------------------------+-----------------+
    | "failUnlessRaises"           | "assertRaises()"                | 3.1             |
    +------------------------------+---------------------------------+-----------------+
    | "assert_"                    | "assertTrue()"                  | 3.2             |
    +------------------------------+---------------------------------+-----------------+
    | "assertEquals"               | "assertEqual()"                 | 3.2             |
    +------------------------------+---------------------------------+-----------------+
    | "assertNotEquals"            | "assertNotEqual()"              | 3.2             |
    +------------------------------+---------------------------------+-----------------+
    | "assertAlmostEquals"         | "assertAlmostEqual()"           | 3.2             |
    +------------------------------+---------------------------------+-----------------+
    | "assertNotAlmostEquals"      | "assertNotAlmostEqual()"        | 3.2             |
    +------------------------------+---------------------------------+-----------------+
    | "assertRegexpMatches"        | "assertRegex()"                 | 3.2             |
    +------------------------------+---------------------------------+-----------------+
    | "assertRaisesRegexp"         | "assertRaisesRegex()"           | 3.2             |
    +------------------------------+---------------------------------+-----------------+
    | "assertNotRegexpMatches"     | "assertNotRegex()"              | 3.5             |
    +------------------------------+---------------------------------+-----------------+

    https://github.com/isidentical/teyit を使うと、ユニットテストを自
    動的に新しい書き方へ移行できます。

  * ドキュメントに記載がなく、正しく動作していなかった "TestCase" の
    "assertDictContainsSubset" メソッド (Python 3.2 で非推奨化)。

  * ドキュメントに記載のない "TestLoader.loadTestsFromModule" の
    *use_load_tests* 引数 (Python 3.5 から非推奨で、無視されていました
    )。

  * "TextTestResult" クラスの別名 "_TextTestResult" (Python 3.2 で非推
    奨化)。

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


webbrowser
----------

* "webbrowser" から古いブラウザーのサポートを削除しました。 対象は
  Grail、Mosaic、Netscape、Galeon、Skipstone、Iceape、Firebird、および
  バージョン 35 以前の Firefox です (gh-102871)。


xml.etree.ElementTree
---------------------

* 純 Python 実装の "ElementTree.Element.copy()" メソッドを削除しました
  。 これは Python 3.10 で非推奨になっていました。 代わりに
  "copy.copy()" 関数を使ってください。 "xml.etree.ElementTree" の C 実
  装には "copy()" メソッドはなく、"__copy__()" メソッドだけがあります
  。 (Victor Stinner が gh-94383 で貢献しました。)


zipimport
---------

* "zipimport" から Python 3.10 で非推奨になった "find_loader()" メソッ
  ドと "find_module()" メソッドを削除しました。 代わりに "find_spec()"
  メソッドを使ってください。 理由は **PEP 451** を参照してください。
  (Victor Stinner が gh-94379 で貢献しました。)


その他
------

* ドキュメント用の "Makefile" から "suspicious" ルールを削除し、
  "Doc/tools/rstlint.py" も削除しました。 どちらも sphinx-lint に置き
  換えられます。 (Julien Palard が gh-98179 で貢献しました。)

* "ftplib"、"imaplib"、"poplib"、"smtplib" モジュールの *keyfile* 引数
  と *certfile* 引数、および "http.client" モジュールの *key_file*、
  *cert_file*、*check_hostname* 引数を削除しました。 これらはすべて
  Python 3.6 から非推奨でした。 代わりに *context* 引数 ("imaplib" で
  は *ssl_context*) を使ってください。 (Victor Stinner が gh-94172 で
  貢献しました。)

* いくつかの標準ライブラリモジュールとテストから、"Jython" との互換性
  のための特別な処理を削除しました。 (Nikita Sobolev が gh-99482 で貢
  献しました。)

* "ctypes" モジュールから
  "_use_broken_old_ctypes_structure_semantics_" フラグを削除しました。
  (Nikita Sobolev が gh-99285 で貢献しました。)


Python 3.12 への移植
====================

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


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

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

* Python 3.10 から非推奨だった "randrange()" の機能を削除しました。 以
  前は "randrange(10.0)" を情報の損失なく "randrange(10)" に変換してい
  ましたが、今回から "TypeError" を送出します。 また、
  "randrange(10.5)" や "randrange('10')" のような整数以外の値に対する
  例外を、"ValueError" から "TypeError" に変更しました。 これにより、
  "randrange(1e25)" が "randrange(10**25)" よりも広い範囲から、警告な
  しに値を選んでしまうバグも防げます。 (Serhiy Storchaka が gh-86388
  で最初に提案しました。)

* "argparse.ArgumentParser" がファイルから引数を読み込む際
  ("fromfile_prefix_chars" オプションなど) のエンコーディングとエラー
  ハンドラーを、デフォルトのテキストエンコーディング
  ("locale.getpreferredencoding(False)" など) から *ファイルシステムの
  エンコーディングとエラーハンドラー* に変更しました。 Windows では引
  数ファイルを ANSI コードページではなく UTF-8 でエンコードしてくださ
  い。

* Python 3.4.7 と 3.5.4 で非推奨になった、"asyncore" ベースの "smtpd"
  モジュールを削除しました。 代わりに、"asyncio" ベースの PyPI モジュ
  ール aiosmtpd を推奨します。

* "shlex.split()": *s* 引数に "None" を渡すと、"sys.stdin" から読み込
  む代わりに例外を送出するようになりました。 この機能は Python 3.9 で
  非推奨になっていました。 (Victor Stinner が gh-94352 で貢献しました
  。)

* The "os" module no longer accepts bytes-like paths, like "bytearray"
  and "memoryview" types: only the exact "bytes" type is accepted for
  bytes strings. (Contributed by Victor Stinner in gh-98393.)

* "syslog.openlog()" と "syslog.closelog()" をサブインタープリタで使う
  と失敗するようになりました。 "syslog.syslog()" は引き続きサブインタ
  ープリタで使えますが、メインインタープリタで "syslog.openlog()" を既
  に呼び出している場合に限られます。 これらの新しい制限はメインインタ
  ープリタには適用されないため、影響を受ける利用者はごく少数と考えられ
  ます。 この変更はインタープリタの分離に役立ちます。 さらに、"syslog"
  はプロセス全体で共有されるリソースのラッパーなので、メインインタープ
  リタから管理するのが適切です。 (Donghee Na が gh-99127 で貢献しまし
  た。)

* "@~functools.cached_property" の、ドキュメントに記載のなかったロック
  動作を削除しました。 クラスのすべてのインスタンスにまたがってロック
  を取り、強いロック競合を引き起こしていたためです。 この結果、2 つの
  スレッドが競合すると、同じインスタンスについてキャッシュされるプロパ
  ティの取得関数が複数回実行される可能性があります。 ほとんどの単純な
  キャッシュされるプロパティ (例えば冪等で、インスタンスの他の属性から
  値を計算するだけのもの) では問題ありません。 同期が必要なら、プロパ
  ティの取得関数内や、複数スレッドからアクセスする箇所の前後でロックを
  実装してください。

* "sys._current_exceptions()" が、スレッド ID から "(typ, exc, tb)" タ
  プルへのマッピングではなく、例外インスタンスへのマッピングを返すよう
  になりました。 (Irit Katriel が gh-103176 で貢献しました。)

* "tarfile" または "shutil.unpack_archive()" で tar ファイルを展開する
  際は、*filter* 引数を渡して、予想外の動作や危険をもたらす可能性のあ
  る機能を制限してください。 詳しくは 展開フィルター を参照してくださ
  い。

* **PEP 701** で導入された変更により、"tokenize.tokenize()" 関数と
  "tokenize.generate_tokens()" 関数の出力が変わりました。 f 文字列に対
  して "STRING" トークンは生成されなくなり、代わりに **PEP 701** に記
  載されたトークンが生成されます。 f 文字列の「文字列」部分には
  "FSTRING_START"、"FSTRING_MIDDLE"、"FSTRING_END" が生成され、式の部
  分にはその式に応じたトークンが生成されます。 例えば f 文字列
  "f"start {1+1} end"" に対して、従来のトークナイザーは次を生成してい
  ました。

     1,0-1,18:           STRING         'f"start {1+1} end"'

  新しいバージョンでは次を生成します。

     1,0-1,2:            FSTRING_START  'f"'
     1,2-1,8:            FSTRING_MIDDLE 'start '
     1,8-1,9:            OP             '{'
     1,9-1,10:           NUMBER         '1'
     1,10-1,11:          OP             '+'
     1,11-1,12:          NUMBER         '1'
     1,12-1,13:          OP             '}'
     1,13-1,17:          FSTRING_MIDDLE ' end'
     1,17-1,18:          FSTRING_END    '"'

  さらに、**PEP 701** への対応に必要な変更に伴い、細かな動作の違いが生
  じる場合があります。 以下のような変更があります。

  * "!" など、Python では無効な一部の文字をトークンに分割したときに生
    成されるトークンの "type" 属性が、"ERRORTOKEN" から "OP" に変わり
    ました。

  * 不完全な複数行文字列と同様に、不完全な単一行文字列でも
    "tokenize.TokenError" が送出されるようになりました。

  * 不完全または無効な Python コードの一部をトークンに分割すると、任意
    の "ERRORTOKEN" トークンを返す代わりに "tokenize.TokenError" を送
    出するようになりました。

  * Mixing tabs and spaces as indentation in the same file is not
    supported anymore and will raise a "TabError".

* "threading" モジュールは、"_thread" モジュールが
  "_is_main_interpreter" 属性を持つことを要求するようになりました。 こ
  れは引数を取らない関数で、現在のインタープリタがメインインタープリタ
  なら "True" を返します。

  独自の "_thread" モジュールを提供するライブラリやアプリケーションは
  、"_is_main_interpreter()" も提供する必要があります。 (gh-112826 を
  参照。)


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

* Python は、共有 C 拡張モジュールのビルドに "setup.py" を使わなくなり
  ました。 ヘッダーやライブラリなどのビルド設定は "configure" スクリプ
  トで検出し、拡張は "Makefile" でビルドします。 ほとんどの拡張は
  "pkg-config" を使い、それが使えない場合は独自に検出します。
  (Christian Heimes が gh-93939 で貢献しました。)

* Python のビルドには、"va_start(args, format)," のような引数が 2 つの
  "va_start()" が必要になりました。 "va_start()" を引数 1 つで呼ぶこと
  はなくなりました。 (Kumar Aditya が gh-93207 で貢献しました。)

* Clang コンパイラーが対応するフラグを受け付ける場合、CPython はリンク
  時最適化のデフォルト方式として ThinLTO を使うようになりました。
  (Donghee Na が gh-89536 で貢献しました。)

* "Makefile" に変数 "COMPILEALL_OPTS" を追加し、"make install" での
  "compileall" のオプション (デフォルトは "-j0") を上書きできるように
  しました。 また、3 つの "compileall" コマンドを 1 つに統合し、すべて
  の最適化レベル (0、1、2) の .pyc ファイルを一度にビルドするようにし
  ました。 (Victor Stinner が gh-99289 で貢献しました。)

* 64 ビット LoongArch 用のプラットフォームトリプレットを追加しました。

  * loongarch64-linux-gnusf

  * loongarch64-linux-gnuf32

  * loongarch64-linux-gnu

  (Zhang Na が gh-90656 で貢献しました。)

* "PYTHON_FOR_REGEN" に Python 3.10 以降が必要になりました。

* "configure" の再生成に Autoconf 2.71 と aclocal 1.16.4 が必要になり
  ました。 (Christian Heimes が gh-89886 で貢献しました。)

* python.org で配布する Windows ビルドと macOS インストーラーが
  OpenSSL 3.0 を使うようになりました。


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


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

* **PEP 697**: Introduce the Unstable C API tier, intended for low-
  level tools like debuggers and JIT compilers. This API may change in
  each minor release of CPython without deprecation warnings. Its
  contents are marked by the "PyUnstable_" prefix in names.

  コードオブジェクトのコンストラクター:

  * "PyUnstable_Code_New()" ("PyCode_New" から改名)

  * "PyUnstable_Code_NewWithPosOnlyArgs()"
    ("PyCode_NewWithPosOnlyArgs" から改名)

  コードオブジェクト用の追加ストレージ (**PEP 523**):

  * "PyUnstable_Eval_RequestCodeExtraIndex()"
    ("_PyEval_RequestCodeExtraIndex" から改名)

  * "PyUnstable_Code_GetExtra()" ("_PyCode_GetExtra" から改名)

  * "PyUnstable_Code_SetExtra()" ("_PyCode_SetExtra" から改名)

  元の名前は、それぞれの API が変更されるまで引き続き利用できます。

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

* **PEP 697**: インスタンスのメモリレイアウトが不透明な型を拡張する
  API を追加しました。

  * "PyType_Spec.basicsize" にゼロまたは負の値を指定して、基底クラスの
    サイズの継承または拡張を指定できるようになりました。

  * サブクラス固有のインスタンスデータにアクセスするため、
    "PyObject_GetTypeData()" と "PyType_GetTypeDataSize()" を追加しま
    した。

  * "PyType_Type" を含む一部の可変サイズ型を安全に拡張するため、
    "Py_TPFLAGS_ITEMS_AT_END" と "PyObject_GetItemData()" を追加しまし
    た。

  * サブクラス固有の構造体に基づいて "メンバー" を定義するため、
    "Py_RELATIVE_OFFSET" を追加しました。

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

* 新しい Limited C API 関数 "PyType_FromMetaclass()" を追加しました。
  既存の "PyType_FromModuleAndSpec()" を、メタクラス引数の追加によって
  一般化したものです。 (Wenzel Jakob が gh-93012 で貢献しました。)

* vectorcall プロトコル で呼び出せるオブジェクトを作成する API を
  Limited API に追加しました。

  * "Py_TPFLAGS_HAVE_VECTORCALL"

  * "PyVectorcall_NARGS()"

  * "PyVectorcall_Call()"

  * "vectorcallfunc"

  クラスの "__call__()" メソッドを再代入すると、そのクラスの
  "Py_TPFLAGS_HAVE_VECTORCALL" フラグを削除するようになりました。 これ
  により、ミュータブルな型 (不変フラグ "Py_TPFLAGS_IMMUTABLETYPE" を持
  たないヒープ型) でも vectorcall を安全に使えます。 "tp_call" をオー
  バーライドしないミュータブルな型は、"Py_TPFLAGS_HAVE_VECTORCALL" フ
  ラグを継承するようになりました。 (Petr Viktorin が gh-93274 で貢献し
  ました。)

  "Py_TPFLAGS_MANAGED_DICT" フラグと "Py_TPFLAGS_MANAGED_WEAKREF" フラ
  グを追加しました。 これにより、拡張クラスでの管理処理とメモリ使用量
  を減らし、アクセスを高速化しつつ、オブジェクトの "__dict__" と弱参照
  をサポートできます。

* vectorcall プロトコル で呼び出しを行う API を Limited API に追加しま
  した。

  * "PyObject_Vectorcall()"

  * "PyObject_VectorcallMethod()"

  * "PY_VECTORCALL_ARGUMENTS_OFFSET"

  これにより、vectorcall プロトコルの呼び出しを受ける側と呼び出す側の
  両方が Limited API で利用できるようになりました。 (Wenzel Jakob が
  gh-98586 で貢献しました。)

* 呼び出し元だけでなく、実行中のすべてのスレッドにプロファイル関数やト
  レース関数を設定する 2 つの新しい公開関数、
  "PyEval_SetProfileAllThreads()" と "PyEval_SetTraceAllThreads()" を
  追加しました。 (Pablo Galindo が gh-93503 で貢献しました。)

* 指定した "PyFunctionObject" の vectorcall フィールドを設定する新しい
  関数 "PyFunction_SetVectorcall()" を C API に追加しました。 (Andrew
  Frost が gh-92257 で貢献しました。)

* C API の "PyDict_AddWatcher()"、"PyDict_Watch()"、および関連 API を
  使って、辞書が変更されるたびに呼び出すコールバックを登録できるように
  なりました。 最適化を行うインタープリタ、JIT コンパイラー、デバッガ
  ーでの使用を想定しています。 (Carl Meyer が gh-91052 で貢献しました
  。)

* 型の変更の通知を受け取るコールバックを登録する "PyType_AddWatcher()"
  API と "PyType_Watch()" API を追加しました。 (Carl Meyer が gh-91051
  で貢献しました。)

* コードオブジェクトの作成と破棄の通知を受け取るコールバックを登録する
  ため、"PyCode_AddWatcher()" API と "PyCode_ClearWatcher()" API を追
  加しました。 (Itamar Oren が gh-91054 で貢献しました。)

* 名前を指定してフレームの変数を取得する "PyFrame_GetVar()" 関数と
  "PyFrame_GetVarString()" 関数を追加しました。 (Victor Stinner が
  gh-91248 で貢献しました。)

* 現在の例外を保存・復元する "PyErr_GetRaisedException()" と
  "PyErr_SetRaisedException()" を追加しました。 これらの関数は、非推奨
  になった "PyErr_Fetch()" と "PyErr_Restore()" のような 3 つの引数の
  代わりに、単一の例外オブジェクトを返したり受け取ったりします。 これ
  により間違いを起こしにくくなり、効率も少し向上します。 (Mark Shannon
  が gh-101578 で貢献しました。)

* 例外インスタンスを受け取る "_PyErr_ChainExceptions1" を追加しました
  。 これは、非推奨になった従来の API "_PyErr_ChainExceptions" を置き
  換えるものです。 (Mark Shannon が gh-101578 で貢献しました。)

* 例外のコンストラクターに渡された "args" を取得・変更する便利な関数と
  して、"PyException_GetArgs()" と "PyException_SetArgs()" を追加しま
  した。 (Mark Shannon が gh-101578 で貢献しました。)

* 従来の API "PyErr_Display()" を置き換える、例外インスタンスを受け取
  る "PyErr_DisplayException()" を追加しました。 (Irit Katriel が
  gh-102755 で貢献しました)。

* **PEP 683**: オブジェクトの参照カウント操作を省略できる *不死オブジ
  ェクト* を導入し、関連する C API の変更を行いました。

  * "_Py_IMMORTAL_REFCNT": The reference count that defines an object
    as immortal.

  * "_Py_IsImmortal": オブジェクトが不死の参照カウントを持つかどうかを
    調べます。

  * "PyObject_HEAD_INIT" This will now initialize reference count to
    "_Py_IMMORTAL_REFCNT" when used with "Py_BUILD_CORE".

  * "SSTATE_INTERNED_IMMORTAL" An identifier for interned unicode
    objects that are immortal.

  * "SSTATE_INTERNED_IMMORTAL_STATIC" An identifier for interned
    unicode objects that are immortal and static

  * "sys.getunicodeinternedsize" This returns the total number of
    unicode objects that have been interned. This is now needed for
    "refleak.py" to correctly track reference counts and allocated
    blocks

  (Eddie Elizondo が gh-84436 で貢献しました。)

* **PEP 684**: 新しい関数 "Py_NewInterpreterFromConfig()" と
  "PyInterpreterConfig" を追加しました。 独自の GIL を持つサブインター
  プリタを作成できます。 (詳しくは PEP 684: インタープリタごとの GIL
  を参照してください。) (Eric Snow が gh-104110 で貢献しました。)

* Limited C API バージョン 3.12 では、"Py_INCREF()" 関数と
  "Py_DECREF()" 関数を、実装の詳細を隠す不透明な関数呼び出しとして実装
  するようになりました。 (Victor Stinner が gh-105387 で貢献しました。
  )


Python 3.12 への移植
--------------------

* "Py_UNICODE*" 表現に基づく従来の Unicode API を削除しました。 UTF-8
  または "wchar_t*" に基づく API に移行してください。

* "PyArg_ParseTuple()" などの引数解析関数は、"Py_UNICODE*" に基づく書
  式 ("u"、"Z" など) をサポートしなくなりました。 "s"、"z"、"es"、"U"
  など、他の Unicode 用の書式に移行してください。

* すべての静的な組み込み型の "tp_weaklist" は、常に "NULL" になりまし
  た。 これは "PyTypeObject" の内部専用フィールドですが、直接アクセス
  しているコードがある場合に備えて、この変更を記載しています。 問題を
  避けるには、代わりに既存の公開 C API を使うことを検討してください。
  必要であれば、内部専用の "_PyObject_GET_WEAKREFS_LISTPTR()" マクロも
  使えます。

* 内部専用の "PyTypeObject.tp_subclasses" は、有効なオブジェクトポイン
  ターとは限らなくなりました。 これを反映するため、型を void* に変更し
  ました。 この内部専用フィールドに直接アクセスしているコードがある場
  合に備えて記載しています。

  サブクラスのリストを取得するには、例えば "PyObject_CallMethod()" を
  使って、Python の "__subclasses__()" メソッドを呼び出してください。

* "PyUnicode_FromFormat()" と "PyUnicode_FromFormatV()" に、より多くの
  書式化オプション (左揃え、8 進数、大文字の 16 進数、"intmax_t"、
  "ptrdiff_t"、"wchar_t" の C 文字列、可変の幅と精度) を追加しました。
  (Serhiy Storchaka が gh-98836 で貢献しました。)

* "PyUnicode_FromFormat()" と "PyUnicode_FromFormatV()" で認識できない
  書式文字があると、"SystemError" を設定するようになりました。 以前の
  バージョンでは、書式文字列の残りすべてをそのまま結果の文字列にコピー
  し、余分な引数をすべて無視していました。 (Serhiy Storchaka が
  gh-95781 で貢献しました。)

* "PyUnicode_FromFormat()" と "PyUnicode_FromFormatV()" の符号の位置が
  誤っていた問題を修正しました。 (Philip Georgi が gh-95504 で貢献しま
  した。)

* "__dict__" や弱参照のスロットを追加する拡張クラスでは、それぞれ
  "tp_dictoffset" と "tp_weaklistoffset" の代わりに
  "Py_TPFLAGS_MANAGED_DICT" と "Py_TPFLAGS_MANAGED_WEAKREF" を使ってく
  ださい。 "tp_dictoffset" と "tp_weaklistoffset" は引き続きサポートさ
  れますが、多重継承を完全にはサポートせず (gh-95589)、性能が劣る可能
  性もあります。 "Py_TPFLAGS_MANAGED_DICT" を宣言するクラスは、インス
  タンスの辞書を走査・クリアするために "_PyObject_VisitManagedDict()"
  と "_PyObject_ClearManagedDict()" を呼び出す必要があります。 弱参照
  をクリアするには、従来どおり "PyObject_ClearWeakRefs()" を呼び出して
  ください。

* The "PyUnicode_FSDecoder()" function no longer accepts bytes-like
  paths, like "bytearray" and "memoryview" types: only the exact
  "bytes" type is accepted for bytes strings. (Contributed by Victor
  Stinner in gh-98393.)

* "Py_CLEAR"、"Py_SETREF"、"Py_XSETREF" マクロは、引数を 1 回だけ評価
  するようになりました。 引数に副作用があっても、それが重複して起こる
  ことはなくなりました。 (Victor Stinner が gh-98724 で貢献しました。)

* インタープリタのエラーインジケーターは、常に正規化された状態になりま
  した。 "PyErr_SetObject()"、"PyErr_SetString()"、およびエラーインジ
  ケーターを設定する他の関数は、例外を保存する前に正規化するようになり
  ました。 (Mark Shannon が gh-101578 で貢献しました。)

* "_Py_RefTotal" は正確な総数を示すものではなくなり、ABI 互換性のため
  だけに残されています。 これは内部のグローバル変数で、デバッグビルド
  でしか利用できません。 使っている場合は、"_Py_GetGlobalRefTotal()"
  に切り替える必要があります。

* 以下の関数が、新しく作成する型に適したメタクラスを選択するようになり
  ました。

  * "PyType_FromSpec()"

  * "PyType_FromSpecWithBases()"

  * "PyType_FromModuleAndSpec()"

  メタクラスが "tp_new" をオーバーライドするクラスの作成は非推奨となり
  、Python 3.14 以降では認められなくなります。 これらの関数はメタクラ
  スの "tp_new" を無視するため、初期化が不完全になる可能性があることに
  注意してください。

  "PyType_FromMetaclass()" (Python 3.12 で追加) は、メタクラスが
  "tp_new" (Python の "__new__()") をオーバーライドするクラスの作成を
  、既に禁止しています。

  "tp_new" は "PyType_From*" 関数が行う処理のほぼすべてをオーバーライ
  ドするため、両者には互換性がありません。 クラス作成のいくつかの手順
  でメタクラスを無視する従来の動作は、一般に安全ではありません。 クラ
  スやメタクラスは、"tp_new" が呼び出されたことを前提とするためです。
  単純で汎用的な回避策はありませんが、以下のいずれかが役立つ場合があり
  ます。

  * メタクラスを変更できる場合は、そこで "tp_new" を使わないようにして
    ください。

    * 初期化を省略しても構わない場合は、代わりに "tp_init" で行えます
      。

    * メタクラスを Python からインスタンス化する必要がない場合は、
      "Py_TPFLAGS_DISALLOW_INSTANTIATION" フラグを使って、その
      "tp_new" を "NULL" に設定してください。 これにより
      "PyType_From*" 関数で使用可能になります。

  * "PyType_From*" 関数を使わない方法もあります。 C 固有の機能 (スロッ
    トやインスタンスサイズの設定) が不要なら、メタクラスを 呼び出して
    型を作成してください。

  * "tp_new" を安全に省略できると *分かっている* 場合は、Python から
    "warnings.catch_warnings()" を使って非推奨の警告を抑制してください
    。

* "PyOS_InputHook" と "PyOS_ReadlineFunctionPointer" が サブインタープ
  リタ で呼ばれなくなりました。 これらのコールバックは拡張モジュールの
  状態を取得する方法がなく、その利用側は一般にプロセス全体のグローバル
  な状態に依存しているためです。

  これにより、拡張が対応していないサブインタープリタや、まだ読み込まれ
  ていないサブインタープリタで動作してしまう状況も避けられます。 詳し
  くは gh-104668 を参照してください。

* 性能向上のため、"PyLongObject" の内部構造を変更しました。
  "PyLongObject" の内部は非公開ですが、一部の拡張モジュールで使われて
  います。 内部フィールドに直接アクセスせず、代わりに "PyLong_..." で
  始まる API 関数を使ってください。 単一のマシンワードに収まる
  "PyLongObject" の値に効率よくアクセスするため、2 つの新しい *不安定
  な* API 関数を提供します。

  * "PyUnstable_Long_IsCompact()"

  * "PyUnstable_Long_CompactValue()"

* "PyMem_SetAllocator()" で設定するカスタムアロケーターは、メモリドメ
  インにかかわらずスレッドセーフであることが必要になりました。 「フッ
  ク」を含め、独自の状態を持たないアロケーターは影響を受けません。 カ
  スタムアロケーターがまだスレッドセーフでなく、助言が必要な場合は、新
  しい GitHub issue を作成して "@ericsnowcurrently" に知らせてください
  。


非推奨
------

* **PEP 699** に従い、拡張モジュールで "PyDictObject" の
  "ma_version_tag" フィールドを使うことが非推奨になりました。 このフィ
  ールドにアクセスすると、コンパイル時にコンパイラーの警告が出ます。
  このフィールドは Python 3.14 で削除される予定です。 (Ramvikrams と
  Kumar Aditya が gh-101193 で貢献しました。 PEP は Ken Jin が執筆しま
  した。)

* 以下のグローバル設定変数が非推奨になりました。

  * "Py_DebugFlag": 代わりに "PyConfig.parser_debug" を使用

  * "Py_VerboseFlag": 代わりに "PyConfig.verbose" を使用

  * "Py_QuietFlag": 代わりに "PyConfig.quiet" を使用

  * "Py_InteractiveFlag": 代わりに "PyConfig.interactive" を使用

  * "Py_InspectFlag": 代わりに "PyConfig.inspect" を使用

  * "Py_OptimizeFlag": 代わりに "PyConfig.optimization_level" を使用

  * "Py_NoSiteFlag": 代わりに "PyConfig.site_import" を使用

  * "Py_BytesWarningFlag": 代わりに "PyConfig.bytes_warning" を使用

  * "Py_FrozenFlag": 代わりに "PyConfig.pathconfig_warnings" を使用

  * "Py_IgnoreEnvironmentFlag": 代わりに "PyConfig.use_environment" を
    使用

  * "Py_DontWriteBytecodeFlag": 代わりに "PyConfig.write_bytecode" を
    使用

  * "Py_NoUserSiteDirectory": 代わりに "PyConfig.user_site_directory"
    を使用

  * "Py_UnbufferedStdioFlag": 代わりに "PyConfig.buffered_stdio" を使
    用

  * "Py_HashRandomizationFlag": 代わりに "PyConfig.use_hash_seed" と
    "PyConfig.hash_seed" を使用

  * "Py_IsolatedFlag": 代わりに "PyConfig.isolated" を使用

  * "Py_LegacyWindowsFSEncodingFlag": 代わりに
    "PyPreConfig.legacy_windows_fs_encoding" を使用

  * "Py_LegacyWindowsStdioFlag": 代わりに
    "PyConfig.legacy_windows_stdio" を使用

  * "Py_FileSystemDefaultEncoding": 代わりに
    "PyConfig.filesystem_encoding" を使用

  * "Py_HasFileSystemDefaultEncoding": 代わりに
    "PyConfig.filesystem_encoding" を使用

  * "Py_FileSystemDefaultEncodeErrors": 代わりに
    "PyConfig.filesystem_errors" を使用

  * "Py_UTF8Mode": 代わりに "PyPreConfig.utf8_mode" を使用
    ("Py_PreInitialize()" を参照)

  代わりに "PyConfig" と "Py_InitializeFromConfig()" API を使ってくだ
  さい。 (Victor Stinner が gh-77782 で貢献しました。)

* ミュータブルな基底型を持つ "イミュータブルな型" の作成が非推奨になり
  、Python 3.14 ではできなくなります。 (gh-95388)

* "structmember.h" ヘッダーが非推奨になりました。 ただし引き続き利用で
  き、削除の予定はありません。

  その内容は "Python.h" をインクルードするだけで利用できるようになりま
  した。 名前に "Py" 接頭辞がなかったものには接頭辞を追加しています。

  * "PyMemberDef"、"PyMember_GetOne()"、"PyMember_SetOne()"

  * "Py_T_INT"、"Py_T_DOUBLE" などの型マクロ (従来の "T_INT"、
    "T_DOUBLE" など)

  * "Py_READONLY" フラグ (従来の "READONLY") と "Py_AUDIT_READ" フラグ
    (従来はすべて大文字)

  以下は "Python.h" から公開していません。

  * "T_OBJECT" (代わりに "Py_T_OBJECT_EX" を使用)

  * "T_NONE" (従来ドキュメントに記載されておらず、かなり癖のあるもの)

  * 何もしないマクロ "WRITE_RESTRICTED"。

  * "Py_AUDIT_READ" と同等のマクロ "RESTRICTED" と "READ_RESTRICTED"。

  * 一部の構成では、"Python.h" から "<stddef.h>" がインクルードされま
    せん。 "offsetof()" を使う場合は、明示的にインクルードする必要があ
    ります。

  非推奨のヘッダーは、元の内容を元の名前で引き続き提供します。 追加の
  インクルードや名前空間で区別されていないマクロが大きな問題でなければ
  、既存のコードを変更する必要はありません。

  (Alexander Belopolsky と Matthias Braun による先行作業を基に、Petr
  Viktorin が gh-47146 で貢献しました。)

* "PyErr_Fetch()" と "PyErr_Restore()" が非推奨になりました。 代わりに
  "PyErr_GetRaisedException()" と "PyErr_SetRaisedException()" を使っ
  てください。 (Mark Shannon が gh-101578 で貢献しました。)

* "PyErr_Display()" が非推奨になりました。 代わりに
  "PyErr_DisplayException()" を使ってください。 (Irit Katriel が
  gh-102755 で貢献しました)。

* "_PyErr_ChainExceptions" が非推奨になりました。 代わりに
  "_PyErr_ChainExceptions1" を使ってください。 (Irit Katriel が
  gh-102192 で貢献しました。)

* "PyType_FromSpec()"、"PyType_FromSpecWithBases()"、
  "PyType_FromModuleAndSpec()" を使って、メタクラスが "tp_new" をオー
  バーライドするクラスを作成することが非推奨になりました。 代わりにメ
  タクラスを呼び出してください。


Python 3.14 で削除予定
~~~~~~~~~~~~~~~~~~~~~~

* 拡張モジュール向けの "PyDictObject" の "ma_version_tag" フィールド
  (**PEP 699**、gh-101193)。

* ミュータブルな基底型を持つ "イミュータブルな型" の作成 (gh-95388)。


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


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

以下の 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 以降では不要です。


削除
----

* "token.h" ヘッダーファイルを削除しました。 公開されたトークナイザー
  の C API は、これまで一度もありませんでした。 "token.h" ヘッダーファ
  イルは Python 内部での使用だけを想定して設計されていました。 (Victor
  Stinner が gh-92651 で貢献しました。)

* 従来の Unicode API を削除しました。 詳しくは **PEP 623** を参照して
  ください。

  * "PyUnicode_WCHAR_KIND"

  * "PyUnicode_AS_UNICODE()"

  * "PyUnicode_AsUnicode()"

  * "PyUnicode_AsUnicodeAndSize()"

  * "PyUnicode_AS_DATA()"

  * "PyUnicode_FromUnicode()"

  * "PyUnicode_GET_SIZE()"

  * "PyUnicode_GetSize()"

  * "PyUnicode_GET_DATA_SIZE()"

* 関数マクロ "PyUnicode_InternImmortal()" を削除しました。 (Victor
  Stinner が gh-85858 で貢献しました。)
