What's New In Python 3.13
*************************

編集者:
   Adam Turner と Thomas Wouters

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

参考: **PEP 719** -- Python 3.13 リリーススケジュール


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

Python 3.13 はプログラミング言語 Python の安定版のリリースです。言語自
体への変更や、実装、標準ライブラリのアップデートが含まれます。一番大き
な変更点は、新しい 対話型インタープリタ 、 フリースレッドモード (**PEP
703**) 実行の実験的なサポート、 Just-In-Time コンパイラ (**PEP 744**)
です。

エラーメッセージも引き続き改善され、トレースバックがデフォルトで色付き
表示になりました。また、組み込み関数 "locals()" の戻り値のマッピングに
変更を加えた際の セマンティクスの定義 が追加されました。他にも、型引数
がデフォルト値をサポートするようになりました。

ライブラリでは、従来どおり使いやすさや正確性を改善するとともに、非推奨
の API やモジュールを削除しました。 Python 3.11 で非推奨となった古い標
準ライブラリモジュールのいくつかが、今回 削除されました (**PEP 594**)
。

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

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

インタープリタの改善点:

* 対話的インタープリタ の大幅改善と エラーメッセージの改善 。

* **PEP 667**: "locals()" が返すマッピングを変更した場合の 意味が定義
  されました。 Python のデバッガーなどのツールは、コードを並行実行して
  いる場合でも、最適化されたスコープ内のローカル変数をより確実に更新で
  きるようになりました。

* **PEP 703**: CPython 3.13 では *global interpreter lock* を無効化し
  た状態で実行する機能が実験的に追加されています。詳細は フリースレッ
  ドの CPython を参照してください。

* **PEP 744**: 簡易的な JIT コンパイラ が追加されました。現在、デフォ
  ルトでは無効になっています (が、今後有効になる可能性があります)。こ
  れによるパフォーマンスの向上は軽度ですが、以降のリリースで改善される
  見込みです。

* 新しい 対話的インタープリタ や トレースバック 、 doctest の出力にお
  いて色付き文字に対応しました。この機能は環境変数 "PYTHON_COLORS" ま
  たは "NO_COLOR" で無効化できます。

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

* "__static_attributes__" に、クラス本体の関数から "self.X" の形でアク
  セスされる属性の名前が格納されるようになりました。

* クラス定義の最初の行の行番号が "__firstlineno__" に格納されるように
  なりました。

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

* Python の *終了処理* において処理がブロックされているときに発生する
  新しい例外 "PythonFinalizationError" が追加されました。

* "argparse" モジュールでコマンドラインオプションや位置引数、サブコマ
  ンドを非推奨として指定する機能が追加されました。

* Z85 data のエンコード・デコードを行う関数 "base64.z85encode()" と
  "base64.z85decode()" が追加されました。

* 多くの組み込み型や "__replace__()" メソッドを定義している任意のクラ
  スに対して使用できる関数 "copy.replace()" が "copy" モジュールに追加
  されました。

* "dbm.sqlite3" モジュールが追加され、 "dbm" のデフォルトのバックエン
  ドがこれに変更されました。

* Linux のタイマー通知機能をもつファイル記述子を扱うための 様々な関数
  が "os" モジュールに追加されました。

* "random" モジュールが コマンドラインインターフェース を持つようにな
  りました。

セキュリティの改善点:

* "ssl.create_default_context()" がデフォルトのフラグとして
  "ssl.VERIFY_X509_PARTIAL_CHAIN" と "ssl.VERIFY_X509_STRICT" をセット
  するようになりました。

C API の改善点:

* "Py_mod_gil" スロットを使って、拡張モジュールが *GIL* を無効にした実
  行をサポートすることを示せるようになりました。

* PyTime C API が追加され、システムクロックへのアクセスが提供されるよ
  うになりました。

* "PyMutex" は1バイトのみを占有する新しい軽量ミューテックスとなりまし
  た。

* 新しい 関数群 が、C API において **PEP 669** の監視イベントを生成す
  るために追加されました。

新しい型ヒントの機能:

* **PEP 696**: 型引数 ("typing.TypeVar"、"typing.ParamSpec"、
  "typing.TypeVarTuple") がデフォルト値をサポートするようになりました
  。

* **PEP 702**: 新たに追加された "warnings.deprecated()" デコレータは、
  型システムおよび実行時における非推奨のマーク付けをサポートします。

* **PEP 705**: "typing.ReadOnly" は、型チェッカーに対して
  "typing.TypedDict" の項目を読み取り専用としてマークするために使用で
  きます。

* **PEP 742**: "typing.TypeIs" は、"typing.TypeGuard" の代替として、よ
  り直感的な型の絞り込みの挙動を提供します。

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

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

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

* "wasm32-wasi"  **tier 2** プラットフォームとしてサポートされるように
  なりました。

* "wasm32-emscripten" が公式にサポートされるプラットフォームではなくな
  りました。

重要な削除

* PEP 594: 残っていた 19 個の「不要なバッテリー」（旧式の標準ライブラ
  リモジュール）が標準ライブラリから削除されました。削除されたモジュー
  ルは次のとおりです: "aifc"、"audioop"、"cgi"、"cgitb"、"chunk"、
  "crypt"、"imghdr"、"mailcap"、"msilib"、"nis"、"nntplib"、
  "ossaudiodev"、"pipes"、"sndhdr"、"spwd"、"sunau"、"telnetlib"、"uu"
  、"xdrlib"。

* **2to3** ツールと "lib2to3" モジュールが削除されました（ Python 3.11
  で非推奨となりました）

* "tkinter.tix" モジュールが削除されました（ Python 3.6 で非推奨でした
  ）

* "locale.resetlocale()" 機能が削除されました。

* "typing.io" と "typing.re" 名前空間が削除されました。

* 連鎖した "classmethod" デスクリプタが削除されました。

リリーススケジュールの変更:

**PEP 602** （「Python の年間リリースサイクル」）が更新され、新しいリ
リースの完全サポート（バグ修正）期間が 2 年に延長されました。この更新
されたポリシーにより、次のような変更が適用されます:

* Python 3.9--3.12 は1年半のフルサポート期間ののち、3年半のセキュリテ
  ィ修正期間となります。

* Python 3.13 以降のバージョンでは2年間のフルサポート期間、その後3年間
  のセキュリティ修正期間となります。


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


改善された対話的インタープリタ
------------------------------

PyPy project のコードをベースに作られた新しい Python *interactive* シ
ェルがデフォルトで使われるようになりました。これからは、ターミナル上で
*REPL* を起動すると、以下の機能が使えます:

* 複数行の編集。履歴機能もサポート。

* "help" や "exit" 、  "quit" といったREPL 固有のコマンドが直接サポー
  トされるようになり、関数として呼び出す必要がなくなりました。

* デフォルトでプロンプトやトレースバックが 色付きで表示 されるようにな
  りました。

* インタラクティブなヘルプが "F1" で閲覧できるようになり、REPLとは別に
  コマンド履歴が記録されるようになりました。

* "F2" で履歴を閲覧できるようになりました。出力や プロンプト内の *>>>*
  と *...* は表示されません。

* "F3" で「ペーストモード」に切り替え、長いコードブロックをより簡単に
  貼り付けることができるようになりました ("F3" をもう一度押すことで通
  常のプロンプトに戻ることができます)。

新しいインタラクティブシェルを無効化するには、環境変数
"PYTHON_BASIC_REPL" をセットします。インタラクティブモードの詳細につい
ては 対話モード を参照してください。

（gh-111201 の Pablo Galindo Salgado, Łukasz Langa, and Lysandros
Nikolaou らの PyPy プロジェクトのコードに基づく貢献。 Windows へのサポ
ートは Dino Viehland, Anthony Shaw らによる貢献。）


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

* インタープリタは、端末にトレースバックを表示する際に デフォルトでカ
  ラー表示を使用するようになりました。この機能は、新たに導入された
  "PYTHON_COLORS" 環境変数、および標準の "NO_COLOR" と "FORCE_COLOR"
  環境変数を通じて 制御できます。（この機能は Pablo Galindo Salgado に
  より、gh-112730 にて貢献されました。）

* よくある間違いとして、標準ライブラリのモジュールと同じ名前のスクリプ
  トを作成してしまうことがあります。その結果エラーが発生した場合、
  Python はこれまでよりわかりやすいエラーメッセージを表示するようにな
  りました:

     $ python random.py
     Traceback (most recent call last):
       File "/home/me/random.py", line 1, in <module>
         import random
       File "/home/me/random.py", line 3, in <module>
         print(random.randint(5))
               ^^^^^^^^^^^^^^
     AttributeError: module 'random' has no attribute 'randint' (consider renaming '/home/me/random.py' since it has the same name as the standard library module named 'random' and prevents importing that standard library module)

  同様に、スクリプトがインポートしようとするサードパーティ製モジュール
  と同じ名前を持ち、それによってエラーが発生した場合にも、Python はよ
  りわかりやすいエラーメッセージを表示するようになりました:

     $ python numpy.py
     Traceback (most recent call last):
       File "/home/me/numpy.py", line 1, in <module>
         import numpy as np
       File "/home/me/numpy.py", line 3, in <module>
         np.array([1, 2, 3])
         ^^^^^^^^
     AttributeError: module 'numpy' has no attribute 'array' (consider renaming '/home/me/numpy.py' if it has the same name as a library you intended to import)

  (Shantanu Jain による gh-95754 での貢献)

* エラーメッセージは、関数に誤ったキーワード引数が渡された場合に、正し
  いキーワード引数を提案するようになりました:

     >>> "Better error messages!".split(max_split=1)
     Traceback (most recent call last):
       File "<python-input-0>", line 1, in <module>
         "Better error messages!".split(max_split=1)
         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
     TypeError: split() got an unexpected keyword argument 'max_split'. Did you mean 'maxsplit'?

  (Pablo Galindo Salgado と Shantanu Jain による gh-107944 での貢献)


フリースレッドの CPython
------------------------

*global interpreter lock* (GIL) を無効化するフリースレッドモードで
CPython を実行する機能が実験的に追加されました。これは実験的機能のため
、デフォルトで有効にはなっていません。フリースレッドモードで実行するに
は別の実行ファイルが必要で、通常 "python3.13t" か "python3.13t.exe" と
いう名前です。入手するには、公式の Windows 版・ macOS 版インストーラで
*フリースレッド* とラベルのついたビルド済みバイナリをインストールする
か、もしくは CPython のソースコードを "--disable-gil" オプション付きで
ビルドすることもできます。

フリースレッドで実行することで、CPU コアの上で並列にスレッドを実行でき
るため、使用可能な処理性能をフルに活かすことができます。フリースレッド
モードを使うだけでどのようなソフトウェアも恩恵を受けられるわけではない
ものの、スレッドを活用するように設計されたプログラムであれば、マルチコ
アのハードウェアでより高速に実行できることになります。ただし、 **フリ
ースレッドモードは実験的機能** であり、改善が行われている最中です。バ
グに遭遇したり、シングルスレッドのパフォーマンスが大きく悪化する可能性
があるので、注意してください。CPython のフリースレッド版ビルドでも、
GIL を有効にした実行に対応しており、環境変数 "PYTHON_GIL" かコマンドラ
インオプション "-X gil=1" によって有効化できます。

使用しているインタープリタがフリースレッドに対応しているかどうかは、
"python -VV" を実行するか、 "sys.version" に 「experimental free-
threading build」が含まれているかどうかで確認できます。新しく追加され
た "sys._is_gil_enabled()" 関数により、 GIL が現在のプロセスで実際に有
効になっているかを確認できます。

C-API 拡張モジュールは、フリースレッド用に別にビルドする必要があります
。 *GIL* 無効状態での実行に対応している拡張モジュールは、 "Py_mod_gil"
を使用してください。一段階初期化を使用する C 拡張は
"PyUnstable_Module_SetGIL()" を使用することで、 GIL 無効状態での実行に
対応しているかどうかを指定してください。このような仕組みをいずれも使用
しないモジュールがインポートされると、環境変数 "PYTHON_GIL" か "-X
gil=0" オプションが指定されていない限り、GIL が有効化されます。フリー
スレッド版の Python で C 拡張を含むパッケージをインストールするには、
pip のバージョン が 24.1 以上である必要があります。

この機能が実現に至ったのは、たくさんの個人開発者の方や組織のおかげです
。Python やサードパーティのプロジェクトに貢献する開発者の巨大なコミュ
ニティが、フリースレッドへの対応やテストを行ってくださいました。特に大
きな貢献のあった方は以下です: Sam Gross、Ken Jin、Donghee Na、Itamar
Oren、Matt Page、Brett Simmers、Dino Viehland、Carl Meyer、Nathan
Goldbaum、Ralf Gommers、Lysandros Nikolaou、ほか多数。このうちの多くが
Meta の従業員であり、Meta はこのプロジェクトに多大な技術的な支援をして
くださいました。

参考:

  **PEP 703** "Making the Global Interpreter Lock Optional in CPython"
  に、この取り組みの理由や関連情報が記載されています。

  Porting Extension Modules to Support Free-Threading: 拡張の開発者向
  けにコミュニティが保守している移植ガイド。


実験的な Just-in-time (JIT) コンパイラ:
---------------------------------------

CPython を "--enable-experimental-jit" オプション付きで *configure* し
てからビルドすると、just-in-time (JIT) コンパイラが追加され、Python プ
ログラムの実行が速くなる可能性があります。Windows では
"PCbuild/build.bat --experimental-jit" で JIT を有効化するか、 "--
experimental-jit-interpreter" でティア2インタープリタを有効化してくだ
さい。ビルドの必要事項やその他の補足情報は "Tools/jit/README.md" に掲
載されています 。

"--enable-experimental-jit" オプションには、次の値を省略可能な引数とし
て指定できます。 "--enable-experimental-jit" に値を指定しなければ、デ
フォルトは "yes" です。

* "no": Tier 2 と JIT の処理全体を無効にします。

* "yes": JIT を有効にします。 実行時に JIT を無効にするには、環境変数
  "PYTHON_JIT=0" を設定します。

* "yes-off": JIT をビルドしますが、デフォルトでは無効にします。 実行時
  に JIT を有効にするには、環境変数 "PYTHON_JIT=1" を設定します。

* "interpreter": Tier 2 インタープリタを有効にし、JIT は無効にします。
  "PYTHON_JIT=0" を設定して実行すると、このインタープリタを無効にでき
  ます。

内部構成の概要は次のとおりです。

* まず、特殊化された *Tier 1 バイトコード* から始めます。 詳しくは
  What’s New In Python 3.11 を参照してください。

* Tier 1 バイトコードの実行頻度が十分に高くなると、*Tier 2 IR* と呼ば
  れる新しい内部専用の中間表現 (IR) に変換されます。 これはマイクロオ
  ペレーション ("uops") と呼ばれることもあります。

* Tier 2 IR は Tier 1 と同じスタックベースの仮想マシンを使いますが、命
  令の形式は機械語への変換により適しています。

* Tier 2 IR には複数の最適化パスがあり、解釈実行や機械語への変換の前に
  適用されます。

* Tier 2 インタープリタもありますが、主に最適化処理の前半をデバッグす
  るためのものです。 Python の構成時に "--enable-experimental-
  jit=interpreter" を指定すると有効になります。

* JIT が有効な場合、最適化された Tier 2 IR は機械語に変換され、実行さ
  れます。

* 機械語への変換には *copy-and-patch* という手法を使います。 実行時の
  依存関係はありませんが、新たにビルド時に LLVM が必要になります。

参考: **PEP 744**

(JIT は Haoran Xu と Fredrik Kjolstad の論文に着想を得て Brandt Bucher
が作成。 Tier 2 IR は Mark Shannon と Guido van Rossum、Tier 2 オプテ
ィマイザーは Ken Jin によるもの。)


"locals()" の戻り値を変更した場合の意味の定義
---------------------------------------------

従来、"locals()" の戻り値を変更したときの結果は、Python の各実装が定義
することになっていました。 Python 3.13 からは **PEP 667** により、ほと
んどのコード実行スコープで CPython の従来の動作が標準化されます。 ただ
し、*最適化されたスコープ* (関数、ジェネレーター、コルーチン、内包表記
、ジェネレーター式) では動作が変わり、現在値が代入されているローカル変
数の独立したスナップショットを返すことが明確になります。 これには、そ
のスコープから参照する、クロージャーに取り込まれた非ローカル変数も含ま
れます。

最適化されたスコープでの "locals()" の意味の変更は、名前空間を明示的に
指定しなければ暗黙に "locals()" を対象とするコード実行関数 ("exec()"
や "eval()" など) のデフォルトの動作にも影響します。 以前のバージョン
では、コード実行関数を呼び出した後に "locals()" を呼び出して変更内容を
取得できるかどうかは実装依存でした。 特に CPython では、通常は期待どお
り動くように見えても、最適化されたスコープでは失敗する場合がありました
。 デバッガーやコード実行のトレースツールなど、ほかのコードがそのスコ
ープの共有スナップショットをリセットする可能性があったためです。 今後
は、最適化されたスコープのローカル変数の独立したスナップショットに対し
て常にコードが実行されるため、後から "locals()" を呼び出しても変更は見
えません。 このような場合に変更内容を取得するには、対象の関数に名前空
間への参照を明示的に渡す必要があります。 また、実行後の名前空間を返す
高水準のコード実行 API を使うように、対象のコードを変更する方が適切な
場合もあります (例えば、ディスク上の Python ファイルを実行する場合は
"runpy.run_path()")。

この変更の影響を受けるスコープで、デバッガーなどのツールがローカル変数
を確実に更新できるよう、"FrameType.f_locals" は、そのフレームのローカ
ル変数と、そこから参照する非ローカル変数に書き込みを直接反映するプロキ
シを返すようになりました。 従来は、更新が一貫せず実行時の意味も未定義
の、共有された "dict" インスタンスを返していました。

関連する C API の変更や非推奨化も含め、詳しくは **PEP 667** を参照して
ください。 影響を受ける Python API と C API の移植時の注意点も後述しま
す。

(PEP と実装は Mark Shannon と Tian Gao による gh-74929 での貢献。 ドキ
ュメントは Guido van Rossum と Alyssa Coghlan が更新。)


モバイルプラットフォームのサポート
----------------------------------

**PEP 730**: iOS が **PEP 11** のサポート対象プラットフォームになりま
した。 "arm64-apple-ios" と "arm64-apple-ios-simulator" を tier 3 とし
てサポートします (それぞれ、2013 年より後に発売された iPhone と iPad、
および Apple silicon ハードウェアで動作する Xcode の iOS シミュレータ
ー)。 "x86_64-apple-ios-simulator" (古い "x86_64" ハードウェアで動作す
る Xcode の iOS シミュレーター) は tier 3 の対象ではありませんが、ベス
トエフォートでサポートします。 (PEP の執筆と実装は Russell Keith-Magee
による gh-114099 での貢献。)

**PEP 738**: Android が **PEP 11** のサポート対象プラットフォームにな
りました。 "aarch64-linux-android" と "x86_64-linux-android" を tier 3
としてサポートします。 32 ビットの "arm-linux-androideabi" と "i686
-linux-android" は tier 3 の対象ではありませんが、ベストエフォートでサ
ポートします。 (PEP の執筆と実装は Malcolm Smith による gh-116622 での
貢献。)

参考: **PEP 730**, **PEP 738**


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

* コンパイラは、docstring の各行の先頭に共通する空白を取り除くようにな
  りました。 これにより、".pyc" ファイルなどの *バイトコードキャッシュ
  * のサイズが小さくなります。 例えば、SQLAlchemy 2.0 の
  "sqlalchemy.orm.session" では、ファイルサイズが約 5% 小さくなります
  。 この変更は、"doctest" など docstring を使うツールに影響します。

     >>> def spam():
     ...     """
     ...         This is a docstring with
     ...           leading whitespace.
     ...
     ...         It even has multiple paragraphs!
     ...     """
     ...
     >>> spam.__doc__
     '\nThis is a docstring with\n  leading whitespace.\n\nIt even has multiple paragraphs!\n'

  (Inada Naoki による gh-81283 での貢献。)

* クラススコープ内の アノテーションスコープ に、ラムダ式や内包表記を含
  められるようになりました。 クラススコープ内にある内包表記は、親のス
  コープにインライン展開されません。

     class C[T]:
         type Alias = lambda: T

  (Jelle Zijlstra による gh-109118 and gh-118160 での貢献。)

* "__future__" モジュールの相対インポートでは、future 文 の機能が有効
  にならなくなりました。 つまり、"from .__future__ import ..." 形式の
  文は通常の相対インポートとなり、特別な機能は有効になりません。
  (Jeremiah Gabriel Pascual による gh-118216 での貢献。)

* "else" ブロックで使うグローバル変数について、"except" ブロック内で
  "global" 宣言できるようになりました。 以前は、誤って "SyntaxError"
  が送出されていました。 (Irit Katriel による gh-111123 での貢献。)

* インポートの仕組みが凍結モジュールを無視するかどうかを決める新しい環
  境変数 "PYTHON_FROZEN_MODULES" が追加されました。 コマンドラインオプ
  ション "-X frozen_modules" と同等です。 (Yilei Yang による gh-111374
  での貢献。)

* 新しい環境変数 "PYTHON_PERF_JIT_SUPPORT" とコマンドラインオプション
  "-X perf_jit" により、フレームポインター を使わずに動作する perf プ
  ロファイラーのサポート が追加されました。 (Pablo Galindo による
  gh-118518 での貢献。)

* 新しい環境変数 "PYTHON_HISTORY" で、".python_history" ファイルの場所
  を変更できるようになりました。 (Levi Sabah, Zackery Spytz and Hugo
  van Kemenade による gh-73965 での貢献。)

* クラスに新しい "__static_attributes__" 属性が追加されました。 コンパ
  イラは、クラス本体の関数から "self.<name>" の形で代入される属性の名
  前をタプルにして、この属性に設定します。 (Irit Katriel による
  gh-115775 での貢献。)

* コンパイラは、クラス定義の最初の行の番号を格納する "__firstlineno__"
  属性をクラスに作成するようになりました。 (Serhiy Storchaka による
  gh-118465 での貢献。)

* 組み込み関数 "exec()" と "eval()" の *globals* と *locals* を、キー
  ワード引数として渡せるようになりました。 (Raphael Gaschignard による
  gh-105879 での貢献。)

* 組み込み関数 "compile()" に、新しいフラグ "ast.PyCF_OPTIMIZED_AST"
  が追加されました。 "ast.PyCF_ONLY_AST" と似ていますが、*optimize* 引
  数の値に応じて最適化した AST を返します。 (Irit Katriel による
  gh-108113 での貢献。)

* "property" オブジェクトに "__name__" 属性が追加されました。 (Eugene
  Toder による gh-101860 での貢献。)

* "RuntimeError" の派生クラスである新しい例外
  "PythonFinalizationError" が追加されました。 *終了処理* の間に操作が
  阻止されたことを示します。 次の呼び出し可能オブジェクトは、
  "RuntimeError" の代わりに "PythonFinalizationError" を送出するように
  なりました。

  * "_thread.start_new_thread()"

  * "os.fork()"

  * "os.forkpty()"

  * "subprocess.Popen"

  (Victor Stinner による gh-114570 での貢献。)

* "str.replace()" の *count* をキーワード引数として渡せるようになりま
  した。 (Hugo van Kemenade による gh-106487 での貢献。)

* 多くの関数で、ファイル記述子の引数にブール値を渡すと警告が出るように
  なりました。 これにより、一部の間違いをより早く見つけやすくなります
  。 (Serhiy Storchaka による gh-82626 での貢献。)

* "bz2"、"lzma"、"tarfile"、"zipfile" の圧縮ファイルやアーカイブのファ
  イルライクオブジェクトに、"name" 属性と "mode" 属性が追加されました
  。 (Serhiy Storchaka による gh-115961 での貢献。)


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

* "dbm.sqlite3": "dbm" 用の SQLite バックエンドです。 (Raymond
  Hettinger and Erlend E. Aasland による gh-100414 での貢献。)


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


argparse
--------

* "add_argument()" と "add_parser()" に *deprecated* 引数が追加され、
  コマンドラインオプション、位置引数、サブコマンドを非推奨にできるよう
  になりました。 (Serhiy Storchaka による gh-83648 での貢献。)


array
-----

* Unicode 文字用に型コード "'w'" ("Py_UCS4") が追加されました。 非推奨
  の型コード "'u'" の代わりに使用してください。 (Inada Naoki による
  gh-80480 での貢献。)

* "clear()" メソッドを実装し、"array.array" を "MutableSequence" に登
  録しました。 (Mike Zimin による gh-114894 での貢献。)


ast
---

* "ast" モジュールのノード型のコンストラクターは、受け取る引数の検査が
  より厳密になり、引数を省略した場合の動作がより直感的になりました。

  AST ノードの省略可能なフィールドを、インスタンスの構築時に引数として
  指定しない場合、そのフィールドには "None" が設定されるようになりまし
  た。 同様に、リストのフィールドを省略した場合は空のリストが設定され
  、"expr_context" フィールドを省略した場合は "Load()" がデフォルトに
  なります。 (以前は、いずれの場合も新しく構築された AST ノードのイン
  スタンスにその属性がありませんでした。)

  それ以外の場合に必須の引数を省略すると、ノードのコンストラクターは
  "DeprecationWarning" を出すようになりました。 Python 3.15 では例外を
  送出します。 同様に、AST ノードのフィールドに対応しないキーワード引
  数をコンストラクターに渡すことも非推奨になり、Python 3.15 では例外を
  送出します。

  これらの変更は、"ast.AST" のユーザー定義サブクラスには適用されません
  。 ただし、そのクラスが "AST._field_types" マッピングを定義して、新
  しい動作を明示的に選択した場合を除きます。

  (Jelle Zijlstra による gh-105858, gh-117486, and gh-118851 での貢献
  。)

* "ast.parse()" に省略可能な引数 *optimize* が追加され、その値が
  "compile()" に渡されるようになりました。 これにより、最適化された
  AST を取得できます。 (Irit Katriel による gh-108113 での貢献。)


asyncio
-------

* "asyncio.as_completed()" は、*asynchronous iterator* と、*待機可能オ
  ブジェクト* を返す通常の *iterator* の両方として使えるオブジェクトを
  返すようになりました。 非同期の反復で生成される待機可能オブジェクト
  には、渡した元のタスクや Future オブジェクトが含まれるため、結果と完
  了したタスクを対応付けやすくなります。 (Justin Arthur による
  gh-77714 での貢献。)

* "asyncio.loop.create_unix_server()" は、サーバーを閉じると Unix ソケ
  ットを自動的に削除するようになりました。 (Pierre Ossman による
  gh-111246 での貢献。)

* "DatagramTransport.sendto()" を空の bytes オブジェクトで呼び出すと、
  長さゼロのデータグラムを送信するようになりました。 トランスポートの
  フロー制御でも、バッファーサイズの計算にデータグラムのヘッダーを含め
  るようになりました。 (Jamie Phan による gh-115199 での貢献。)

* キューの終了を管理するための "Queue.shutdown" と "QueueShutDown" が
  追加されました。 (Laurie Opperman and Yves Duprat による gh-104228
  での貢献。)

* asyncio のサーバーをより強制的に閉じる "Server.close_clients()" メソ
  ッドと "Server.abort_clients()" メソッドが追加されました。 (Pierre
  Ossman による gh-113538 での貢献。)

* "StreamReader.readuntil()" に区切り文字列のタプルを渡せるようになり
  、そのいずれかが見つかると読み取りが止まります。 (Bruce Merry による
  gh-81322 での貢献。)

* 外部からのキャンセルと内部のキャンセルが競合した場合の "TaskGroup"
  の動作が改善されました。 例えば、2 つのタスクグループが入れ子になっ
  ていて、それぞれの子タスクで同時に例外が発生した場合、内側のタスクグ
  ループが外側の内部キャンセルを取り込んでしまい、外側のタスクグループ
  が停止したままになることがありました。

  タスクグループが外部からキャンセルされ、同時に "ExceptionGroup" も送
  出する必要がある場合は、親タスクの "cancel()" メソッドを呼び出すよう
  になりました。 これにより、次の "await" で "CancelledError" が確実に
  送出され、キャンセルが失われなくなります。

  この変更により、タスクグループがキャンセル回数 ("cancelling()") を保
  持するようになったという利点もあります。

  一部の特殊なケースに対応するため、キャンセル回数がゼロになると、
  "uncancel()" が非公開の "_must_cancel" フラグをリセットすることがあ
  ります。

  (Arthur Tacca が gh-116720 で報告した問題をきっかけとする改善。)

* アクティブでない "TaskGroup" の "TaskGroup.create_task()" を呼び出す
  と、渡されたコルーチンを閉じるようになりました (これにより、そのコル
  ーチンが一度も await されなかったという "RuntimeWarning" を防ぎます)
  。 (Arthur Tacca and Jason Zhang による gh-115957 での貢献。)

* "create_task" という名前の関数やメソッドに、タスクのコンストラクター
  へそのまま渡す新しい "**kwargs" 引数が追加されました。 この変更は
  3.13.3 に誤って追加され、カスタムタスクファクトリーの API の契約を破
  っていました。 いくつかのサードパーティー製タスクファクトリーは、こ
  れを回避する処理を実装しました。 3.13.4 以降のリリースでは、再び以前
  のファクトリーの契約に従います (3.14 まで)。 回避処理が引き続き動作
  するよう、追加された "**kwargs" 引数によって、"Task" やカスタムタス
  クファクトリーへ追加のキーワード引数を渡すことは引き続き可能です。

  この変更の対象は、"asyncio.create_task()"、
  "asyncio.loop.create_task()"、"asyncio.TaskGroup.create_task()" です
  。 (Thomas Grainger による gh-128307 での貢献。)


base64
------

* "bytes" を Z85 data にエンコードする "z85encode()" と、Z85 でエンコ
  ードされたデータを "bytes" にデコードする "z85decode()" が追加されま
  した。 (Matan Perelman による gh-75299 での貢献。)


compileall
----------

* ワーカースレッド数とワーカープロセス数のデフォルト値は、
  "os.cpu_count()" ではなく "os.process_cpu_count()" を使って選ばれる
  ようになりました。 (Victor Stinner による gh-109649 での貢献。)


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

* ワーカースレッド数とワーカープロセス数のデフォルト値は、
  "os.cpu_count()" ではなく "os.process_cpu_count()" を使って選ばれる
  ようになりました。 (Victor Stinner による gh-109649 での貢献。)


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

* "ConfigParser" が名前のないセクションをサポートし、最上位にキーと値
  のペアを書けるようになりました。 新しい *allow_unnamed_section* 引数
  で有効にできます。 (Pedro Sousa Lacerda による gh-66449 での貢献。)


copy
----

* 新しい "replace()" 関数と "replace プロトコル" により、オブジェクト
  の一部を変更したコピーを簡単に作れるようになりました。 特にイミュー
  タブルなオブジェクトを扱う場合に役立ちます。 次の型が "replace()" 関
  数をサポートし、replace プロトコルを実装しています。

  * "collections.namedtuple()"

  * "dataclasses.dataclass"

  * "datetime.datetime", "datetime.date", "datetime.time"

  * "inspect.Signature", "inspect.Parameter"

  * "types.SimpleNamespace"

  * コードオブジェクト

  ユーザー定義クラスでも、"__replace__()" メソッドを定義することで
  "copy.replace()" をサポートできます。 (Serhiy Storchaka による
  gh-108751 での貢献。)


ctypes
------

* 必要な内部リファクタリングに伴い、内部のメタクラスの初期化は
  "__new__" ではなく "__init__" で行われるようになりました。 これらの
  内部メタクラスをサブクラス化して独自の初期化を行うプロジェクトは影響
  を受けます。 一般には、次のように対応します。

  * "__new__" 内で "super().__new__" を呼び出した後に行っていた独自の
    処理を、"__init__" に移してください。

  * クラスを作成するには、メタクラスの "__new__" メソッドだけでなく、
    メタクラス自体を呼び出してください。

  議論や、影響を受けたプロジェクトでの変更へのリンクは gh-124520 を参
  照してください。

* "ctypes.Structure" オブジェクトに新しい "_align_" 属性が追加され、メ
  モリと構造体の間でデータを変換する際のアラインメントを明示的に指定で
  きるようになりました。 (Matt Sanderson による gh-112433 での貢献。)


dbm
---

* SQLite バックエンドを実装する新しいモジュール "dbm.sqlite3" が追加さ
  れ、"dbm" のデフォルトのバックエンドになりました。 (Raymond
  Hettinger and Erlend E. Aasland による gh-100414 での貢献。)

* GDBM と NDBM のデータベースオブジェクトに新しい "clear()" メソッドが
  追加され、データベースの全項目を削除できるようになりました。
  (Donghee Na による gh-107122 での貢献。)


dis
---

* "dis" モジュールの関数の出力が変わり、ジャンプ先や例外ハンドラーをオ
  フセットではなく論理的なラベルで示すようになりました。 新しいコマン
  ドラインオプション "-O" または *show_offsets* 引数で、オフセットも追
  加できます。 (Irit Katriel による gh-112137 での貢献。)

* "get_instructions()" は、キャッシュエントリーを独立した命令として表
  さなくなりました。 代わりに、"Instruction" の新しい *cache_info* フ
  ィールドに含めて返します。 "get_instructions()" の *show_caches* 引
  数は非推奨となり、指定しても効果がなくなりました。 (Irit Katriel に
  よる gh-112962 での貢献。)


doctest
-------

* "doctest" の出力はデフォルトで色付きになりました。 新しい環境変数
  "PYTHON_COLORS" と、広く使われる環境変数 "NO_COLOR" および
  "FORCE_COLOR" で制御できます。 色の制御 も参照してください。 (Hugo
  van Kemenade による gh-117225 での貢献。)

* "DocTestRunner.run()" メソッドがスキップしたテストの数を数えるように
  なりました。 "DocTestRunner.skips" 属性と "TestResults.skipped" 属性
  が追加されました。 (Victor Stinner による gh-108794 での貢献。)


email
-----

* 改行を含むヘッダーは、出力時に引用符で囲まれるようになりました。
  "generator" は、折り返しや区切りが不適切で、複数のヘッダーとして解析
  されたり隣接するデータと結合されたりするヘッダーの直列化 (書き出し)
  を拒否するようになりました。 この安全機能を無効にする必要がある場合
  は、"verify_generated_headers" を設定してください。 (Bas Bloemsaat
  and Petr Viktorin による gh-121650 での貢献。)

* "getaddresses()" と "parseaddr()" は、不正なメールアドレスに遭遇した
  際、不正確かもしれない値ではなく "('', '')" のペアを返す場合が増えま
  した。 両関数に省略可能な *strict* 引数が追加されました (デフォルト
  は "True")。 従来の動作 (形式の不正な入力を受け付ける) にするには、
  "strict=False" を指定してください。 *strict* 引数が利用可能かどうか
  は、"getattr(email.utils, 'supports_strict_parsing', False)" で調べ
  られます。 (**CVE 2023-27043** の修正を改善するための、Thomas Dwyer
  と Victor Stinner による gh-102988 での貢献。)


enum
----

* "EnumType" のサブクラス化をよりよくサポートするため、"EnumDict" が公
  開されました。


fractions
---------

* "Fraction" オブジェクトが、埋める文字、配置、符号の扱い、最小幅、桁
  のグループ化について、標準の 書式指定ミニ言語 の規則をサポートするよ
  うになりました。 (Mark Dickinson による gh-111320 での貢献。)


glob
----

* シェル形式のワイルドカードを含むパスの指定を正規表現に変換する
  "translate()" 関数が追加されました。 (Barney Gale による gh-72904 で
  の貢献。)


importlib
---------

* "importlib.resources" の次の関数で、複数の位置引数を使い、リソースの
  ディレクトリ (またはツリー) にアクセスできるようになりました (テキス
  トを読み取る関数の *encoding* と *errors* はキーワード専用引数になり
  ました)。

  * "is_resource()"

  * "open_binary()"

  * "open_text()"

  * "path()"

  * "read_binary()"

  * "read_text()"

  これらの関数は非推奨ではなくなり、削除の予定もなくなりました。 (Petr
  Viktorin による gh-116608 での貢献。)

* "contents()" は、すべての機能を備えた "Traversable" API を推奨するた
  め、引き続き非推奨です。 ただし、削除する予定はなくなりました。
  (Petr Viktorin による gh-116608 での貢献。)


io
--

* "IOBase" のファイナライザーは、"close()" メソッドが送出するすべての
  エラーを "sys.unraisablehook" で記録するようになりました。 以前は、
  デフォルトではエラーを黙って無視し、Python 開発モード または Python
  のデバッグビルド を使う場合だけ記録していました。 (Victor Stinner に
  よる gh-62948 での貢献。)


ipaddress
---------

* IPv4 射影 IPv6 アドレスを返す "IPv4Address.ipv6_mapped" プロパティが
  追加されました。 (Charles Machalow による gh-109466 での貢献。)

* "IPv4Address"、"IPv6Address"、"IPv4Network"、"IPv6Network" の
  "is_global" と "is_private" の動作を修正しました。 (Jakub Stasiak に
  よる gh-113171 での貢献。)


itertools
---------

* "batched()" に新しい *strict* 引数が追加されました。 これを指定する
  と、最後のバッチが指定されたバッチサイズより短い場合に "ValueError"
  を送出します。 (Raymond Hettinger による gh-113202 での貢献。)


marshal
-------

* モジュールの関数に *allow_code* 引数が追加されました。
  "allow_code=False" を渡すと、Python のバージョン間で互換性のないコー
  ドオブジェクトの直列化と逆直列化を防げます。 (Serhiy Storchaka によ
  る gh-113626 での貢献。)


math
----

* 新しい "fma()" 関数は、融合積和演算を行います。 "x * y + z" を丸め 1
  回だけで計算するため、途中で精度が失われるのを避けられます。 C99 の
  "fma()" 関数をラップし、特殊なケースでは IEEE 754 の
  "fusedMultiplyAdd" 演算の仕様に従います。 (Mark Dickinson and Victor
  Stinner による gh-73468 での貢献。)


mimetypes
---------

* ファイルシステムのパスから MIME 型を推測する "guess_file_type()" 関
  数が追加されました。 "guess_type()" にパスを渡すことは *soft
  deprecated* になりました。 (Serhiy Storchaka による gh-66543 での貢
  献。)


mmap
----

* Windows でファイルシステムのエラーやアクセス違反によってマップされた
  メモリにアクセスできなくなっても、"mmap" がクラッシュしないようにな
  りました。 (Jannis Weigend による gh-118209 での貢献。)

* "mmap" に "seekable()" メソッドが追加され、シーク可能なファイルライ
  クオブジェクトが必要な場合に使えるようになりました。 "seek()" メソッ
  ドは、移動後の絶対位置を返すようになりました。 (Donghee Na and
  Sylvie Liberman による gh-111835 での貢献。)

* "mmap" に UNIX 専用の *trackfd* 引数が追加され、ファイル記述子を複製
  するかどうかを制御できるようになりました。 偽にすると、*fileno* で指
  定されたファイル記述子は複製されません。 (Zackery Spytz and Petr
  Viktorin による gh-78502 での貢献。)


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

* ワーカースレッド数とワーカープロセス数のデフォルト値は、
  "os.cpu_count()" ではなく "os.process_cpu_count()" を使って選ばれる
  ようになりました。 (Victor Stinner による gh-109649 での貢献。)


os
--

* 現在のプロセスで、呼び出し元のスレッドが利用できる論理 CPU コア数を
  取得する "process_cpu_count()" 関数が追加されました。 (Victor
  Stinner による gh-109649 での貢献。)

* "cpu_count()" と "process_cpu_count()" の結果を、新しい環境変数
  "PYTHON_CPU_COUNT" またはコマンドラインオプション "-X cpu_count" で
  上書きできるようになりました。 このオプションは、アプリケーションの
  コードやコンテナ自体を変更せずに、コンテナシステムの CPU リソースを
  制限したい場合に役立ちます。 (Donghee Na による gh-109595 での貢献。
  )

* Linux の *タイマーファイル記述子* の 低水準インターフェース として、
  "timerfd_create()"、"timerfd_settime()"、"timerfd_settime_ns()"、
  "timerfd_gettime()"、"timerfd_gettime_ns()"、"TFD_NONBLOCK"、
  "TFD_CLOEXEC"、"TFD_TIMER_ABSTIME"、"TFD_TIMER_CANCEL_ON_SET" が追加
  されました。 (Masaru Tsuchiyama による gh-108277 での貢献。)

* "lchmod()" and the *follow_symlinks* argument of "chmod()" are both
  now available on Windows. Note that the default value of
  *follow_symlinks* in "lchmod()" is "False" on Windows. (Contributed
  by Serhiy Storchaka in gh-59616.)

* Windows でも "fchmod()" と、"chmod()" へのファイル記述子の指定が使え
  るようになりました。 (Serhiy Storchaka による gh-113191 での貢献。)

* Windows で "mkdir()" と "makedirs()" の *mode* に "0o700" を渡し、新
  しいディレクトリにアクセス制御を適用できるようになりました。 これは
  "tempfile.mkdtemp()" にも間接的に影響し、**CVE 2024-4030** の緩和策
  になります。 *mode* のほかの値は引き続き無視されます。 (Steve Dower
  による gh-118486 での貢献。)

* "posix_spawn()" の *env* 引数に "None" を指定すると、新しいプロセス
  が現在のプロセスの環境を使うようになりました。 (Jakub Kulik による
  gh-113119 での貢献。)

* "posix_spawn_file_actions_addclosefrom_np()" をサポートするプラット
  フォームで、"posix_spawn()" の *file_actions* 引数に
  "POSIX_SPAWN_CLOSEFROM" 属性を使えるようになりました。 (Jakub Kulik
  による gh-113117 での貢献。)


os.path
-------

* 現在のシステムでパスが予約されているかを調べる "isreserved()" が追加
  されました。 この関数は Windows でのみ利用できます。 (Barney Gale に
  よる gh-88569 での貢献。)

* Windows の "isabs()" は、スラッシュ ("\" または "/") ちょうど 1 個で
  始まるパスを、絶対パスと見なさなくなりました。 (Barney Gale and Jon
  Foster による gh-44626 での貢献。)

* "realpath()" は、ファイルにアクセスできない場合でも MS-DOS 形式のフ
  ァイル名を解決するようになりました。 (Moonsik Park による gh-82367
  での貢献。)


pathlib
-------

* パス操作がサポートされていない場合に "NotImplementedError" の代わり
  に送出する "UnsupportedOperation" が追加されました。 (Barney Gale に
  よる gh-89812 での貢献。)

* 'file' URI ("file:///") から "Path" オブジェクトを作成する新しいコン
  ストラクター "Path.from_uri()" が追加されました。 (Barney Gale によ
  る gh-107465 での貢献。)

* "PurePath.full_match()" が追加され、再帰的なワイルドカード「"**"」を
  含むシェル形式のワイルドカードで、パスを照合できるようになりました。
  (Barney Gale による gh-73435 での貢献。)

* 低水準のパス解析と結合に使う "os.path" の実装を格納するクラス属性
  "PurePath.parser" が追加されました。 値は "posixpath" または
  "ntpath" です。

* "Path.glob()" と "rglob()" にキーワード専用引数 *recurse_symlinks*
  が追加されました。 (Barney Gale による gh-77609 での貢献。)

* "Path.glob()" と "rglob()" は、「"**"」で終わるパターンを指定すると
  、ファイルとディレクトリを返すようになりました。 以前はディレクトリ
  だけを返していました。 (Barney Gale による gh-70303 での貢献。)

* "Path.is_file"、"Path.is_dir"、"Path.owner()"、"Path.group()" にキー
  ワード専用引数 *follow_symlinks* が追加されました。 (Barney Gale に
  よる gh-105793 and Kamil Turek in gh-107962 での貢献。)


pdb
---

* "breakpoint()" と "set_trace()" は、次のコード行を実行するときではな
  く、直ちにデバッガーに入るようになりました。 これにより、コンテキス
  トの末尾に "breakpoint()" がある場合に、コンテキストを抜けてから停止
  することを防ぎます。 (Tian Gao による gh-118579 での貢献。)

* "sys.flags.safe_path" が設定されている場合、"sys.path[0]" をデバッグ
  対象のスクリプトのディレクトリに置き換えなくなりました。 (Tian Gao
  and Christian Walther による gh-111762 での貢献。)

* "zipapp" をデバッグ対象にできるようになりました。 (Tian Gao による
  gh-118501 での貢献。)

* Pdb に新しい "exceptions [exc_number]" コマンドが追加され、"pm()" に
  よる事後デバッグ中に、連鎖した例外の間を移動できるようになりました。
  (Matthias Bussonnier による gh-106676 での貢献。)

* pdb のコマンドと同じ文字列で始まる式や文が、正しく識別されて実行され
  るようになりました。 (Tian Gao による gh-108464 での貢献。)


queue
-----

* キューの終了を管理するための "Queue.shutdown" と "ShutDown" が追加さ
  れました。 (Laurie Opperman and Yves Duprat による gh-104750 での貢
  献。)


random
------

* コマンドラインインターフェース が追加されました。 (Hugo van Kemenade
  による gh-118131 での貢献。)


re
--

* 意味を明確にするため、"re.error" の名前が "PatternError" に変わりま
  した。 後方互換性のため "re.error" も残されています。


shutil
------

* "chown()" でキーワード引数 *dir_fd* と *follow_symlinks* がサポート
  されました。 (Berker Peksag and Tahia K による gh-62308 での貢献。)


site
----

* ".pth" ファイルは、まず UTF-8 でデコードし、失敗した場合に *locale
  encoding* でデコードするようになりました。 (Inada Naoki による
  gh-117802 での貢献。)


sqlite3
-------

* "Connection" オブジェクトを明示的に "閉じなかった" 場合、
  "ResourceWarning" が出るようになりました。 (Erlend E. Aasland による
  gh-105539 での貢献。)

* "Connection.iterdump()" にキーワード専用引数 *filter* が追加され、ダ
  ンプするデータベースオブジェクトを絞り込めるようになりました。
  (Mariusz Felisiak による gh-91602 での貢献。)


ssl
---

* "create_default_context()" API のデフォルトのフラグに、
  "VERIFY_X509_PARTIAL_CHAIN" と "VERIFY_X509_STRICT" が含まれるように
  なりました。

  注釈:

    "VERIFY_X509_STRICT" は、基盤の OpenSSL 実装なら受け付ける場合があ
    る **RFC 5280** 以前の証明書や不正な形式の証明書を拒否することがあ
    ります。 無効にすることは推奨しませんが、次のようにすれば無効にで
    きます。

       import ssl

       ctx = ssl.create_default_context()
       ctx.verify_flags &= ~ssl.VERIFY_X509_STRICT

  (William Woodruff による gh-112389 での貢献。)


statistics
----------

* カーネル密度推定を行う "kde()" が追加されました。 これにより、一定個
  数の離散的な標本から、連続的な確率密度関数を推定できます。 (Raymond
  Hettinger による gh-115863 での貢献。)

* "kde()" で推定した確率密度関数から標本を生成する "kde_random()" が追
  加されました。 (Raymond Hettinger による gh-115863 での貢献。)


subprocess
----------

* "subprocess" モジュールは、より多くの状況で "posix_spawn()" 関数を使
  うようになりました。

  特に、*close_fds* が "True" (デフォルト) の場合、C ライブラリが
  "posix_spawn_file_actions_addclosefrom_np()" を提供していれば
  "posix_spawn()" を使います。 これには最近の Linux、FreeBSD、Solaris
  が含まれます。 Linux では、既存の "vfork()" を使ったコードと同程度の
  性能になると見込まれます。

  "subprocess" に "posix_spawn()" を一切使わせない必要がある場合は、非
  公開の制御用属性 "subprocess._USE_POSIX_SPAWN" を "False" に設定でき
  ます。 設定した場合は、API の選択処理を改善できるよう、その理由とプ
  ラットフォームの詳細を 課題トラッカー で報告してください。 (Jakub
  Kulik による gh-113117 での貢献。)


sys
---

* 文字列がインターンされているかを調べる "_is_interned()" 関数が追加さ
  れました。 すべての Python 実装にこの関数が存在する保証はありません
  。 (Serhiy Storchaka による gh-78573 での貢献。)


tempfile
--------

* Windows では "os.mkdir()" の変更により、"tempfile.mkdtemp()" が使う
  デフォルトのモード "0o700" が、新しいディレクトリへのアクセスを制限
  するようになりました。 これは **CVE 2024-4030** の緩和策です。
  (Steve Dower による gh-118486 での貢献。)


time
----

* Windows の "monotonic()" は、分解能 15.6 ミリ秒の "GetTickCount64()"
  クロックの代わりに、分解能 1 マイクロ秒の
  "QueryPerformanceCounter()" クロックを使うようになりました。 (Victor
  Stinner による gh-88494 での貢献。)

* Windows の "time()" は、分解能 15.6 ミリ秒の
  "GetSystemTimeAsFileTime()" クロックの代わりに、分解能 1 マイクロ秒
  の "GetSystemTimePreciseAsFileTime()" クロックを使うようになりました
  。 (Victor Stinner による gh-63207 での貢献。)


tkinter
-------

* "tkinter" のウィジェットに、"tk_busy_hold()"、"tk_busy_configure()"
  、"tk_busy_cget()"、"tk_busy_forget()"、"tk_busy_current()"、
  "tk_busy_status()" メソッドが追加されました。 (Miguel, klappnase and
  Serhiy Storchaka による gh-72684 での貢献。)

* "tkinter" のウィジェットメソッド "wm_attributes()" で、例えば
  "w.wm_attributes('alpha')" のように、属性名の先頭のマイナスを省略し
  てウィンドウ属性を取得できるようになりました。 また、例えば
  "w.wm_attributes(alpha=0.5)" のように、設定する属性と値をキーワード
  引数で指定できるようになりました。 (Serhiy Storchaka による gh-43457
  での貢献。)

* "wm_attributes()" に省略可能なキーワード専用引数
  *return_python_dict* が追加され、属性を "dict" として返せるようにな
  りました。 (Serhiy Storchaka による gh-43457 での貢献。)

* "Text.count()" に省略可能なキーワード専用引数 *return_ints* が追加さ
  れ、単一の "int" を返せるようになりました。 この引数を使わない場合、
  単一のカウントは 1 要素のタプルまたは "None" として返されます。
  (Serhiy Storchaka による gh-97928 での貢献。)

* "tkinter.ttk.Style" の "element_create()" メソッドで、要素型 "vsapi"
  がサポートされました。 (Serhiy Storchaka による gh-68166 での貢献。)

* Tkinter のウィジェットに "after_info()" メソッドが追加されました。
  (Cheryl Sabella による gh-77020 での貢献。)

* "PhotoImage" に新しい "copy_replace()" メソッドが追加され、画像の領
  域を別の画像にコピーできるようになりました。 その際、ピクセルの拡大
  、間引き、または両方を行えます。 (Serhiy Storchaka による gh-118225
  での貢献。)

* "PhotoImage" の "copy()"、"zoom()"、"subsample()" メソッドに
  *from_coords* 引数が追加されました。 "PhotoImage" の "copy()" メソッ
  ドには *zoom* 引数と *subsample* 引数も追加されました。 (Serhiy
  Storchaka による gh-118225 での貢献。)

* "PhotoImage" に、ファイルから画像を読み込む "read()" メソッドと、画
  像データを取得する "data()" メソッドが追加されました。 "write()" メ
  ソッドには *background* 引数と *grayscale* 引数が追加されました。
  (Serhiy Storchaka による gh-118271 での貢献。)


traceback
---------

* "TracebackException" に、*exc_type* の表示用文字列を保持する
  "exc_type_str" 属性が追加されました。 型オブジェクト自体を保持する
  "exc_type" 属性は非推奨になりました。 "exc_type" を保存するかどうか
  を指定する *save_exc_type* 引数 (デフォルトは "True") が追加されまし
  た。 (Irit Katriel による gh-112332 での貢献。)

* "TracebackException.format_exception_only()" にキーワード専用引数
  *show_group* が追加され、"BaseExceptionGroup" インスタンスに入れ子に
  なった例外を再帰的に書式化できるようになりました。 (Irit Katriel に
  よる gh-105292 での貢献。)


types
-----

* "SimpleNamespace" に、名前空間の属性を初期化する位置引数を 1 個渡せ
  るようになりました。 この引数は、マッピングか、キーと値のペアのイテ
  ラブルでなければなりません。 (Serhiy Storchaka による gh-108191 での
  貢献。)


typing
------

* **PEP 705**: 特別な型付けの構文要素 "ReadOnly" が追加され、
  "TypedDict" の項目を型チェッカーに対して読み取り専用と示せるようにな
  りました。

* **PEP 742**: 型チェッカーに型の絞り込み方を伝えるための構文要素
  "TypeIs" が追加されました。

* "typing" モジュールの一部の引数のデフォルト値を表すセンチネルオブジ
  ェクト "NoDefault" が追加されました。 (Jelle Zijlstra による
  gh-116126 での貢献。)

* "typing.Protocol" を定義するメンバーの集合を返す
  "get_protocol_members()" が追加されました。 (Jelle Zijlstra による
  gh-104873 での貢献。)

* クラスが "Protocol" かどうかを調べる "is_protocol()" が追加されまし
  た。 (Jelle Zijlstra による gh-104873 での貢献。)

* "ClassVar" を "Final" の中に入れ子にできるようになりました。 逆の入
  れ子も可能です。 (Mehdi Drissi による gh-89547 での貢献。)


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

* Unicode データベースが バージョン 15.1.0 に更新されました。 (James
  Gerity による gh-109559 での貢献。)


venv
----

* 仮想環境のディレクトリに、ソース管理システム (SCM) の無視するファイ
  ルの設定を作成できるようになりました。 デフォルトでは Git に対応して
  います。 API ("EnvBuilder" と "create()") では明示的に有効にする方式
  で、ほかの SCM に対応するよう拡張できます。 CLI ではデフォルトで有効
  になり、"--without-scm-ignore-files" で無効にできます。 (Brett
  Cannon による gh-108125 での貢献。)


warnings
--------

* **PEP 702**: 新しい "warnings.deprecated()" デコレーターにより、
  *static type checker* に非推奨であることを伝え、非推奨のクラスや関数
  が使われた際に警告できるようになりました。 デコレートした関数やクラ
  スを実行時に使うと、"DeprecationWarning" を出すこともできます。
  (Jelle Zijlstra による gh-104003 での貢献。)


xml
---

* 次の 5 つのメソッドが追加され、Expat 2.6.0 以降の再解析の遅延 (**CVE
  2023-52425**) を制御できるようになりました。

  * "xml.etree.ElementTree.XMLParser.flush()"

  * "xml.etree.ElementTree.XMLPullParser.flush()"

  * "xml.parsers.expat.xmlparser.GetReparseDeferralEnabled()"

  * "xml.parsers.expat.xmlparser.SetReparseDeferralEnabled()"

  * "xml.sax.expatreader.ExpatParser.flush()"

  (Sebastian Pipping による gh-115623 での貢献。)

* "iterparse()" が返すイテレーターに、明示的な後処理のための "close()"
  メソッドが追加されました。 (Serhiy Storchaka による gh-69893 での貢
  献。)


zipimport
---------

* ZIP64 形式のファイルをサポートしました。 巨大なデータはみんな大好き
  ですよね。 (Tim Hatch による gh-94146 での貢献。)


最適化
======

* いくつかの標準ライブラリモジュールのインポート時間が大幅に短縮されま
  した。 例えば "typing" は、"re" と "contextlib" への依存を取り除くこ
  とで、インポート時間が約 3 分の 1 短くなりました。 ほかにも、
  "email.utils"、"enum"、"functools"、"importlib.metadata"、
  "threading" のインポートが高速化されました。 (Alex Waygood, Shantanu
  Jain, Adam Turner, Daniel Hollas, and others による gh-109653 での貢
  献。)

* 大きな入力に対する "textwrap.indent()" が、以前より約 30% 高速になり
  ました。 (Inada Naoki による gh-107369 での貢献。)

* "subprocess" モジュールは、より多くの状況で "posix_spawn()" 関数を使
  うようになりました。 多くの最近のプラットフォームでは、*close_fds*
  が "True" (デフォルト) の場合も使います。 これにより、FreeBSD と
  Solaris でのプロセス起動が大幅に高速化すると見込まれます。 詳しくは
  、前述の subprocess の節を参照してください。 (Jakub Kulik による
  gh-113117 での貢献。)


削除されたモジュールと API
==========================


PEP 594: 標準ライブラリから「使われなくなった付属モジュール」を削除
-------------------------------------------------------------------

**PEP 594** は、古くなったもの、廃れたもの、安全性に問題のあるものとし
て、俗に「dead batteries」と呼ばれる 19 個のモジュールを標準ライブラリ
から削除することを提案しました。 次のモジュールはすべて Python 3.11 で
非推奨になり、今回削除されました。

* "aifc"

  * standard-aifc: PyPI で再配布されている "aifc" ライブラリを使ってく
    ださい。

* "audioop"

  * audioop-lts: PyPI の "audioop-lts" ライブラリを使ってください。

* "chunk"

  * standard-chunk: PyPI で再配布されている "chunk" ライブラリを使って
    ください。

* "cgi" と "cgitb"

  * "cgi.FieldStorage" は通常、"GET" と "HEAD" リクエストには
    "urllib.parse.parse_qsl()"、"POST" と "PUT" リクエストには
    "email.message" モジュールか multipart ライブラリで置き換えられま
    す。

  * "cgi.parse()" は、対象のクエリ文字列に対して
    "urllib.parse.parse_qs()" を直接呼び出すことで置き換えられます。
    ただし、入力が "multipart/form-data" の場合は、後述する
    "cgi.parse_multipart()" の説明に従って置き換えてください。

  * "cgi.parse_header()" は、同じ MIME の RFC を実装する "email" パッ
    ケージの機能で置き換えられます。 例えば、
    "email.message.EmailMessage" を使うと次のようになります。

       from email.message import EmailMessage

       msg = EmailMessage()
       msg['content-type'] = 'application/json; charset="utf8"'
       main, params = msg.get_content_type(), msg['content-type'].params

  * "cgi.parse_multipart()" は、同じ MIME の RFC を実装する "email" パ
    ッケージの機能、または multipart ライブラリで置き換えられます。 例
    えば、"email.message.EmailMessage" クラスや
    "email.message.Message" クラスが使えます。

  * standard-cgi と standard-cgitb: PyPI で再配布されている "cgi" と
    "cgitb" ライブラリを使ってください。

* "crypt" と非公開の拡張 "_crypt"。 単に値のハッシュを計算するだけなら
  、"hashlib" モジュールが適切な代替となる場合があります。 それ以外の
  場合は、PyPI の様々なサードパーティー製ライブラリが利用できます。

  * bcrypt: ソフトウェアやサーバー向けの現代的なパスワードハッシュ。

  * argon2-cffi: 安全な Argon2 パスワードハッシュアルゴリズム。

  * legacycrypt: POSIX の crypt ライブラリ呼び出しと関連機能の
    "ctypes" ラッパー。

  * crypt_r: "crypt" モジュールのフォークで、*crypt_r(3)* ライブラリ呼
    び出しと関連機能のラッパー。

  * standard-crypt と deprecated-crypt-alternative: PyPI で再配布され
    ている "crypt" と、再実装された "_crypt" のライブラリを使ってくだ
    さい。

* "imghdr": 代わりに filetype、puremagic、python-magic のいずれかのラ
  イブラリを使ってください。 例えば、"imghdr" がサポートしていたすべて
  のファイル形式について、"imghdr.what()" 関数を "puremagic.what()" 関
  数で置き換えられます。

  * standard-imghdr: PyPI で再配布されている "imghdr" ライブラリを使っ
    てください。

* "mailcap": 代わりに "mimetypes" モジュールを使ってください。

  * standard-mailcap: PyPI で再配布されている "mailcap" ライブラリを使
    ってください。

* "msilib"

* "nis"

* "nntplib": 代わりに PyPI の pynntp ライブラリを使ってください。

  * standard-nntplib: PyPI で再配布されている "nntplib" ライブラリを使
    ってください。

* "ossaudiodev": 音声の再生には、代わりに PyPI の pygame ライブラリを
  使ってください。

* "pipes": 代わりに "subprocess" モジュールを使ってください。 非公開の
  "pipes.quote" 関数は "shlex.quote()" に置き換えてください。

  * standard-pipes: PyPI で再配布されている "pipes" ライブラリを使って
    ください。

* "sndhdr": 代わりに filetype、puremagic、python-magic のいずれかのラ
  イブラリを使ってください。

  * standard-sndhdr: PyPI で再配布されている "sndhdr" ライブラリを使っ
    てください。

* "spwd": 代わりに PyPI の python-pam ライブラリを使ってください。

* "sunau"

  * standard-sunau: PyPI で再配布されている "sunau" ライブラリを使って
    ください。

* "telnetlib": 代わりに PyPI の telnetlib3 または Exscript ライブラリ
  を使ってください。

  * standard-telnetlib: PyPI で再配布されている "telnetlib" ライブラリ
    を使ってください。

* "uu": 現代的な代替として "base64" モジュールを使ってください。

  * standard-uu: PyPI で再配布されている "uu" ライブラリを使ってくださ
    い。

* "xdrlib"

  * standard-xdrlib: PyPI で再配布されている "xdrlib" ライブラリを使っ
    てください。

(Victor Stinner and Zachary Ware による gh-104773 and gh-104780 での貢
献。)


2to3
----

* Python 3.11 で非推奨となっていた **2to3** プログラムと "lib2to3" モ
  ジュールが削除されました。 (Victor Stinner による gh-104780 での貢献
  。)


builtins
--------

* 連鎖した "classmethod" デスクリプター (gh-63272 で導入) のサポートが
  削除されました。 "property" などのほかのデスクリプターをラップできな
  くなりました。 この機能には基本的な設計上の欠陥があり、いくつもの問
  題を引き起こしていました。 "classmethod" を「通り抜けて」元のオブジ
  ェクトにアクセスするには、Python 3.10 で追加された "__wrapped__" 属
  性の利用を検討してください。 (Raymond Hettinger による gh-89519 での
  貢献。)

* 一時停止中のフレームに対して "frame.clear()" を呼び出すと、
  "RuntimeError" を送出するようになりました (実行中のフレームでは以前
  から同じ動作でした)。 (Irit Katriel による gh-79932 での貢献。)


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

* Python 3.2 から docstring で、Python 3.11 から実行時にも非推奨となっ
  ていた、非公開の "LegacyInterpolation" クラスが削除されました。
  (Hugo van Kemenade による gh-104886 での貢献。)


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

* EntryPoint オブジェクトの、非推奨となっていた添字 ("__getitem__()")
  によるアクセスが削除されました。 (Jason R. Coombs による gh-113175
  での貢献。)


locale
------

* Python 3.11 で非推奨になった "locale.resetlocale()" 関数が削除されま
  した。 代わりに "locale.setlocale(locale.LC_ALL, "")" を使ってくださ
  い。 (Victor Stinner による gh-104783 での貢献。)


opcode
------

* "opcode.ENABLE_SPECIALIZATION" が "_opcode.ENABLE_SPECIALIZATION" に
  移動しました。 このフィールドは 3.12 で追加されましたが、一度も文書
  化されておらず、外部からの使用を意図したものではありません。 (Irit
  Katriel による gh-105481 での貢献。)

* "opcode.is_pseudo()"、"opcode.MIN_PSEUDO_OPCODE"、
  "opcode.MAX_PSEUDO_OPCODE" が削除されました。 これらは Python 3.12
  で追加されましたが、文書化も "dis" を通した公開もされておらず、外部
  からの使用を意図したものではありません。 (Irit Katriel による
  gh-105481 での貢献。)


optparse
--------

* このモジュールは *soft deprecated* ではなくなりました。 サードパーテ
  ィー製のコマンドライン引数処理ライブラリを使わない新しいプロジェクト
  では、引き続き "argparse" が推奨されます。 ただし、"argparse" の動作
  には、より低水準の "optparse" の方が適した基盤になり得る側面がありま
  す。 具体的には、引数処理ライブラリを *作成する* 場合や、C の
  "getopt()" 関数の動作に由来する Unix の様々なコマンドライン処理の慣
  習に、"argparse" よりも厳密に従うアプリケーションを実装する場合です
  。 (Alyssa Coghlan and Serhiy Storchaka による gh-126180 での貢献。)


pathlib
-------

* "Path" オブジェクトをコンテキストマネージャーとして使う機能が削除さ
  れました。 この機能は Python 3.9 から非推奨で、効果もありませんでし
  た。 (Barney Gale による gh-83863 での貢献。)


re
--

* 非公開で非推奨となっていた、正しく動作しない "re.template()" 関数と
  "re.TEMPLATE" / "re.T" フラグが削除されました。 (Serhiy Storchaka
  and Nikita Sobolev による gh-105687 での貢献。)


tkinter.tix
-----------

* Python 3.6 で非推奨になった "tkinter.tix" モジュールが削除されました
  。 このモジュールがラップしていたサードパーティー製の Tix ライブラリ
  は、保守されていません。 (Zachary Ware による gh-75552 での貢献。)


"turtle"
--------

* Python 3.1 からドキュメントで、Python 3.11 から実行時にも非推奨とな
  っていた "RawTurtle.settiltangle()" メソッドが削除されました。 (Hugo
  van Kemenade による gh-104876 での貢献。)


typing
------

* Python 3.8 から非推奨となっていた "typing.io" と "typing.re" の名前
  空間が削除されました。 これらの名前空間の項目は、"typing" モジュール
  から直接インポートできます。 (Sebastian Rittau による gh-92871 での
  貢献。)

* Python 3.11 で非推奨になった、キーワード引数で "TypedDict" 型を作成
  する方法が削除されました。 (Tomas Roun による gh-104786 での貢献。)


unittest
--------

* Python 3.11 で非推奨になった、次の "unittest" 関数が削除されました。

  * "unittest.findTestCases()"

  * "unittest.makeSuite()"

  * "unittest.getTestCaseNames()"

  代わりに "TestLoader" のメソッドを使ってください。

  * "loadTestsFromModule()"

  * "loadTestsFromTestCase()"

  * "getTestCaseNames()"

  (Hugo van Kemenade による gh-104835 での貢献。)

* Python 3.11 で非推奨になった、テストも文書化もされていない
  "TestProgram.usageExit()" メソッドが削除されました。 (Hugo van
  Kemenade による gh-104992 での貢献。)


urllib
------

* Remove the *cafile*, *capath*, and *cadefault* parameters of the
  "urllib.request.urlopen()" function, deprecated in Python 3.6. Use
  the *context* parameter instead with an "SSLContext" instance. The
  "ssl.SSLContext.load_cert_chain()" function can be used to load
  specific certificates, or let "ssl.create_default_context()" select
  the operating system's trusted certificate authority (CA)
  certificates. (Contributed by Victor Stinner in gh-105382.)


webbrowser
----------

* Python 3.11 で非推奨になった、テストも文書化もされていない "MacOSX"
  クラスが削除されました。 代わりに "MacOSXOSAScript" クラス (Python
  3.2 で導入) を使ってください。 (Hugo van Kemenade による gh-104804
  での貢献。)

* 非推奨の "MacOSXOSAScript._name" 属性が削除されました。 代わりに
  "MacOSXOSAScript.name" 属性を使ってください。 (Nikita Sobolev による
  gh-105546 での貢献。)


新たな非推奨項目
================

* ユーザー定義関数:

  * 関数の "__code__" 属性に、その関数と種類が一致しないコードオブジェ
    クトを代入することが非推奨になりました。 種類には、通常の関数、ジ
    ェネレーター、非同期ジェネレーター、コルーチンがあります。 (Irit
    Katriel による gh-81137 での貢献。)

* "array":

  * 書式コード "'u'" ("wchar_t") が、実行時にも非推奨になりました。 こ
    の書式コードは Python 3.3 からドキュメントで非推奨となっており、
    Python 3.16 で削除されます。 Unicode 文字には、代わりに書式コード
    "'w'" ("Py_UCS4") を使ってください。 (Hugo van Kemenade による
    gh-80480 での貢献。)

* "ctypes":

  * 非公開の "SetPointerType()" 関数が非推奨になりました。 Python 3.15
    で削除されます。 (Victor Stinner による gh-105733 での貢献。)

  * "ARRAY()" 関数が *ソフト非推奨* になりました。 代わりに "type *
    length" の乗算を使ってください。 (Victor Stinner による gh-105733
    での貢献。)

* "decimal":

  * "decimal" モジュールの C 実装だけがサポートする、非標準で非公開の
    "Decimal" の書式指定子 "'N'" が非推奨になりました。 Python 3.18 で
    削除される予定です。 (Serhiy Storchaka による gh-89902 での貢献。)

* "dis":

  * 区切りを示す "HAVE_ARGUMENT" が非推奨になりました。 代わりに
    "hasarg" に含まれるかどうかを調べてください。 (Irit Katriel による
    gh-109319 での貢献。)

* "gettext":

  * "gettext" モジュールで複数形を扱う関数やメソッドの引数に、整数でな
    い数値を渡すことは、翻訳が見つからなかった場合も非推奨になりました
    。 (Serhiy Storchaka による gh-88434 での貢献。)

* "glob":

  * 非公開の "glob0()" 関数と "glob1()" 関数が非推奨になりました。 代
    わりに "glob()" を使い、ルートディレクトリを指定する *path-like
    object* を *root_dir* 引数に渡してください。 (Barney Gale による
    gh-117337 での貢献。)

* "http.server":

  * "CGIHTTPRequestHandler" が非推奨になりました。 Python 3.15 で削除
    されます。 プロセスベースの CGI HTTP サーバーは、長らく使われなく
    なっています。 このコードは古く、保守されておらず、ほとんど使われ
    ていませんでした。 セキュリティと機能の両面で不具合が生じる可能性
    が高いものです。 (Gregory P. Smith による gh-109096 での貢献。)

  * **python -m http.server** のコマンドラインインターフェースの "--
    cgi" フラグが非推奨になりました。 Python 3.15 で削除されます。
    (Gregory P. Smith による gh-109096 での貢献。)

* "mimetypes":

  * "guess_type()" にファイルパスを引数として渡すことが *ソフト非推奨*
    になりました。 代わりに "guess_file_type()" を使ってください。
    (Serhiy Storchaka による gh-66543 での貢献。)

* "re":

  * モジュールレベルの "split()"、"sub()"、"subn()" に、省略可能な引数
    *maxsplit*、*count*、*flags* を位置引数として渡すことが非推奨にな
    りました。 これらの引数は、将来の Python で キーワード専用 になり
    ます。 (Serhiy Storchaka による gh-56166 での貢献。)

* "pathlib":

  * ".PurePath.is_reserved()" が非推奨になりました。 Python 3.15 で削
    除されます。 Windows の予約されたパスを検出するには、
    "os.path.isreserved()" を使ってください。 (Barney Gale による
    gh-88569 での貢献。)

* "platform":

  * "platform.java_ver()" が非推奨になりました。 Python 3.15 で削除さ
    れます。 この関数は Jython のサポートにしか役立たず、API が分かり
    にくく、ほとんどテストされていません。 (Nikita Sobolev による
    gh-116349 での貢献。)

* "pydoc":

  * 非公開の "ispackage()" 関数が非推奨になりました。 (Zackery Spytz
    による gh-64020 での貢献。)

* "sqlite3":

  * "connect()" 関数と "Connection" コンストラクターに、位置引数を 2
    個以上渡すことが非推奨になりました。 最初の引数以外は Python 3.15
    でキーワード専用になります。 (Erlend E. Aasland による gh-107948
    での貢献。)

  * "Connection.create_function()" と "Connection.create_aggregate()"
    に、名前、引数の数、呼び出し可能オブジェクトをキーワード引数として
    渡すことが非推奨になりました。 これらの引数は Python 3.15 で位置専
    用になります。 (Erlend E. Aasland による gh-108278 での貢献。)

  * "Connection" の "set_authorizer()"、"set_progress_handler()"、
    "set_trace_callback()" に、コールバックの呼び出し可能オブジェクト
    をキーワード引数として渡すことが非推奨になりました。 コールバック
    は Python 3.15 で位置専用になります。 (Erlend E. Aasland による
    gh-108278 での貢献。)

* "sys":

  * "_enablelegacywindowsfsencoding()" 関数が非推奨になりました。
    Python 3.16 で削除されます。 代わりに環境変数
    "PYTHONLEGACYWINDOWSFSENCODING" を使ってください。 (Inada Naoki に
    よる gh-73427 での貢献。)

* "tarfile":

  * 非公開で使われていない "TarFile.tarfile" 属性が非推奨になりました
    。 Python 3.16 で削除されます。 (gh-115256 での貢献。)

* "traceback":

  * "TracebackException.exc_type" 属性が非推奨になりました。 代わりに
    "TracebackException.exc_type_str" を使ってください。 (Irit Katriel
    による gh-112332 での貢献。)

* "typing":

  * "NamedTuple" クラスを作成する際の非公開のキーワード引数構文 (例え
    ば "Point = NamedTuple("Point", x=int, y=int)") が非推奨になりまし
    た。 Python 3.15 で削除されます。 代わりにクラスベースの構文か関数
    形式の構文を使ってください。 (Alex Waygood による gh-105566 での貢
    献。)

  * "NamedTuple" または "typing.TypedDict" クラスの作成時に *fields*
    引数を省略することと、両方の型の *fields* 引数に "None" を渡すこと
    が非推奨になりました。 Python 3.15 では *fields* 引数に有効なシー
    ケンスが必要になります。 フィールドのない NamedTuple クラスを作る
    には、"class NT(NamedTuple): pass" または "NT = NamedTuple("NT",
    ())" を使ってください。 フィールドのない TypedDict クラスを作るに
    は、"class TD(TypedDict): pass" または "TD = TypedDict("TD", {})"
    を使ってください。 (Alex Waygood による gh-105566 and gh-105570 で
    の貢献。)

  * "@typing.no_type_check_decorator" デコレーター関数が非推奨になりま
    した。 Python 3.15 で削除されます。 "typing" モジュールに追加され
    てから 8 年が経過しましたが、主要な型チェッカーではまだサポートさ
    れていません。 (Alex Waygood による gh-106309 での貢献。)

  * "typing.AnyStr" が非推奨になりました。 Python 3.16 では
    "typing.__all__" から削除され、実行時にインポートまたはアクセスす
    ると "DeprecationWarning" が出るようになります。 Python 3.18 で完
    全に削除されます。 代わりに新しい 型引数の構文 を使ってください。
    (Michael The による gh-107116 での貢献。)

* "wave":

  * "Wave_read" と "Wave_write" の "getmark()"、"setmark()"、
    "getmarkers()" メソッドが非推奨になりました。 Python 3.15 で削除さ
    れます。 (Victor Stinner による gh-105096 での貢献。)


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 と 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.18 で削除予定
----------------------

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

* "decimal":

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

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

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

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


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

* "ctypes":

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

* "hashlib":

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

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

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

* "http.cookies":

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

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

* "imaplib":

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

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


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

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

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

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

  * "argparse"

  * "csv"

  * "ctypes"

  * "ctypes.macholib"

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

  * "http.server"

  * "imaplib"

  * "ipaddress"

  * "json"

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

  * "optparse"

  * "pickle"

  * "platform"

  * "re"

  * "socketserver"

  * "tabnanny"

  * "tarfile"

  * "tkinter.font"

  * "tkinter.ttk"

  * "wsgiref.simple_server"

  * "xml.etree.ElementTree"

  * "xml.sax.expatreader"

  * "xml.sax.handler"

  * "zlib"

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

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

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

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

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

* "ast":

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

* "typing":

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

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


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

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

* "argparse":

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

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

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

* "builtins":

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

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

  * Support for "__index__()" and "__int__()" method returning non-int
    type: these methods will be required to return an instance of a
    strict subclass of "int".

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

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

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

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

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

* "codeobject.co_lnotab"：代わりに "codeobject.co_lines()" メソッドを
  使ってください。

* "datetime":

  * "utcnow()"："datetime.datetime.now(tz=datetime.UTC)" を使ってくだ
    さい。

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

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

* "importlib":

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

* "importlib.metadata":

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

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

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

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

* "os": Calling "os.register_at_fork()" in a multi-threaded process.

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

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

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

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

* "ssl" のオプションとプロトコル：

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

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

  * "ssl.OP_NO_SSL*" オプション

  * "ssl.OP_NO_TLS*" オプション

  * "ssl.PROTOCOL_SSLv3"

  * "ssl.PROTOCOL_TLS"

  * "ssl.PROTOCOL_TLSv1"

  * "ssl.PROTOCOL_TLSv1_1"

  * "ssl.PROTOCOL_TLSv1_2"

  * "ssl.TLSVersion.SSLv3"

  * "ssl.TLSVersion.TLSv1"

  * "ssl.TLSVersion.TLSv1_1"

* "threading" のメソッド：

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

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

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

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

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

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

* "typing.Text" (gh-92332).

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

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

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

  * "splitattr()"

  * "splithost()"

  * "splitnport()"

  * "splitpasswd()"

  * "splitport()"

  * "splitquery()"

  * "splittag()"

  * "splittype()"

  * "splituser()"

  * "splitvalue()"

  * "to_bytes()"

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

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

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


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

* "YIELD_VALUE" の oparg は、yield-from または await の一部としての
  yield なら "1"、それ以外なら "0" になりました。 "RESUME" の oparg に
  は、例外の深さが 1 かどうかを示すビットが追加されました。 これはジェ
  ネレーターを閉じる処理の最適化に必要です。 (Irit Katriel による
  gh-111354 での貢献。)


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


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

* **PEP 669** のモニタリングイベントを生成する PyMonitoring C API が追
  加されました。

  * "PyMonitoringState"

  * "PyMonitoring_FirePyStartEvent()"

  * "PyMonitoring_FirePyResumeEvent()"

  * "PyMonitoring_FirePyReturnEvent()"

  * "PyMonitoring_FirePyYieldEvent()"

  * "PyMonitoring_FireCallEvent()"

  * "PyMonitoring_FireLineEvent()"

  * "PyMonitoring_FireJumpEvent()"

  * "PyMonitoring_FireBranchEvent"

  * "PyMonitoring_FireCReturnEvent()"

  * "PyMonitoring_FirePyThrowEvent()"

  * "PyMonitoring_FireRaiseEvent()"

  * "PyMonitoring_FireCRaiseEvent()"

  * "PyMonitoring_FireReraiseEvent()"

  * "PyMonitoring_FireExceptionHandledEvent()"

  * "PyMonitoring_FirePyUnwindEvent()"

  * "PyMonitoring_FireStopIterationEvent()"

  * "PyMonitoring_EnterScope()"

  * "PyMonitoring_ExitScope()"

  (Irit Katriel による gh-111997 での貢献。)

* 1 バイトだけを占有する軽量ミューテックス "PyMutex" と、新しい
  "PyMutex_Lock()" 関数、"PyMutex_Unlock()" 関数が追加されました。
  "PyMutex_Lock()" は、処理がブロックする必要がある場合、*GIL* を保持
  していれば解放します。 (Sam Gross による gh-108724 での貢献。)

* システムクロックにアクセスするための PyTime C API が追加されました。

  * "PyTime_t".

  * "PyTime_MIN" と "PyTime_MAX"。

  * "PyTime_AsSecondsDouble()".

  * "PyTime_Monotonic()".

  * "PyTime_MonotonicRaw()".

  * "PyTime_PerfCounter()".

  * "PyTime_PerfCounterRaw()".

  * "PyTime_Time()".

  * "PyTime_TimeRaw()".

  (Victor Stinner and Petr Viktorin による gh-110850 での貢献。)

* "PyDict_Contains()" と同じ動作をする "PyDict_ContainsString()" 関数
  が追加されました。 ただし、*key* は PyObject* ではなく、UTF-8 でエン
  コードされた const char* のバイト文字列として指定します。 (Victor
  Stinner による gh-108314 での貢献。)

* "PyDict_GetItemRef()" 関数と "PyDict_GetItemStringRef()" 関数が追加
  されました。 "PyDict_GetItemWithError()" と似た動作をしますが、*借用
  参照* の代わりに *強参照* を返します。 また、エラー時には "-1" を返
  すため、"PyErr_Occurred()" で調べる必要がありません。 (Victor
  Stinner による gh-106004 での貢献。)

* "PyDict_SetDefaultRef()" 関数が追加されました。
  "PyDict_SetDefault()" と似た動作をしますが、*借用参照* の代わりに *
  強参照* を返します。 この関数の戻り値は、エラー時は "-1"、挿入時は
  "0"、キーがすでに辞書にあった場合は "1" です。 (Sam Gross による
  gh-112066 での貢献。)

* 辞書からキーを削除し、必要なら削除した値を返す "PyDict_Pop()" 関数と
  "PyDict_PopString()" 関数が追加されました。 "dict.pop()" と似ていま
  すが、デフォルト値はなく、キーが存在しなくても "KeyError" を送出しま
  せん。 (Stefan Behnel and Victor Stinner による gh-111262 での貢献。
  )

* "PyObject_GetItem()" と "PyMapping_GetItemString()" の代替として、そ
  れぞれ "PyMapping_GetOptionalItem()" 関数と
  "PyMapping_GetOptionalItemString()" 関数が追加されました。 これらの
  新しい関数は、指定されたキーがマッピングになくても "KeyError" を送出
  しません。 キーが存在しないことを失敗として扱いたくない場合に、より
  便利で高速です。 (Serhiy Storchaka による gh-106307 での貢献。)

* "PyObject_GetAttr()" と "PyObject_GetAttrString()" の代替として、そ
  れぞれ "PyObject_GetOptionalAttr()" 関数と
  "PyObject_GetOptionalAttrString()" 関数が追加されました。 これらの新
  しい関数は、指定された属性がオブジェクトになくても "AttributeError"
  を送出しません。 属性が存在しないことを失敗として扱いたくない場合に
  、より便利で高速です。 (Serhiy Storchaka による gh-106521 での貢献。
  )

* "PyErr_WriteUnraisable()" を拡張し、警告メッセージをカスタマイズでき
  る "PyErr_FormatUnraisable()" 関数が追加されました。 (Serhiy
  Storchaka による gh-108082 での貢献。)

* PEP 667 の一環として、フレームのローカル変数、グローバル変数、組み込
  みの名前について、*借用参照* の代わりに *強参照* を返す関数が追加さ
  れました。

  * "PyEval_GetBuiltins()" の代わりとなる "PyEval_GetFrameBuiltins()"

  * "PyEval_GetGlobals()" の代わりとなる "PyEval_GetFrameGlobals()"

  * "PyEval_GetLocals()" の代わりとなる "PyEval_GetFrameLocals()"

  (Mark Shannon and Tian Gao による gh-74929 での貢献。)

* 定数への *強参照* または *借用参照* を取得する "Py_GetConstant()" 関
  数と "Py_GetConstantBorrowed()" 関数が追加されました。 例えば、
  "Py_GetConstant(Py_CONSTANT_ZERO)" は定数のゼロへの強参照を返します
  。 (Victor  Stinner による gh-115754 での貢献。)

* "PyImport_AddModule()" の代わりに使える "PyImport_AddModuleRef()" 関
  数が追加されました。 *借用参照* の代わりに *強参照* を返します。
  (Victor Stinner による gh-105922 での貢献。)

* メインの Python インタープリタが *終了処理中* かどうかを調べる
  "Py_IsFinalizing()" 関数が追加されました。 (Victor Stinner による
  gh-108014 での貢献。)

* "PyList_GetItem()" の代わりに使える "PyList_GetItemRef()" 関数が追加
  されました。 *借用参照* の代わりに *強参照* を返します。 (Sam Gross
  による gh-114329 での貢献。)

* Python の "list.extend()" と "list.clear()" に対応する
  "PyList_Extend()" 関数と "PyList_Clear()" 関数が追加されました。
  (Victor Stinner による gh-111138 での貢献。)

* "PyLong_AsInt()" 関数が追加されました。 "PyLong_AsLong()" と似た動作
  をしますが、結果を C の long ではなく int に格納します。 (Victor
  Stinner による gh-108014 での貢献。)

* ネイティブの整数型と Python の "int" オブジェクトを簡単に相互変換す
  るための "PyLong_AsNativeBytes()"、"PyLong_FromNativeBytes()"、
  "PyLong_FromUnsignedNativeBytes()" 関数が追加されました。 (Steve
  Dower による gh-111140 での貢献。)

* "PyModule_Add()" 関数が追加されました。 "PyModule_AddObjectRef()" や
  "PyModule_AddObject()" と似ていますが、値への参照を常に盗みます。
  (Serhiy Storchaka による gh-86493 での貢献。)

* Python オブジェクトのデフォルトのハッシュ関数を実装する
  "PyObject_GenericHash()" 関数が追加されました。 (Serhiy Storchaka に
  よる gh-113024 での貢献。)

* 生のポインターのハッシュ値を求める "Py_HashPointer()" 関数が追加され
  ました。 (Victor Stinner による gh-111545 での貢献。)

* "PyObject_VisitManagedDict()" 関数と "PyObject_ClearManagedDict()"
  関数が追加されました。 "Py_TPFLAGS_MANAGED_DICT" フラグを使う型の
  traverse 関数と clear 関数は、これらを呼び出す必要があります。
  pythoncapi-compat project を使えば、Python 3.11 と 3.12 でもこれらの
  関数を使えます。 (Victor Stinner による gh-107073 での貢献。)

* "PyRefTracer_SetTracer()" 関数と "PyRefTracer_GetTracer()" 関数が追
  加されました。 オブジェクトの生成と破棄を、"tracemalloc" モジュール
  が行う追跡と同じように追跡できるようになりました。 (Pablo Galindo に
  よる gh-93502 での貢献。)

* "PySys_Audit()" の代替として、イベントの引数を Python の "tuple" オ
  ブジェクトで受け取る "PySys_AuditTuple()" 関数が追加されました。
  (Victor Stinner による gh-85283 での貢献。)

* "PyThreadState_Get()" の代替として、スレッド状態が "NULL" でも致命的
  なエラーでプロセスを終了させない "PyThreadState_GetUnchecked()" 関数
  が追加されました。 結果が "NULL" かどうかを調べる責任は、呼び出し元
  にあります。 (Victor Stinner による gh-108867 での貢献。)

* 型の完全修飾名を取得する "PyType_GetFullyQualifiedName()" 関数が追加
  されました。 "type.__module__" が文字列で、"'builtins'" と
  "'__main__'" のどちらでもない場合、先頭にモジュール名が付きます。
  (Victor Stinner による gh-111696 での貢献。)

* 型のモジュール名を取得する "PyType_GetModuleName()" 関数が追加されま
  した。 これは "type.__module__" 属性の取得と同等です。 (Eric Snow
  and Victor Stinner による gh-111696 での貢献。)

* Unicode オブジェクトと、UTF-8 でエンコードされた const char* の文字
  列を比較する "PyUnicode_EqualToUTF8AndSize()" 関数と
  "PyUnicode_EqualToUTF8()" 関数が追加されました。 等しければ "1"、そ
  れ以外なら "0" を返します。 これらの関数は例外を送出しません。
  (Serhiy Storchaka による gh-110289 での貢献。)

* "PyWeakref_GetObject()" の代替として、*強参照* を出力引数で返し、参
  照先がすでに存在しない場合はそこに "NULL" を設定する
  "PyWeakref_GetRef()" 関数が追加されました。 (Victor Stinner による
  gh-105927 での貢献。)

* エラーを黙って無視する関数に対して、その動作を修正した別の関数が追加
  されました。

  * "PyObject_HasAttr()" の代わりとなる "PyObject_HasAttrWithError()"
    。

  * "PyObject_HasAttrString()" の代わりとなる
    "PyObject_HasAttrStringWithError()"。

  * "PyMapping_HasKey()" の代わりとなる "PyMapping_HasKeyWithError()"
    。

  * "PyMapping_HasKeyString()" の代わりとなる
    "PyMapping_HasKeyStringWithError()"。

  新しい関数は、エラー時に "-1"、真の場合は通常どおり "1"、偽の場合は
  "0" を返します。

  (Serhiy Storchaka による gh-108511 での貢献。)


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

* "PyArg_ParseTupleAndKeywords()" と "PyArg_VaParseTupleAndKeywords()"
  の *keywords* 引数の型が、char** から、C では char *const*、C++ では
  const char *const* に変わりました。 これにより、C++ では const char
  *const*、const char**、char *const* 型の引数を、明示的な型キャストな
  しで渡せます。 C では char *const* 型の引数だけをサポートします。
  "PY_CXX_CONST" マクロでこの動作を上書きできます。 (Serhiy Storchaka
  による gh-65210 での貢献。)

* "PyArg_ParseTupleAndKeywords()" が非 ASCII のキーワード引数名をサポ
  ートするようになりました。 (Serhiy Storchaka による gh-110815 での貢
  献。)

* "PyCode_GetFirstFree()" 関数が不安定 API となり、名前が
  "PyUnstable_Code_GetFirstFree()" に変わりました。 (Bogdan Romanyuk
  による gh-115781 での貢献。)

* "PyDict_GetItem()"、"PyDict_GetItemString()"、"PyMapping_HasKey()"、
  "PyMapping_HasKeyString()"、"PyObject_HasAttr()"、
  "PyObject_HasAttrString()"、"PySys_GetObject()" は、呼び出し中に発生
  したすべてのエラーを消去する関数ですが、"sys.unraisablehook()" を使
  ってそれらのエラーを報告するようになりました。 ドキュメントで推奨さ
  れているほかの関数に置き換えられます。 (Serhiy Storchaka による
  gh-106672 での貢献。)

* "PyUnicode_FromFormat()" に "%T"、"%#T"、"%N"、"%#N" 書式が追加され
  ました。

  * "%T": オブジェクトの型の完全修飾名を取得する

  * "%#T": 上と同じですが、区切りにコロンを使う

  * "%N": 型の完全修飾名を取得する

  * "%#N": 上と同じですが、区切りにコロンを使う

  詳しくは **PEP 737** を参照してください。 (Victor Stinner による
  gh-111696 での貢献。)

* 書式コード で "#" 書式を使う際、"Python.h" をインクルードする前に
  "PY_SSIZE_T_CLEAN" マクロを定義する必要がなくなりました。 書式コード
  を受け取る API は、"#" 書式に常に "Py_ssize_t" を使います。 (Inada
  Naoki による gh-104922 での貢献。)

* Python を デバッグモード または "アサーションを有効にして" ビルドし
  た場合、"PyTuple_SET_ITEM()" と "PyList_SET_ITEM()" がインデックス引
  数をアサーションで検査するようになりました。 (Victor Stinner による
  gh-106168 での貢献。)


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

* 次の関数が Limited C API に含まれるようになりました。

  * "PyMem_RawMalloc()"

  * "PyMem_RawCalloc()"

  * "PyMem_RawRealloc()"

  * "PyMem_RawFree()"

  * "PySys_Audit()"

  * "PySys_AuditTuple()"

  * "PyType_GetModuleByDef()"

  (Victor Stinner による gh-85283 and gh-116936 での貢献。)

* "--with-trace-refs" (参照の追跡) を指定してビルドした Python が、
  Limited API をサポートするようになりました。 (Victor Stinner による
  gh-108634 での貢献。)


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

* "_Py" または "_PY" で始まる名前を持つ、非公開と見なされる関数、マク
  ロ、変数などがいくつか削除されました。 この削除の影響を受け、削除さ
  れた API を引き続き利用できるようにするべきだと考える場合は、公開 C
  API を求める 新しい課題を作成 してください。 その課題に "cc:
  @vstinner" を追加すると Victor Stinner に通知されます。 (Victor
  Stinner による gh-106320 での貢献。)

* Python 3.0 で非推奨となった古いバッファープロトコルが削除されました
  。 代わりに バッファプロトコル (buffer Protocol) を使ってください。

  * "PyObject_CheckReadBuffer()": オブジェクトがバッファープロトコルを
    サポートするかどうかは、"PyObject_CheckBuffer()" で調べてください
    。 ただし、"PyObject_CheckBuffer()" は "PyObject_GetBuffer()" の成
    功を保証しません。 実際にオブジェクトを読み取れるかを調べる方法は
    、次の "PyObject_GetBuffer()" の例を参照してください。

  * "PyObject_AsCharBuffer()"、"PyObject_AsReadBuffer()": 代わりに
    "PyObject_GetBuffer()" と "PyBuffer_Release()" を使ってください。

       Py_buffer view;
       if (PyObject_GetBuffer(obj, &view, PyBUF_SIMPLE) < 0) {
           return NULL;
       }
       // `view.buf` と `view.len` を使ってバッファーから読み取る。
       // buf を `(const char*)view.buf` にキャストする必要がある場合もある。
       PyBuffer_Release(&view);

  * "PyObject_AsWriteBuffer()": 代わりに "PyObject_GetBuffer()" と
    "PyBuffer_Release()" を使ってください。

       Py_buffer view;
       if (PyObject_GetBuffer(obj, &view, PyBUF_WRITABLE) < 0) {
           return NULL;
       }
       // `view.buf` と `view.len` を使ってバッファーに書き込む。
       PyBuffer_Release(&view);

  (Inada Naoki による gh-85275 での貢献。)

* Python 3.9 で非推奨となった、次の関数が削除されました。

  * "PyEval_CallObject()"、"PyEval_CallObjectWithKeywords()": 代わりに
    "PyObject_CallNoArgs()" または "PyObject_Call()" を使ってください
    。

    警告:

      "PyObject_Call()" では、位置引数は "tuple" でなければならず、
      "NULL" は許されません。 キーワード引数は "dict" または "NULL" で
      なければなりません。 一方、削除された関数は引数の型を検査し、位
      置引数にもキーワード引数にも "NULL" を受け付けていました。
      "PyEval_CallObjectWithKeywords(func, NULL, kwargs)" を
      "PyObject_Call()" に置き換えるには、"PyTuple_New(0)" を使い、位
      置引数として空のタプルを渡してください。

  * "PyEval_CallFunction()": 代わりに "PyObject_CallFunction()" を使っ
    てください。

  * "PyEval_CallMethod()": 代わりに "PyObject_CallMethod()" を使ってく
    ださい。

  * "PyCFunction_Call()": 代わりに "PyObject_Call()" を使ってください
    。

  (Victor Stinner による gh-105107 での貢献。)

* Python 3.11 で非推奨となった、Python の初期化を設定する次の古い関数
  が削除されました。

  * "PySys_AddWarnOptionUnicode()": 代わりに "PyConfig.warnoptions" を
    使ってください。

  * "PySys_AddWarnOption()": 代わりに "PyConfig.warnoptions" を使って
    ください。

  * "PySys_AddXOption()": 代わりに "PyConfig.xoptions" を使ってくださ
    い。

  * "PySys_HasWarnOptions()": Use "PyConfig.xoptions" instead.

  * "PySys_SetPath()": 代わりに "PyConfig.module_search_paths" を設定
    してください。

  * "Py_SetPath()": 代わりに "PyConfig.module_search_paths" を設定して
    ください。

  * "Py_SetStandardStreamEncoding()": 代わりに
    "PyConfig.stdio_encoding" を設定し、必要に応じて (Windows では)
    "PyConfig.legacy_windows_stdio" も設定してください。

  * "_Py_SetProgramFullPath()": 代わりに "PyConfig.executable" を設定
    してください。

  代わりに、Python 3.8 で追加された Python 初期化設定 の新しい
  "PyConfig" API (**PEP 587**) を使ってください。 (Victor Stinner によ
  る gh-105145 での貢献。)

* Python 3.2 で非推奨となった "PyEval_AcquireLock()" 関数と
  "PyEval_ReleaseLock()" 関数が削除されました。 これらは現在のスレッド
  状態を更新しない関数でした。 次の組み合わせに置き換えられます。

  * "PyEval_SaveThread()" と "PyEval_RestoreThread()"。

  * low-level "PyEval_AcquireThread()" and "PyEval_RestoreThread()";

  * または "PyGILState_Ensure()" と "PyGILState_Release()"。

  (Victor Stinner による gh-105182 での貢献。)

* Python 3.9 で非推奨となった "PyEval_ThreadsInitialized()" 関数が削除
  されました。 Python 3.7 以降、"Py_Initialize()" は常に GIL を作成す
  るため、"PyEval_InitThreads()" を呼び出しても何も起こらず、
  "PyEval_ThreadsInitialized()" は常にゼロ以外の値を返します。 (Victor
  Stinner による gh-105182 での貢献。)

* Python 3.8 との後方互換性のために残されていた、
  "PyInterpreterState_Get()" の別名 "_PyInterpreterState_Get()" が削除
  されました。 pythoncapi-compat project を使えば、Python 3.8 以前でも
  "PyInterpreterState_Get()" を利用できます。 (Victor Stinner による
  gh-106320 での貢献。)

* 非公開の "_PyObject_FastCall()" 関数が削除されました。 代わりに、
  Python 3.8 から利用できる "PyObject_Vectorcall()" を使ってください
  (**PEP 590**)。 (Victor Stinner による gh-106023 での貢献。)

* 非公開の関数だけを含んでいたヘッダーファイル "cpython/pytime.h" が削
  除されました。 (Victor Stinner による gh-106316 での貢献。)

* 非公開の定数 "PY_TIMEOUT_MAX" が Limited C API から削除されました。
  (Victor Stinner による gh-110014 での貢献。)

* 古い trashcan マクロ "Py_TRASHCAN_SAFE_BEGIN" と
  "Py_TRASHCAN_SAFE_END" が削除されました。 それぞれ新しいマクロ
  "Py_TRASHCAN_BEGIN" と "Py_TRASHCAN_END" に置き換えてください。
  (Irit Katriel による gh-105111 での貢献。)


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

* 古い Python 初期化関数が非推奨になりました。

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

  * "Py_GetExecPrefix()": 代わりに "sys.exec_prefix" を取得してくださ
    い。

  * "Py_GetPath()": 代わりに "sys.path" を取得してください。

  * "Py_GetPrefix()": 代わりに "sys.prefix" を取得してください。

  * "Py_GetProgramFullPath()": 代わりに "sys.executable" を取得してく
    ださい。

  * "Py_GetProgramName()": 代わりに "sys.executable" を取得してくださ
    い。

  * "Py_GetPythonHome()": 代わりに "PyConfig.home" または環境変数
    "PYTHONHOME" を取得してください。

  (Victor Stinner による gh-105145 での貢献。)

* *借用参照* を返す "PyEval_GetBuiltins()"、"PyEval_GetGlobals()"、
  "PyEval_GetLocals()" 関数が *ソフト非推奨* になりました (**PEP 667**
  の一環)。

* "PyImport_ImportModuleNoBlock()" 関数が非推奨になりました。 Python
  3.3 以降は、単に "PyImport_ImportModule()" の別名になっています。
  (Victor Stinner による gh-105396 での貢献。)

* "PyModule_AddObject()" 関数が *ソフト非推奨* になりました。
  "PyModule_Add()" または "PyModule_AddObjectRef()" に置き換えてくださ
  い。 (Serhiy Storchaka による gh-86493 での貢献。)

* 古い "Py_UNICODE" 型、"PY_UNICODE_TYPE" 型、"Py_UNICODE_WIDE" 定義が
  非推奨になりました。 代わりに "wchar_t" 型を直接使ってください。
  Python 3.3 以降、"Py_UNICODE" と "PY_UNICODE_TYPE" は単に "wchar_t"
  の別名です。 (Victor Stinner による gh-105156 での貢献。)

* *借用参照* を返す "PyWeakref_GetObject()" 関数と
  "PyWeakref_GET_OBJECT()" 関数が非推奨になりました。 *強参照* を返す
  新しい "PyWeakref_GetRef()" 関数に置き換えてください。 pythoncapi-
  compat project を使えば、Python 3.12 以前でも "PyWeakref_GetRef()"
  を利用できます。 (Victor Stinner による gh-105927 での貢献。)


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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

* "arm64-apple-ios" と "arm64-apple-ios-simulator" が **PEP 11** の
  tier 3 プラットフォームになりました。 (PEP 730 の執筆と実装は
  Russell Keith-Magee による gh-114099 での貢献。)

* "aarch64-linux-android" と "x86_64-linux-android" が **PEP 11** の
  tier 3 プラットフォームになりました。 (PEP 738 の執筆と実装は
  Malcolm Smith による gh-116622 での貢献。)

* "wasm32-wasi" が **PEP 11** の tier 2 プラットフォームになりました。
  (Brett Cannon による gh-115192 での貢献。)

* "wasm32-emscripten" が **PEP 11** のサポート対象プラットフォームでは
  なくなりました。 (Brett Cannon による gh-115192 での貢献。)

* CPython のビルドには、C11 のアトミックライブラリ、GCC の組み込みアト
  ミック関数、MSVC の interlocked 組み込み関数のいずれかをサポートする
  コンパイラが必要になりました。

* "configure" スクリプトの再生成に、Autoconf 2.71 と aclocal 1.16.5 が
  必要になりました。 (Christian Heimes による gh-89886 and by Victor
  Stinner in gh-112090 での貢献。)

* "sqlite3" 拡張モジュールのビルドには、SQLite 3.15.2 以降が必要です。
  (Erlend Aasland による gh-105875 での貢献。)

* CPython はデフォルトで mimalloc library を同梱するようになりました。
  これは MIT ライセンスで提供されています。 mimalloc のライセンス を参
  照してください。 同梱した mimalloc には独自の変更があり、詳細は
  gh-113141 を参照してください。 (Dino Viehland による gh-109914 での
  貢献。)

* "configure" オプション "--with-system-libmpdec" のデフォルトが "yes"
  になりました。 同梱の "libmpdec" は Python 3.16 で削除されます。

* "configure" に "--with-trace-refs" (参照の追跡) を指定してビルドした
  Python が、リリースビルドと デバッグビルド に対して ABI 互換になりま
  した。 (Victor Stinner による gh-108634 での貢献。)

* POSIX システムでは、pkg-config (".pc") のファイル名に ABI フラグが含
  まれるようになりました。 例えば、フリースレッドビルドでは
  "python-3.13t.pc"、デバッグビルドでは "python-3.13d.pc" が生成されま
  す。

* C 拡張 "errno"、"fcntl"、"grp"、"md5"、"pwd"、"resource"、"termios"
  、"winsound"、"_ctypes_test"、"_multiprocessing.posixshmem"、
  "_scproxy"、"_stat"、"_statistics"、"_testconsole"、
  "_testimportmultiple"、"_uuid" が、Limited C API でビルドされるよう
  になりました。 (Victor Stinner による gh-85283 での貢献。)


Python 3.13 への移植
====================

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


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

* PEP 667 により、"locals()" と "f_locals" の意味がいくつか変わります
  。

  * *optimized scope* で "locals()" を呼び出すと、呼び出すたびに独立し
    たスナップショットが作成され、以前返された参照先が暗黙に更新されな
    くなりました。 CPython の従来の動作が必要なら、最初に返された辞書
    を、その後の "locals()" 呼び出しの結果で明示的に更新する必要があり
    ます。 "locals()" を暗黙の対象とするコード実行関数 ("exec" や
    "eval" など) の結果を最適化されたスコープから取得するには、名前空
    間を明示的に渡す必要があります。 (**PEP 667** の一環として変更。)

  * モジュールまたはクラスのスコープの内包表記から "locals()" を呼び出
    した場合 ("exec" や "eval" を介する場合も含む)、内包表記が独立した
    入れ子の関数として動作するかのような挙動に戻りました。 つまり、内
    包表記を含むスコープのローカル変数は含まれません。 Python 3.12 で
    は **PEP 709** の実装に伴い、内包表記を含むスコープのローカル変数
    を含めるように変わっていました。 (**PEP 667** の一環として変更。)

  * *optimized scope* で "FrameType.f_locals" にアクセスすると、更新時
    点が不明確なスナップショットではなく、書き込みを直接反映するプロキ
    シを返すようになりました。 スナップショットが必要な場合は、"dict"
    またはプロキシの ".copy()" メソッドを使って明示的に作成する必要が
    あります。 (**PEP 667** の一環として変更。)

* "functools.partial" をメソッドとして使うと、"FutureWarning" が出るよ
  うになりました。 将来の Python では動作が変わります。 従来の動作を保
  つには、"staticmethod()" でラップしてください。 (Serhiy Storchaka に
  よる gh-121027 での貢献。)

* "getpass.getuser()" は、ユーザー名の取得に失敗した場合、常に
  "OSError" を送出するようになりました。 以前は、Unix 以外のプラットフ
  ォームでは "ImportError"、パスワードデータベースが空の Unix プラット
  フォームでは "KeyError" を送出していました。

* "gzip.GzipFile" の "mode" 属性の値が、整数 ("1" または "2") から文字
  列 ("'rb'" または "'wb'") に変わりました。 "zipfile.ZipFile.open()"
  が返す読み取り可能なファイルライクオブジェクトの "mode" 属性の値は、
  "'r'" から "'rb'" に変わりました。 (Serhiy Storchaka による
  gh-115961 での貢献。)

* "mailbox.Maildir" は、ドット (".") で始まるファイルを無視するように
  なりました。 (Zackery Spytz による gh-65559 での貢献。)

* "pathlib.Path.glob()" と "rglob()" は、「"**"」で終わるパターンを渡
  すと、ディレクトリだけでなくファイルも返すようになりました。 従来の
  動作を保ち、ディレクトリだけに一致させるには、末尾にスラッシュを追加
  してください。

* "threading" モジュールは、"_thread" モジュールに
  "_is_main_interpreter()" 関数があることを前提とするようになりました
  。 この関数は引数を取らず、現在のインタープリタがメインインタープリ
  タなら "True" を返します。

  独自の "_thread" モジュールを提供するライブラリやアプリケーションは
  、そのモジュールのほかの「非公開」属性と同じく、
  "_is_main_interpreter()" を提供する必要があります。 (gh-112826)。


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

* "Python.h" は標準ヘッダー "<ieeefp.h>" をインクルードしなくなりまし
  た。 "finite()" 関数のためにインクルードしていましたが、この関数は現
  在 "<math.h>" で提供されています。 必要な場合は、明示的にインクルー
  ドしてください。 "HAVE_IEEEFP_H" マクロも削除されました。 (Victor
  Stinner による gh-108765 での貢献。)

* "Python.h" は、標準ヘッダーファイル "<time.h>"、"<sys/select.h>"、
  "<sys/time.h>" をインクルードしなくなりました。 必要な場合は、明示的
  にインクルードしてください。 例えば、"<time.h>" は "clock()" と
  "gmtime()" を、"<sys/select.h>" は "select()" を、"<sys/time.h>" は
  "futimes()"、"gettimeofday()"、"setitimer()" を提供します。 (Victor
  Stinner による gh-108765 での貢献。)

* Windows では、"Python.h" は標準ヘッダーファイル "<stddef.h>" をイン
  クルードしなくなりました。 必要な場合は、明示的にインクルードしてく
  ださい。 このヘッダーは、例えば "offsetof()" や "size_t" 型、
  "ptrdiff_t" 型を提供します。 ほかのすべてのプラットフォームでは、以
  前から "<stddef.h>" を明示的にインクルードする必要がありました。
  "HAVE_STDDEF_H" マクロは Windows でのみ定義されています。 (Victor
  Stinner による gh-108765 での貢献。)

* "Py_LIMITED_API" マクロを定義した場合、"<Python.h>" が
  "Py_BUILD_CORE"、"Py_BUILD_CORE_BUILTIN"、"Py_BUILD_CORE_MODULE" マ
  クロの定義を解除するようになりました。 (Victor Stinner による
  gh-85283 での貢献。)

* 古い trashcan マクロ "Py_TRASHCAN_SAFE_BEGIN" と
  "Py_TRASHCAN_SAFE_END" が削除されました。 それぞれ新しいマクロ
  "Py_TRASHCAN_BEGIN" と "Py_TRASHCAN_END" に置き換えてください。

  例えば、古いマクロを使う次のような "tp_dealloc" 関数は、

     static void
     mytype_dealloc(mytype *p)
     {
         PyObject_GC_UnTrack(p);
         Py_TRASHCAN_SAFE_BEGIN(p);
         ...
         Py_TRASHCAN_SAFE_END(p)
     }

  次のように新しいマクロに移行してください。

     static void
     mytype_dealloc(mytype *p)
     {
         PyObject_GC_UnTrack(p);
         Py_TRASHCAN_BEGIN(p, mytype_dealloc)
         ...
         Py_TRASHCAN_END
     }

  "Py_TRASHCAN_BEGIN" には 2 番目の引数があり、そのマクロを含む解放関
  数を指定する必要があります。 新しいマクロは Python 3.8 で追加され、
  古いマクロは Python 3.11 で非推奨になりました。 (Irit Katriel による
  gh-105111 での貢献。)

* PEP 667 により、フレームに関係する関数がいくつか変わります。

  * *optimized scope* で "PyEval_GetLocals()" が返す辞書を変更したとき
    の影響が変わりました。 この方法で追加した新しい辞書の項目は、その
    フレームで後から "PyEval_GetLocals()" を呼び出した場合に *だけ* 見
    えるようになりました。 "PyFrame_GetLocals()"、"locals()"、
    "FrameType.f_locals" は、同じキャッシュされた辞書にアクセスしなく
    なったためです。 実際の変数名の項目や、書き込みを直接反映するプロ
    キシのインターフェースを通じて追加した名前の項目に加えた変更は、そ
    のフレームで後から "PyEval_GetLocals()" を呼び出すと上書きされます
    。 推奨するコードの更新方法は関数の使い方によるため、詳しくはその
    関数の非推奨の注意書きを参照してください。

  * Calling "PyFrame_GetLocals()" in an *optimized scope* now returns
    a write-through proxy rather than a snapshot that gets updated at
    ill-specified times. If a snapshot is desired, it must be created
    explicitly (e.g. with "PyDict_Copy()"), or by calling the new
    "PyEval_GetFrameLocals()" API.

  * "PyFrame_FastToLocals()" と "PyFrame_FastToLocalsWithError()" は、
    何も効果がなくなりました。 "PyFrame_GetLocals()" が導入された
    Python 3.11 以降、これらの関数の呼び出しは不要でした。

  * "PyFrame_LocalsToFast()" は、何も効果がなくなりました。
    "PyFrame_GetLocals()" が *最適化されたスコープ* に対して、書き込み
    を直接反映するプロキシを返すようになったため、この関数を呼び出す必
    要はありません。

* Python 3.13 では、多くの非公開関数が削除されました。 その一部は、次
  の代替 API で置き換えられます。

  * "_PyDict_Pop()": "PyDict_Pop()" または "PyDict_PopString()"

  * "_PyDict_GetItemWithError()": "PyDict_GetItemRef()"

  * "_PyErr_WriteUnraisableMsg()":  "PyErr_FormatUnraisable()"

  * "_PyEval_SetTrace()": "PyEval_SetTrace()" または
    "PyEval_SetTraceAllThreads()"

  * "_PyList_Extend()": "PyList_Extend()"

  * "_PyLong_AsInt()": "PyLong_AsInt()"

  * "_PyMem_RawStrdup()": "strdup()"

  * "_PyMem_Strdup()": "strdup()"

  * "_PyObject_ClearManagedDict()": "PyObject_ClearManagedDict()"

  * "_PyObject_VisitManagedDict()": "PyObject_VisitManagedDict()"

  * "_PyThreadState_UncheckedGet()": "PyThreadState_GetUnchecked()"

  * "_PyTime_AsSecondsDouble()": "PyTime_AsSecondsDouble()"

  * "_PyTime_GetMonotonicClock()": "PyTime_Monotonic()" または
    "PyTime_MonotonicRaw()"

  * "_PyTime_GetPerfCounter()": "PyTime_PerfCounter()" または
    "PyTime_PerfCounterRaw()"

  * "_PyTime_GetSystemClock()": "PyTime_Time()" または
    "PyTime_TimeRaw()"

  * "_PyTime_MAX": "PyTime_MAX"

  * "_PyTime_MIN": "PyTime_MIN"

  * "_PyTime_t": "PyTime_t"

  * "_Py_HashPointer()": "Py_HashPointer()"

  * "_Py_IsFinalizing()": "Py_IsFinalizing()".

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


回帰テストの変更
================

* "configure" に "--with-pydebug" を指定してビルドした Python が、コマ
  ンドラインオプション "-X presite=package.module" をサポートするよう
  になりました。 指定すると、インタープリタのライフサイクルの初期、
  "site.py" の実行前にインポートするモジュールを指定できます。 (Łukasz
  Langa による gh-110769 での貢献。)
