Python 3.15 の新機能¶
- 編集者:
Hugo van Kemenade
この記事では、Python 3.14 と比較した Python 3.15 の新機能を説明します。 Python 3.15 は2026年10月9日にリリースされました。 詳細は 変更履歴 を参照してください。
参考
PEP 790 -- Python 3.15 のリリーススケジュール
概要 -- リリースハイライト¶
Python 3.15 は Python プログラミング言語の最新の安定版で、言語、実装、標準ライブラリにさまざまな変更が加わっています。 主な変更には、遅延インポート、組み込み型 frozendict と sentinel、デフォルトのエンコーディングの UTF-8 化、内包表記でのアンパック、フリースレッドビルド向けの安定 ABI があります。
ライブラリの変更には、高頻度の統計的サンプリングプロファイラー Tachyon を備えた新しい profiling パッケージ や、コマンドライン出力の カラー表示の拡充 があります。 これらに加え、通常どおり非推奨化や削除、使いやすさと正確性の改善も行われています。
この記事は、すべての新機能の完全な仕様を示すものではなく、概要を分かりやすく紹介するものです。 詳細は ライブラリリファレンス や 言語リファレンス などのドキュメントを参照してください。 変更の実装や設計の根拠を詳しく知るには、その新機能の PEP を参照してください。 ただし、PEP は通常、機能の実装が完了すると更新されなくなることに注意してください。
以前のバージョンからアップグレードする際の指針は、Porting to Python 3.15 を参照してください。
インタプリタの改善:
標準ライブラリーの顕著な改善
新しい型ヒントの機能:
C API の改善:
PEP 803、820、793:フリースレッドビルド向けの安定 ABI と関連する C API
ビルドの変更:
リリースの変更:
macOS の公式バイナリで、フリースレッドのサポートをデフォルトでインストール
新しい機能¶
PEP 810:明示的な遅延インポート¶
大規模な Python アプリケーションでは、起動に時間がかかることがよくあります。 大きな原因の一つがインポートシステムです。 モジュールをインポートするとき、Python はファイルを探し、ディスクから読み込み、バイトコードにコンパイルして、トップレベルのコードをすべて実行する必要があります。 依存関係が深いアプリケーションでは、その実行でインポートしたコードの大半を使わない場合でも、この処理に数秒かかることがあります。
開発者は、インポートを関数内に移したり、importlib で必要になった時点でモジュールをロードしたり、不要な依存関係を避けるようコードを再構成したりして対処してきました。
これらの方法は有効ですが、コードを読みにくく保守しにくいものにし、コード全体にインポート文を散在させ、一貫して適用するための注意を必要とします。
Python は、新しいソフトキーワード lazy を使った明示的な lazy インポートという、よりすっきりした解決方法を提供するようになりました。
インポートを遅延させると、インポートした名前を初めて使うまで、Python は実際のモジュールのロードを延期します。
これにより、すべてのインポートをファイルの先頭にまとめて宣言しながら、実際に使うモジュールについてだけロードのコストを支払えます。
lazy キーワードは import 文と from ... import 文の両方で使えます。
lazy import heavy_module と書いても、Python はすぐにはモジュールをロードせず、軽量なプロキシオブジェクトを作成します。
その名前に初めてアクセスしたときに、実際のモジュールのロードが透過的に行われます:
lazy import json
lazy from pathlib import Path
print("Starting up...") # json と pathlib はまだ完全にはインポートされていない
data = json.loads('{"key": "value"}') # ここで json が完全にインポートされる
p = Path(".") # ここで pathlib が完全にインポートされる
この仕組みは、トップレベルで多くのモジュールをインポートするものの、1回の実行ではその一部しか使わないことがあるアプリケーションで特に有用です。 ロードを遅らせることで、コードの再構成や、コード全体に条件付きインポートを散在させることなく、起動時の待ち時間を短縮できます。
遅延インポートしたモジュールのロードが失敗した場合 (例えばモジュールが存在しない場合)、Python はインポート時ではなく、最初に使った時点で例外を送出します。 トレースバックには、名前にアクセスした場所と元のインポート文の両方が含まれるため、失敗の原因を調べてデバッグしやすくなります。
ソースコードを変更せずに全体で遅延ロードを有効にしたい場合のために、Python はコマンドラインオプション -X lazy_imports と環境変数 PYTHON_LAZY_IMPORTS を提供します。
どちらも二つの値を受け付けます。
all はすべてのインポートをデフォルトで遅延させ、normal (デフォルト) はソースコード内の lazy キーワードに従います。
sys.set_lazy_imports() と sys.get_lazy_imports() を使うと、実行時にこのモードを変更・照会できます。
より細かく制御するために、sys.set_lazy_imports_filter() は、特定のモジュールを遅延ロードするかどうかを判定する呼び出し可能オブジェクトを受け付けます。
フィルターは、インポートする側のモジュール名 (または None)、インポートされるモジュール名、fromlist (通常のインポートでは None) の三つの引数を受け取ります。
遅延インポートを許可するには True を、即時ロードを強制するには False を返してください。
これにより、自分のアプリケーションのモジュールだけを遅延させ、サードパーティーの依存モジュールはすぐにロードするといった使い方ができます:
import sys
def myapp_filter(importing, imported, fromlist):
return imported.startswith("myapp.")
sys.set_lazy_imports_filter(myapp_filter)
sys.set_lazy_imports("all")
import myapp.slow_module # 遅延 (フィルターに一致)
import json # 即時 (フィルターに不一致)
遅延インポートをプログラムで検出する必要があるコード向けに、プロキシの型自体も types.LazyImportType として公開されています。
lazy キーワードを使える場所には制限があります。
遅延インポートはモジュールスコープでのみ許可され、関数、クラス本体、try/except/finally ブロックの中で lazy を使うと SyntaxError が発生します。
スターインポートと future インポートも遅延させられません (lazy from module import * と lazy from __future__ import ... はどちらも SyntaxError になります)。
lazy キーワードを直接使えないコード (例えば、3.15 より前の Python に対応しつつ、3.15 以降では遅延インポートを使いたい場合) では、完全修飾されたモジュール名の文字列を格納するコンテナとして __lazy_modules__ を定義できます。
これらのモジュールに対する通常の import 文は、lazy キーワードと同じ意味を持つ遅延インポートとして扱われます。
__lazy_modules__ = ["json", "pathlib"]
import json # 遅延
import os # 引き続き即時
(Pablo Galindo Salgado と Dino Viehland が gh-142349 で貢献しました。)
参考
完全な仕様と設計の根拠は PEP 810 を参照してください。
PEP 814:組み込み型 frozendict の追加¶
新しい イミュータブル な型 frozendict が builtins モジュールに追加されました。
作成後の変更はできません。
frozendict は dict のサブクラスではなく、object を直接継承します。
キーと値がすべてハッシュ可能であれば、frozendict も ハッシュ可能 です。
frozendict は挿入順序を保持しますが、比較では順序を考慮しません。
例えば:
>>> a = frozendict(x=1, y=2)
>>> a
frozendict({'x': 1, 'y': 2})
>>> a['z'] = 3
Traceback (most recent call last):
File "<python-input-2>", line 1, in <module>
a['z'] = 3
~^^^^^
TypeError: 'frozendict' object does not support item assignment
>>> b = frozendict(y=2, x=1)
>>> hash(a) == hash(b)
True
>>> a == b
True
frozendict を受け付けるように、標準ライブラリの copy、decimal、json、marshal、plistlib (シリアライズのみ)、pickle、pprint、xml.etree.ElementTree が更新されました。
eval() と exec() は globals に frozendict を、type() と str.maketrans() は dict に frozendict を受け付けます。
isinstance(arg, dict) で dict 型を調べているコードは、frozendict 型も受け付けるように isinstance(arg, (dict, frozendict)) に変更できます。
また、MappingProxyType などのほかのマッピング型も受け付けるには、isinstance(arg, collections.abc.Mapping) に変更できます。
(Victor Stinner と Donghee Na が gh-141510 で貢献しました。)
参考
完全な仕様と設計の根拠は PEP 814 を参照してください。
PEP 661:組み込み型 sentinel の追加¶
簡潔な表現を持つ一意なセンチネル値を作成するために、新しい sentinel 型が builtins モジュールに追加されました。
センチネルオブジェクトはコピーしても同一性を保ち、| 演算子を使った型式で利用でき、モジュール名と名前でインポートできる場合は pickle 化できます。
(Jelle Zijlstra が gh-148829 で貢献しました。PEP 661 は Tal Einat が執筆しました。)
参考
詳しくは PEP 661 を参照してください。
PEP 799:専用の profiling パッケージ¶
Python 組み込みのプロファイリングツールを一つの一貫した名前空間にまとめるため、新しい profiling モジュールが追加されました。
このモジュールには以下が含まれます:
profiling.tracing:決定論的な関数呼び出しのトレース (cProfileから移動)。profiling.sampling:新しい統計的サンプリングプロファイラー (Tachyon)。
cProfile モジュールは後方互換性のために別名として残ります。
profile モジュールは非推奨となり、Python 3.17 で削除されます。
(Pablo Galindo と László Kiss Kollár が gh-138122 で貢献しました。)
参考
詳しくは PEP 799 を参照してください。
Tachyon:高頻度の統計的サンプリングプロファイラー¶
新しい統計的サンプリングプロファイラー (Tachyon) が profiling.sampling として追加されました。
コードの変更やプロセスの再起動をせずに、実行中の Python プロセスのパフォーマンスを低いオーバーヘッドで分析できます。
すべての関数呼び出しを計測する決定論的プロファイラー (profiling.tracing など) とは異なり、サンプリングプロファイラーは実行中のプロセスから定期的にスタックトレースを取得します。
この方法は、実質的にオーバーヘッドを生じさせずに 最大1,000,000 Hz のサンプリングレートを達成します。
そのため、提供時点で Python 向けに利用できる最速のサンプリングプロファイラーであり、本番環境のパフォーマンス問題のデバッグに適しています。
従来のプロファイリング方法では実行への影響が大きすぎる本番システムで、パフォーマンスの問題を調べる際に特に有用です。
主な機能は以下のとおりです:
オーバーヘッドのないプロファイリング:実行中の Python プロセスのパフォーマンスに影響を与えずにアタッチできます。 アプリケーションの再起動や速度低下を許容できない本番環境でのデバッグに適しています。
コードの変更が不要:既存のアプリケーションを再起動せずにプロファイリングできます。 実行中のプロセスを PID で指定するだけで、データの収集を開始できます。
柔軟な対象の指定方法:
PID で実行中のプロセスをプロファイリング (
attach) -- すでに実行中のアプリケーションにアタッチしますスクリプトを直接実行してプロファイリング (
run) -- 実行開始時点からプロファイリングしますモジュールを実行してプロファイリング (
run -m) --python -m moduleで実行するパッケージをプロファイリングします実行中のプロセスのスナップショットを一度だけ取得する (
dump) — 各スレッドのスタックをトレースバック形式で表示します (--async-awareを指定した場合はすべての asyncio タスクが対象です)。 ハングしたプロセスの調査に役立ちます。
複数のプロファイリングモード: パフォーマンス調査の目的に応じて測定対象を選べます。
実経過時間 (
--mode wall、デフォルト): I/O、ネットワーク待ち、ブロックする操作を含む実際の経過時間を測定します。 外部リソースを待っている時間も含め、プログラムがどこに時間を費やしているかを調べるために使います。CPU 時間 (
--mode cpu): I/O 待ちやブロックを除き、CPU が実際に実行している時間だけを測定します。 CPU 処理が原因のボトルネックを特定し、計算処理を最適化するために使います。GIL の保持時間 (
--mode gil): Python のグローバルインタープリタロックを保持している時間を測定します。 マルチスレッドアプリケーションで、どのスレッドが GIL の使用時間の大半を占めているかを調べるために使います。例外処理時間 (
--mode exception): 処理中の例外があるスレッドからだけサンプルを取得します。 例外処理のオーバーヘッドを分析するために使います。
スレッドを考慮したプロファイリング: すべてのスレッド (
-a) を対象にするか、メインスレッドだけを対象にするかを選べます。 マルチスレッドアプリケーションの動作を理解する上で重要な機能です。複数の出力形式: 作業に最も適した可視化形式を選べます。
--pstats:pstatsと互換性のある詳細な表形式の統計です。 関数単体と呼び出し先を含めた累積のサンプル数により、関数単位の時間を表示します。 詳細な分析や既存の Python プロファイリングツールとの連携に適しています。--collapsed: スタックごとに 1 行にまとめたスタックトレースを生成します。 この形式は Brendan Gregg の FlameGraph スクリプトや speedscope などの外部ツールでフレームグラフを作成するために設計されています。--flamegraph: D3.js を使い、単体で動作する対話型の HTML フレームグラフを生成します。 ブラウザーで直接開いて、すぐに視覚的な分析を始められます。 フレームグラフは呼び出しの階層を表示し、幅で所要時間を表すため、ボトルネックを一目で見つけやすくなります。--gecko: Firefox Profiler と互換性のある Gecko Profiler 形式を生成します。 出力を Firefox Profiler にアップロードすると、スタックチャート、マーカー、ネットワークアクティビティなどの機能を使って、タイムラインに基づく高度な分析を行えます。--heatmap: 行単位のサンプル数を示す対話型の HTML ヒートマップを生成します。 ファイルごとのヒートマップを含むディレクトリを作成し、ソースコードのどこに時間を費やしているかを正確に示します。
対話型のライブモード: top に似たインターフェースを持つリアルタイムの TUI プロファイラーです (
--live)。 対話的な並べ替えやフィルタリングを使い、実行中のアプリケーションのパフォーマンスを監視できます。非同期処理を考慮したプロファイリング: タスクごとにスタックを再構成し、async/await コードをプロファイリングします (
--async-aware)。 どのコルーチンが時間を消費しているかを確認できます。 実行中のタスクだけを表示するか、待機中も含むすべてのタスクを表示するかを選べます。オペコード単位のプロファイリング: バイトコードのオペコード情報を収集し、命令単位でプロファイリングします (
--opcodes)。 適応型インタープリタによる特殊化も含め、どのバイトコード命令が実行されているかを表示します。
利用可能なすべての出力形式、プロファイリングモード、設定オプションを含む完全なドキュメントは profiling.sampling を参照してください。
(Pablo Galindo と László Kiss Kollár が gh-135953 and gh-138122 で貢献しました。)
PEP 831: フレームポインターをデフォルトで有効化¶
フレームポインターをサポートするプラットフォームでは、CPython のビルド時にデフォルトでフレームポインターを有効にするようになりました。
コンパイラーフラグ -fno-omit-frame-pointer と -mno-omit-leaf-frame-pointer を使用し、システムプロファイラー、デバッガー、クラッシュ解析ツール、eBPF ベースの観測ツールがネイティブスタックをより高速かつ確実に巻き戻せるようにします。
これらのフラグは sysconfig を通じて公開されるため、Python のビルド設定を利用するツールでビルドした拡張モジュールも、デフォルトでフレームポインターの設定を引き継ぎます。
この伝播は意図したものです。
Python とネイティブコードが混在するプロファイリングでは、インタープリタ、拡張モジュール、埋め込みアプリケーション、ネイティブライブラリを通じて、フレームポインターの連鎖が途切れないことが必要です。
重要
サードパーティーのビルドバックエンドやネイティブのビルドシステムは、Python の sysconfig の値を利用する際にこれらのフラグを保持するべきです。
Python のコンパイラーフラグを引き継がずに C、C++、Rust などのネイティブコードをコンパイルするビルドシステムでは、同等のフレームポインターフラグを独自に有効にするべきです。
フレームポインターなしでビルドされたネイティブコンポーネントが一つあるだけで、Python プロセス全体のスタックの巻き戻しができなくなることがあります。
(Pablo Galindo Salgado と Savannah Ostrowski が gh-149201; PEP 831 written by Pablo Galindo Salgado, Ken Jin, Savannah Ostrowski, and Diego Russo で貢献しました。)
参考
詳しくは PEP 831 を参照してください。
PEP 798: 内包表記でのアンパック¶
リスト、集合、辞書の内包表記とジェネレーター式で、* と ** によるアンパックが使えるようになりました。
PEP 448 のアンパック構文を内包表記に拡張し、任意の数のイテラブルや辞書を一つの平坦な構造にまとめる新しい構文を提供します。
この新しい構文は、入れ子の内包表記、itertools.chain()、itertools.chain.from_iterable() の代わりに使えます。
例えば次のように書けます。
>>> lists = [[1, 2], [3, 4], [5]]
>>> [*L for L in lists] # 次の式と等価: [x for L in lists for x in L]
[1, 2, 3, 4, 5]
>>> sets = [{1, 2}, {2, 3}, {3, 4}]
>>> {*s for s in sets} # 次の式と等価: {x for s in sets for x in s}
{1, 2, 3, 4}
>>> dicts = [{'a': 1}, {'b': 2}, {'a': 3}]
>>> {**d for d in dicts} # 次の式と等価: {k: v for d in dicts for k,v in d.items()}
{'a': 3, 'b': 2}
ジェネレーター式でも同様にアンパックを使い、複数のイテラブルから値を yield できます。
>>> gen = (*L for L in lists) # 次の式と等価: (x for L in lists for x in L)
>>> list(gen)
[1, 2, 3, 4, 5]
この変更は非同期ジェネレーター式にも適用されます。
例えば (*a async for a in agen()) は (x async for a in agen() for x in a) と等価です。
(Adam Hartz が gh-143055 で貢献しました。)
参考
詳しくは PEP 798 を参照してください。
PEP 829: パッケージの起動設定ファイル¶
-S が指定されていないときに site モジュールが読み込む .pth ファイル には、sys.path を拡張する行を含められます。
また、import (直後にスペースまたはタブが続く) で始まる行では任意のコードを実行できます。
後者の機能には、Python の起動時に実行される内容を正確に把握することが難しいという問題があります。
起動前に実行されるコードを監査しやすくするための一歩として、Python 3.15 は .start ファイル を導入します。
このファイルには pkg.mod:callable という形式でエントリーポイントを指定します。
pkg.mod は指定した呼び出し可能オブジェクトへのインポートパスです。
Python の起動時に、この呼び出し可能オブジェクトを見つけて引数なしで呼び出します。
.pth ファイルの import 行は、警告を出さずに非推奨となりました。
対応する .start ファイルが見つかると、.pth ファイルの import 行は無視されます。
.pth ファイル内の sys.path を拡張する行に変更はありません。
site モジュールは、複数の site ディレクトリの起動処理をまとめて行う site.StartupState も提供します。
これにより、起動コードを実行する前にすべての静的なパス拡張が適用されます。
通常のインタープリタの起動時には、site.main() がこのクラスのインスタンスを暗黙に使い、すべての起動設定ファイルをまとめて処理します。
同じようにまとめて処理する必要がある呼び出し側は、StartupState を直接作成し、addsitedir()、addusersitepackages()、addsitepackages() を呼び出した後、最後に process() を一度呼び出せます。
PEP 803: フリースレッドビルド用の安定 ABI¶
安定 ABI を対象とする C 拡張を、新しい フリースレッドビルド用の安定 ABI (abi3t とも呼ばれます) 向けにコンパイルできるようになりました。
これにより CPython の フリースレッドビルド と互換性を持たせられます。
通常はソースコードに相応の変更が必要です。
具体的には次の変更を行います。
インスタンスの構造体に
PyObjectを含める代わりに、負のbasicsizeやPyObject_GetTypeData()など、PEP 697 (Python 3.12) で導入された API に切り替える。PyInit_関数から、この目的のために PEP 793 で導入された新しいエクスポートフックPyModExport_*に切り替え、PEP 820 で導入された新しいPySlot構造体を使う。
安定 ABI は CPython が提供するすべての機能を利用できるわけではありません。
abi3t に切り替えられない拡張は、引き続き既存の安定 ABI (abi3) とフリースレッド用のバージョン固有の ABI (cp315t) 向けに別々にビルドするべきです。
フリースレッドビルド用の安定 ABI は通常、ビルドツールで選択するべきです。
abi3t をサポートするツールには meson-python、scikit-build-core、Maturin があります。
abi3t ビルドに関する各ツールのドキュメントへのリンクは ビルドの設定 を参照してください。
ビルドツールが abi3t をサポートしていない場合は、cp315t 向けに別途コンパイルしてください。
ビルドツールを使わない場合や、そのようなツールを作成する場合は、Stable ABI 向けのコンパイル で説明するようにマクロ Py_TARGET_ABI3T を設定して abi3t を選択できます。
abi3t に切り替えるための実践的な 移行ガイド が用意されています。
コミュニティーが保守する Python Free-Threading Guide には、abi3t wheel のビルドとテストの例があります。
参考
詳しくは PEP 803 を参照してください。
PEP 788: インタープリタの終了処理から C API を保護¶
C API では インタープリタの終了処理 が多くの拡張で問題になることがあります。 終了処理中にスレッド状態を アタッチ するとスレッドが永久に停止し、デッドロックやその他の予期しない問題につながるためです。 また、従来はインタープリタを使う前にその生存を安全に確認することができませんでした。 あるスレッドがインタープリタにアタッチしようとしている間に別のスレッドがそのインタープリタを削除すると、クラッシュにつながっていました。
これらの問題を回避するため、次の新しい API 群が追加されました。
インタープリタガード は、インタープリタの終了処理を防ぎます。
インタープリタビュー は、並行して終了処理や削除が行われる可能性があるインタープリタに、スレッドセーフなアクセスを提供します。
スレッド状態を自動でアタッチおよびデタッチする 新しい API には、終了処理に対する保護が組み込まれています。
さらに、PyGILState 系の API (特に PyGILState_Ensure() と PyGILState_Release()) が ソフト非推奨 になりました。
削除する予定は なく、既存のコードは引き続き動作しますが、今後の Python のバージョンで新しい PyGILState API が追加されることはありません。
(Peter Bierma が gh-149101 で貢献しました。)
参考
詳しくは PEP 788 を参照してください。
エラーメッセージの改善¶
オブジェクトに存在しない属性にアクセスした際、そのメンバーの一つを通じて似た属性を利用できる場合、インタープリタが
AttributeError例外でより役立つ候補を提示するようになりました。例えば、オブジェクトのある属性が、求めている名前を持つ属性を公開している場合、エラーメッセージはその内側の属性を通じたアクセスを提案します。
from dataclasses import dataclass from math import pi @dataclass class Circle: radius: float @property def area(self) -> float: return pi * self.radius**2 class Container: def __init__(self, inner: Circle) -> None: self.inner = inner circle = Circle(radius=4.0) container = Container(circle) print(container.area)
このコードを実行すると、より明確な候補が表示されるようになりました。
Traceback (most recent call last): File "example.py", line 18, in <module> print(container.area) ^^^^^^^^^^^^^^ AttributeError: 'Container' object has no attribute 'area'. Did you mean '.inner.area' instead of '.area'?
組み込み型の
AttributeErrorで、レーベンシュタイン距離が近い候補が見つからない場合、他の言語 (JavaScript、Java、Ruby、C#) でよく使われるメソッド名の固定の表を調べ、対応する Python のメソッドを提示するようになりました。>>> [1, 2, 3].push(4) Traceback (most recent call last): ... AttributeError: 'list' object has no attribute 'push'. Did you mean '.append'? >>> 'hello'.toUpperCase() Traceback (most recent call last): ... AttributeError: 'str' object has no attribute 'toUpperCase'. Did you mean '.upper'?
Python で対応するものがメソッドではなく言語構文の場合は、その構文を直接説明するヒントを表示します。
>>> {}.put("a", 1) Traceback (most recent call last): ... AttributeError: 'dict' object has no attribute 'put'. Use d[k] = v.
イミュータブルな型に対してミュータブルな型のメソッドが呼び出されると、対応するミュータブルな型をヒントとして提示します。
>>> (1, 2, 3).append(4) Traceback (most recent call last): ... AttributeError: 'tuple' object has no attribute 'append'. Did you mean to use a 'list' object?
これらのヒントは組み込み型のサブクラスでも機能します。
(Matt Van Horn が gh-146406 で貢献しました。)
delattr()が属性が存在しないために失敗した場合、インタープリタが候補の提示を試みるようになりました。 既存の属性によく似た属性名が使われると、エラーメッセージで正しい属性名を提示します。 例えば次のようになります。>>> class A: ... pass >>> a = A() >>> a.abcde = 1 >>> del a.abcdf Traceback (most recent call last): ... AttributeError: 'A' object has no attribute 'abcdf'. Did you mean: 'abcde'?
(Nikita Sobolev と Pranjal Prajapati が gh-136588 で貢献しました。)
「引数」という用語を誤って使っていたいくつかのエラーメッセージを訂正しました。 (Stan Ulbrych による貢献。gh-133382。)
その他の言語の変更¶
Python はシステム環境によらず、UTF-8 をデフォルトのエンコーディングとして使うようになりました。 つまり、
open('flying-circus.txt')など、エンコーディングを明示しない I/O 操作は UTF-8 を使います。 UTF-8 は広くサポートされている Unicode の文字エンコーディングであり、インターネット上のほぼすべてのウェブページ、多くの一般的なファイル形式、プログラミング言語などで、テキストを表現するための 事実上の 標準となっています。これは
encoding引数が指定されていない場合にだけ適用されます。 Python のバージョン間で最大限の互換性を保つには、常にencoding引数を明示してください。 任意で有効にできるエンコーディングの警告 を使うと、この変更の影響を受ける可能性があるコードを特定できます。 特別な引数encoding='locale'は現在のロケールのエンコーディングを使い、Python 3.10 以降でサポートされています。以前の動作を維持するには、環境変数
PYTHONUTF8=0またはコマンドラインオプション-X utf8=0で Python の UTF-8 モードを無効にできます。(Adam Turner が gh-133711; PEP 686 written by Inada Naoki で貢献しました。)
参考
詳しくは PEP 686 を参照してください。
インタープリタのヘルプ (
python --helpなど) が色付きになりました。 環境変数 で制御できます。 (Hugo van Kemenade による貢献。gh-148766。)送出できない例外がデフォルトで色付きで強調表示されるようになりました。 環境変数 で制御できます。 (Peter Bierma による貢献。gh-134170。)
argparse、ast、calendar、difflib、http.server、pickletools、PyREPL のタブ補完、python --help、sqlite3、timeit、tokenize、送出できない例外、および stdlib (ast、compileall、doctest、gzip、inspect、json.tool、pdb、profiling.sampling、random、regrtest、sqlite3、timeit、tokenize、trace、unittest、uuid、zipapp、zipfile) の CLI ヘルプで、色の使用を拡大しました。
ImportErrorとModuleNotFoundErrorの__repr__()が、生成時にキーワード引数として与えられた "name" と "path" を、それぞれname=<name>とpath=<path>として表示するようになりました。 (Serhiy Storchaka, Oleg Iarygin, と Yoav Nir による貢献。gh-74185。)__dict__と__weakref__のデスクリプタが、インタープリタごとに一つのデスクリプタインスタンスを使い、必要とするすべての型で共有するようになりました。 これによりクラスの作成が高速化し、循環参照の回避にも役立ちます。 (Petr Viktorin による貢献。gh-135228。)-WオプションとPYTHONWARNINGS環境変数で、対応するフィールドをスラッシュ (/) で囲むと、警告メッセージやモジュール名との照合にリテラル文字列ではなく正規表現を指定できるようになりました。 (Serhiy Storchaka による貢献。gh-134716。)タイムスタンプやタイムアウトの引数を取る関数が、整数と浮動小数点数だけでなく、任意の実数 (
DecimalやFractionなど) を受け付けるようになりました。 ただし、精度が向上するわけではありません。 (Serhiy Storchaka による貢献。gh-67795。)
bytearrayからコピーせずにバイト列を取り出すbytearray.take_bytes(n=None, /)を追加しました。 これにより、データのバッファリング、ネットワークプロトコルの解析、エンコード、デコード、圧縮など、ミュータブルなバイト列のバッファーを操作した後にbytesを返す必要があるコードを最適化できます。take_bytes()で最適化できる一般的なコードパターンを以下に示します。最適化のためのリファクタリング例¶ 説明
古い(Old)
変更後
def read() -> bytes: buffer = bytearray(1024) ... return bytes(buffer)
def read() -> bytes: buffer = bytearray(1024) ... return buffer.take_bytes()
バイト列を取り出してバッファーを空にする
buffer = bytearray(1024) ... data = bytes(buffer) buffer.clear()
buffer = bytearray(1024) ... data = buffer.take_bytes()
指定した区切りでバッファーを分割する
buffer = bytearray(b'abc\ndef') n = buffer.find(b'\n') data = bytes(buffer[:n + 1]) del buffer[:n + 1] assert data == b'abc\n' assert buffer == bytearray(b'def')
buffer = bytearray(b'abc\ndef') n = buffer.find(b'\n') data = buffer.take_bytes(n + 1)
指定した区切りでバッファーを分割し、区切り以降を破棄する
buffer = bytearray(b'abc\ndef') n = buffer.find(b'\n') data = bytes(buffer[:n]) buffer.clear() assert data == b'abc' assert len(buffer) == 0
buffer = bytearray(b'abc\ndef') n = buffer.find(b'\n') buffer.resize(n) data = buffer.take_bytes()
(Cody Maloney が gh-139871 で貢献しました。)
compile()、ast.parse()、symtable.symtable()、importlib.abc.InspectLoader.source_to_code()など、Python コードのコンパイルや解析に関わる多くの関数に、モジュール名を渡せるようになりました。 これは、モジュール名に基づいて構文警告を曖昧さなく フィルタリング するために必要です。 (Serhiy Storchaka による貢献。gh-135801。)どのクラスでも __dict__ と __weakref__ の __slots__ を定義できるようになりました。 (Serhiy Storchaka による貢献。gh-41779。)
tupleの派生クラス (collections.namedtuple()で作成したクラスも含みます) で、任意の __slots__ を定義できるようになりました。 (Serhiy Storchaka による貢献。gh-41779。)slice型が添字付けをサポートし、generic type になりました。 (James Hilton-Balfe による貢献。gh-128335。)memoryviewクラスが C の float complex 型と double complex 型をサポートしました。 それぞれ書式文字'Zf'と'Zd'に対応します。 (Victor Stinner による貢献。gh-146151 と gh-148675。)bytes.replace()の count 引数をキーワードで指定できるようになりました。 (Stan Ulbrych による貢献。gh-147856。)matchのリテラルパターンで、従来からサポートされていた単項マイナスと同様に、単項プラスも使えるようになりました。 (Bartosz Sławecki による貢献。gh-145239。)インポートシステムがモジュールごとのロックを階層順に (サブモジュールより先に親パッケージのロックを) 取得するようになりました。 これにより、
pkg/sub/__init__.pyがpkg.sub.modをインポートする場合に、pkg.subをインポートするスレッドとpkg.sub.modをインポートする別のスレッドが互いをブロックし得る、長年のデッドロックの問題を修正しました。 (Gregory P. Smith による貢献。gh-83065。).so接尾辞を使う安定 ABI 拡張のファイル名に、foo.abi3-x86-64-linux-gnu.soのように multiarch タプルを含められるようになりました。 これにより、通常の動的拡張と同様に、複数のアーキテクチャー向けの安定 ABI 拡張を互いに衝突することなく同じディレクトリにインストールできます。 (Stefano Rivera による貢献。gh-122931。)バージョン 3.13 から非推奨だったモジュールの
__cached__属性を、インポートシステムと標準ライブラリが設定も参照もしなくなりました。 代わりに__spec__.cachedを使ってください。 (Brett Cannon による貢献。gh-97879。)__loader__属性と__package__属性も非推奨であり、削除が予定されていることに注意してください。
デフォルトの対話型シェル¶
fancycompleter を基に、タブ補完の候補をオブジェクトの種類ごとに色分けするようになりました。
PYTHON_BASIC_COMPLETERを設定するとrlcompleterに戻せます。 色は 環境変数 でも制御できます。 (Antonio Cuni と Pablo Galindo による貢献。gh-130472。)タブ補完が
from ... import文でモジュールの属性を候補として提示するようになりました。 属性を提示できるのはモジュールのインポート後だけなので、stdlib のモジュールは自動的にインポートします。 それ以外のモジュールでは、Tab を 2 回目に押したときに補完機能がインポートを提案します。 (Loïc Simon と Pablo Galindo による貢献。gh-140870。)
新しいモジュール¶
math.integer¶
このモジュールは整数の引数に対する数学関数を提供します (PEP 791)。 (Serhiy Storchaka による貢献。gh-81313。)
改良されたモジュール¶
argparse¶
BooleanOptionalActionアクションが、単一のダッシュで始まる長いオプションと、別の接頭辞文字をサポートしました。 (Serhiy Storchaka による貢献。gh-138525。)argparse.ArgumentParserの suggest_on_error パラメーターのデフォルトをTrueに変更しました。 これにより、入力を間違えた引数に対する候補の提示がデフォルトで有効になります。 (Jakob Schluse による貢献。gh-140450。)ArgumentParserのdescriptionとepilogのテキストでバッククォートによるマークアップをサポートし、色付き出力が有効な場合にインラインコードを強調表示するようになりました。 (Savannah Ostrowski による貢献。gh-142390。)バッククォートによるマークアップを引数の
helpテキストにも拡張し、ダブルバッククォート (RST のインラインリテラル形式) もサポートしました。 (Hugo van Kemenade による貢献。gh-149375。)
array¶
C の float complex 型と double complex 型をサポートしました。 それぞれ書式文字
'Zf'と'Zd'に対応します。 (Victor Stinner による貢献。gh-146151 と gh-148675。)半精度浮動小数点数 (16 ビットの IEEE 754 バイナリ交換形式) をサポートしました。 書式文字は
'e'です。 (Sergey B Kirpichev による貢献。gh-146238。)1 文字より長い型コード (
ZfとZd) をサポートするため、array.typecodesの型をstrからtupleに変更しました。 (Victor Stinner による貢献。gh-148675。)
ast¶
dump()に color パラメーターを追加しました。Trueの場合、返される文字列に ANSI エスケープシーケンスによる構文強調表示を施します。False(デフォルト) の場合、色付き出力は常に無効です。 (Stan Ulbrych による貢献。gh-148981。)コマンドライン 出力がデフォルトで構文強調表示されるようになりました。 これは 環境変数で制御できます。 (Stan Ulbrych による貢献。gh-148981。)
asyncio¶
TaskGroup.cancelを追加しました。 例えば、タスクの目的が達成された場合や、処理が不要になった場合に、タスクグループを早期に終了できます。 従来は、独自の例外を送出する追加のタスクを作り、タスクグループを抜ける際にその例外を抑制するといった、直感的でない定型処理が必要でした。 (John Belmonte による貢献。gh-127214。)
base64¶
z85encode()に pad パラメーターを追加しました。 (Hauke Dämpfling による貢献。gh-143103。)b32encode()、b32decode()、b32hexencode()、b32hexdecode()、b64encode()、b64decode()、urlsafe_b64encode()、urlsafe_b64decode()に padded パラメーターを追加しました。 (Serhiy Storchaka による貢献。gh-73613。)b16encode()、b32encode()、b32hexencode()、b64encode()、b85encode()、z85encode()に wrapcol パラメーターを追加しました。 (Serhiy Storchaka による貢献。gh-143214 と gh-146431。)b16decode()、b32decode()、b32hexdecode()、b64decode()、b85decode()、z85decode()に ignorechars パラメーターを追加しました。 (Serhiy Storchaka による貢献。gh-144001 と gh-146431。)b32decode()、b32hexdecode()、b64decode()、a85decode()、b85decode()、z85decode()に canonical パラメーターを追加しました。 これにより、パディングビットがゼロでないエンコーディングや、その他の正規形でない形式を拒否できます。 (Gregory P. Smith による貢献。gh-146311。)
binascii¶
Base32 エンコーディング用の関数を追加しました。
(James Seo が gh-146192 で貢献しました。)
Ascii85、Base85、Z85 エンコーディング用の関数を追加しました。
(James Seo と Serhiy Storchaka が gh-101178 で貢献しました。)
b2a_base32()、a2b_base32()、b2a_base64()、a2b_base64()に padded パラメーターを追加しました。 (Serhiy Storchaka による貢献。gh-73613。)b2a_base64()に wrapcol パラメーターを追加しました。 (Serhiy Storchaka による貢献。gh-143214。)b2a_base64()とa2b_base64()に alphabet パラメーターを追加しました。 (Serhiy Storchaka による貢献。gh-145980。)a2b_hex()、unhexlify()、a2b_base64()に ignorechars パラメーターを追加しました。 (Serhiy Storchaka による貢献。gh-144001 と gh-146431。)a2b_base64()に canonical パラメーターを追加し、パディングビットがゼロでないエンコーディングを拒否できるようになりました。 (Gregory P. Smith による貢献。gh-146311。)
calendar¶
calendarの コマンドライン のテキスト出力で、色の使用を拡大しました。 環境変数 で制御できます。 (Hugo van Kemenade による貢献。gh-148352。)calendarの コマンドライン の HTML 出力で、python -m calendar -t html 2009 06のように年月を指定できるようになりました。 (Pål Grønås Drange による貢献。gh-140212。)calendar.HTMLCalendarクラスが生成するカレンダーページがダークモードをサポートし、アクセシビリティ向上のため HTML5 標準に移行しました。 (Jiahao Li と Hugo van Kemenade による貢献。gh-137634。)
collections¶
concurrent.futures¶
concurrent.futures.ProcessPoolExecutorの子プロセスが突然終了した場合のエラー報告を改善しました。 トレースバックに終了したプロセスの PID と終了コードが表示されるようになりました。 (Jonathan Berg による貢献。gh-139486。)
contextlib¶
with文およびasync with文との一貫性のため、ExitStackとcontextlib.AsyncExitStackで、__enter__()、__exit__()、__aenter__()、__aexit__()として任意のデスクリプタをサポートしました。 (Serhiy Storchaka による貢献。gh-144386。)ContextDecoratorとAsyncContextDecorator(したがってデコレーターとして使うcontextmanager()とasynccontextmanager()も) が、ジェネレーター関数、コルーチン関数、非同期ジェネレーター関数を検出し、反復処理や await の間もコンテキストマネージャーを開いたままにするようになりました。 従来は、ジェネレーターオブジェクトやコルーチンオブジェクトが作成されるとすぐにコンテキストマネージャーを終了していました。 (Alex Grönholm & Gregory P. Smith による貢献。gh-125862。)
ctypes¶
NumPy との互換性のため、
c_float_complex、c_double_complex、c_longdouble_complexの_type_を、それぞれF、D、GからZf、Zd、Zgに変更しました。 (Victor Stinner による貢献。gh-148675。)
dataclasses¶
生成される
__init__メソッドのアノテーションに、内部の型名が含まれなくなりました。 (David Ellis による貢献。gh-137530。)
dbm¶
削除済みのエントリーが以前占有していた未使用の空き領域を回収する、新しい
reorganize()メソッドをdbm.dumbとdbm.sqlite3に追加しました。 (Andrea Oliveri による貢献。gh-134004。)
difflib¶
difflib.unified_diff()にオプションの color パラメーターを導入し、git diff のような色付き出力を可能にしました。 環境変数 で制御できます。 (Douglas Thor による貢献。gh-133725。)difflib.HtmlDiffクラスが生成する HTML 差分ページのスタイルを改善し、出力を HTML5 標準に移行しました。 (Jiahao Li による貢献。gh-134580。)
email¶
アドレスヘッダーに非 ASCII のメールアドレス (メールボックス) があるために
EmailMessageを正確に直列化できない場合、メールのジェネレーターがエラーを送出するようになりました。 メールアドレスの国際化 (EAI) をサポートするための選択肢はEmailPolicy.utf8で説明しています。 (R David Murray と Mike Edmunds による貢献。gh-122540。)
faulthandler¶
faulthandler.enable()、faulthandler.dump_traceback()、faulthandler.dump_traceback_later()、faulthandler.register()に max_threads パラメーターを追加しました。 (Eric Froemling による貢献。gh-149085。)
functools¶
singledispatchmethod()が descriptor ではない呼び出し可能オブジェクトをサポートしました。 (Serhiy Storchaka による貢献。gh-140873。)singledispatchmethod()が通常のメソッドをラップしていて、クラスの属性として呼び出された場合、2 番目の引数に基づいてディスパッチするようになりました。 (Bartosz Sławecki による貢献。gh-143535。)
gc¶
hashlib¶
常に 利用可能 であることが保証されているハッシュ関数について、バックエンドの実装がなく実行時には動作しない場合でも、
hashlibの属性として存在するようにしました。 例えば、OpenSSL が利用できず Python が MD5 サポートなしでビルドされている場合でも、hashlib.md5がAttributeErrorを送出しなくなります。 (Bénédikt Tran による貢献。gh-136929。)
http.client¶
HTTPConnectionとHTTPSConnectionのコンストラクターに、新しいキーワード専用パラメーター max_response_headers を追加しました。 このパラメーターは、許容するレスポンスヘッダーの数のデフォルトの上限を上書きします。 (Alexander Enrique Urieles Nieto による貢献。gh-131724。)
http.server¶
コマンドラインインターフェース でも使われる
BaseHTTPRequestHandlerのログ出力が、デフォルトで色付きになりました。 環境変数 で制御できます。 (Hugo van Kemenade による貢献。gh-146292。)default_content_typeとコマンドラインオプション--content-typeを追加し、不明な拡張子を持つファイルのデフォルトのContent-Typeヘッダーをカスタマイズできるようになりました。 (John Comeau と Hugo van Kemenade による貢献。gh-113471。)SimpleHTTPRequestHandlerに新しいキーワード引数extra_response_headersを追加し、HTTP レスポンスに独自のヘッダーを設定できるようになりました。 (Anton I. Sipos による貢献。gh-135057。)python -m http.server コマンドラインインターフェースに
-H/--headerオプションを追加し、HTTP レスポンスに独自のヘッダーを設定できるようになりました。 (Anton I. Sipos による貢献。gh-135057。)
importlib.metadata¶
従来は、メタデータファイルを含まない配布物のメタデータディレクトリにアクセスすると、
metadata()とDistribution.metadataは、ファイルが存在していて中身が空であるかのように空のPackageMetadataオブジェクトを返していました。 今後はMetadataNotFound例外を送出します。 背景と理由は importlib_metadata#493 を、互換性に関する懸念への説明は gh-143387 を参照してください。 (Jason R. Coombs による貢献。)
inspect¶
json¶
load()関数とloads()関数に array_hook パラメーターを追加しました。 JSON の配列リテラルに対するコールバックを指定し、デコード結果のオブジェクトに含まれる Python のリストをカスタマイズできます。 object_pairs_hook パラメーターにfrozendictを、array_hook にtupleを組み合わせて渡すと、JSON データを表す、深く入れ子になったイミュータブルな Python の構造が得られます。 (Joao S. O. Bueno による貢献。gh-146440。)
locale¶
setlocale()が@修飾子付きの言語コードをサポートしました。getlocale()は@修飾子を黙って削除せず、言語コードに含めるようになりました。 (Serhiy Storchaka による貢献。gh-137729。)locale.getdefaultlocale()関数の非推奨を撤回しました。 (Victor Stinner による貢献。gh-130796。)
math¶
math.isnormal()関数とmath.issubnormal()関数を追加しました。 (Sergey B Kirpichev による貢献。gh-132908。)math.fmax()、math.fmin()、math.signbit()関数を追加しました。 (Bénédikt Tran による貢献。gh-135853。)
mimetypes¶
MIME 型を追加しました。 (Benedikt Johannes, Charlie Lin, Foolbar, Gil Forcada と John Franey による貢献。gh-144217, gh-145720, gh-140937, gh-139959, gh-145698, gh-145718, gh-145918, と gh-144213。)
application/x-texinfoをapplication/texinfoに改名しました。 (Charlie Lin による貢献。gh-140165。).aiファイルの MIME 型をapplication/pdfに変更しました。 (Stan Ulbrych による貢献。gh-141239。)
mmap¶
Windows の
mmap.mmapに trackfd パラメーターを追加しました。Falseの場合、fileno に対応するファイルハンドルを複製しません。 (Serhiy Storchaka による貢献。gh-78502。)Linux カーネルが PR_SET_VMA_ANON_NAME をサポートしている場合 (Linux 5.17 以降) に、匿名メモリマッピングに注釈を付ける
mmap.mmap.set_name()メソッドを追加しました。 (Donghee Na による貢献。gh-142419。)
os¶
Linux カーネル 4.11 以降かつ glibc 2.28 以降で
os.statx()を追加しました。 (Jeffrey Bosboom と Victor Stinner による貢献。gh-83714。)os.makedirs()関数に、中間ディレクトリのモードを指定できる parent_mode パラメーターを追加しました。parent_mode=modeを渡すと、Python 3.6 以前の動作に合わせられます。 (Zackery Spytz と Gregory P. Smith による貢献。gh-86533。)
os.path¶
realpath()に、最後の要素だけは存在しなくてもよいモードのサポートを追加しました。 (Serhiy Storchaka による貢献。gh-71189。)os.path.realpath()の strict パラメーターが、新しい値os.path.ALLOW_MISSINGを受け付けます。 この値を使うと、FileNotFoundError以外のエラーは再送出されます。 結果のパスは存在しない可能性がありますが、シンボリックリンクを含みません。 (Petr Viktorin による CVE 2025-4517 への対応。)
pathlib¶
pathlib.Path.mkdir()に、parents=Trueの場合に中間ディレクトリのモードを指定できる parent_mode パラメーターを追加しました。 (Gregory P. Smith による貢献。gh-86533。)
pdb¶
pickle¶
非公開メソッドと入れ子のクラスの pickle 化をサポートしました。 (Zackery Spytz と Serhiy Storchaka による貢献。gh-77188。)
pickletools¶
pickletoolsのコマンドラインインターフェースの出力が、デフォルトで色付きになりました。 環境変数 で制御できます。 (Hugo van Kemenade による貢献。gh-149026。)
pprint¶
pprint.pprint()、pprint.pformat()、pprint.pp()にキーワード引数 expand を追加しました。 真の場合、indent を指定したjson.dumps()の整形出力に似た形式で出力します。 (Stefan Todoran, Semyon Moroz と Hugo van Kemenade による貢献。gh-112632。)pprintに t-string のサポートを追加しました。 (Loïc Simon と Hugo van Kemenade による貢献。gh-134551。)
re¶
既存の
re.match()とre.Pattern.match()API の代わりとなる、より明示的な名前として、re.prefixmatch()と対応するre.Pattern.prefixmatch()を追加しました。 既存の API は soft deprecated となりました。 新しい名前は、Zen of Python の 「暗黙的であるより明示的であるほうがよい」 という指針に従い、match の意味についての混乱を減らすためのものです。 他の言語の正規表現ライブラリの多くは、Python が従来 search と呼んできた処理に、match という名前の API を使っています。 (Gregory P. Smith による貢献。gh-86519。)
resource¶
新しい定数
RLIMIT_NTHR、RLIMIT_UMTXP、RLIMIT_THREADS、RLIM_SAVED_CUR、RLIM_SAVED_MAXを追加しました。 (Serhiy Storchaka による貢献。gh-137512。)
shelve¶
socket¶
ISO-TP CAN プロトコルの定数を追加しました。 (Patrick Menschel と Stefan Tatschner による貢献。gh-86819。)
sqlite3¶
コマンドラインインターフェース にいくつかの新機能が追加されました。
Tab による SQL キーワードの補完。 (Long Tan による貢献。gh-133393。)
ssl¶
ssl.HAS_PSK_TLS13により、sslモジュールが RFC 9258 に記載された TLSv1.3 の「外部 PSK」をサポートするかどうかを示すようになりました。 (Will Childs-Klein による貢献。gh-133624。)SSL の鍵共有で使うグループを管理する新しいメソッドを追加しました。
ssl.SSLContext.set_groups()sets the groups allowed for doing key agreement, extending the previousssl.SSLContext.set_ecdh_curve()method. This new API provides the ability to list multiple groups and supports fixed-field and post-quantum groups in addition to ECDH curves. This method can also be used to control what key shares are sent in the TLS handshake.ssl.SSLSocket.group()は、TLS ハンドシェイクの完了後、現在の接続で鍵共有に使うために選択されたグループを返します。 この呼び出しには OpenSSL 3.2 以降が必要です。ssl.SSLContext.get_groups()は、コンテキストに現在設定されている TLS の最小バージョンと最大バージョンに適合する、利用可能なすべての鍵共有グループのリストを返します。 この呼び出しには OpenSSL 3.5 以降が必要です。
(Ron Frederick が gh-136306 で貢献しました。)
TLS 1.3 の暗号を設定する新しいメソッド
ssl.SSLContext.set_ciphersuites()を追加しました。 TLS 1.2 以前には引き続きssl.SSLContext.set_ciphers()を使ってください。 両方を同じコンテキストで呼び出せます。 選択される暗号スイートは、接続時にネゴシエーションされた TLS バージョンに応じて決まります。 (Ron Frederick による貢献。gh-137197。)署名アルゴリズムを管理する新しいメソッドを追加しました。
ssl.get_sigalgs()は、利用可能なすべての TLS 署名アルゴリズムのリストを返します。 この呼び出しには OpenSSL 3.4 以降が必要です。ssl.SSLContext.set_client_sigalgs()は、証明書に基づくクライアント認証で許可する署名アルゴリズムを設定します。ssl.SSLContext.set_server_sigalgs()は、サーバーが TLS ハンドシェイクを完了するために使用を許可する署名アルゴリズムを設定します。ssl.SSLSocket.client_sigalg()は、現在の接続のクライアント認証で使うために選択された署名アルゴリズムを返します。 この呼び出しには OpenSSL 3.5 以降が必要です。ssl.SSLSocket.server_sigalg()は、現在の接続でサーバーが TLS ハンドシェイクを完了するために選択された署名アルゴリズムを返します。 この呼び出しには OpenSSL 3.5 以降が必要です。
(Ron Frederick が gh-138252 で貢献しました。)
subprocess¶
subprocess.Popen.wait():timeoutがNoneではなく、プラットフォームがサポートする場合、効率的なイベント駆動の仕組みでプロセスの終了を待つようになりました。Linux 5.3 以降では
os.pidfd_open()とselect.poll()を使います。macOS とその他の BSD 系では
select.kqueue()、KQ_FILTER_PROC、KQ_NOTE_EXITを使います。Windows は引き続き
WaitForSingleObjectを使います (変更なし)。
これらの仕組みがどれも使えない場合、この関数は従来のビジーループ (非ブロッキング呼び出しと短いスリープ) にフォールバックします。 (Giampaolo Rodola による貢献。gh-83069。)
symtable¶
symtable.Function.get_cells()メソッドとsymtable.Symbol.is_cell()メソッドを追加しました。 (Yashp002 による貢献。gh-143504。)
sys¶
ABI 情報にアクセスしやすくするため、
sys.abi_info名前空間を追加しました。 (Klaus Zimmermann による貢献。gh-137476。)
sys.monitoring¶
その他のイベント (
PY_THROW、PY_UNWIND、RAISE、EXCEPTION_HANDLED、RERAISE) を、コードオブジェクトごとに有効化、無効化できるようになりました。 これらのイベントのコールバックからDISABLEを返すと、以前のバージョンのようにValueErrorを送出せず、そのコードオブジェクト全体で (現在のツールについて) イベントを無効化します。 (Gabriele N. Tornetta による貢献。gh-146182。)
tarfile¶
data_filter()がパストラバーサル攻撃を防ぐために、シンボリックリンクのリンク先を正規化するようになりました。 (Petr Viktorin による貢献。gh-127987 と CVE 2025-4138。)extractall()が、ディレクトリが削除された場合や別の種類のファイルに置き換わった場合に、そのディレクトリの属性の修正をスキップするようになりました。 (Petr Viktorin による貢献。gh-127987 と CVE 2024-12718。)extract()andextractall()now (re-)apply the extraction filter when substituting a link (hard or symbolic) with a copy of another archive member, and when fixing up directory attributes. The former raises a new exception,LinkFallbackError. (Contributed by Petr Viktorin for CVE 2025-4330 and CVE 2024-12718.)errorlevel()がゼロの場合でも、extract()とextractall()は拒否されたメンバーを展開しなくなりました。 (Matt Prodani と Petr Viktorin による貢献。gh-112887 と CVE 2025-4435。)extract()とextractall()が、Windows 上で壊れたリンクを作成しないよう、シンボリックリンクのリンク先のスラッシュをバックスラッシュに置き換えるようになりました。 (Christoph Walcher による貢献。gh-57911。)gettarinfo()が tar 形式の標準に従うため、Windows 上でシンボリックリンクのリンク先のバックスラッシュをスラッシュに置き換えるようになりました。 (Daniele Nicolodi による貢献。gh-151669。)
threading¶
ジェネレーターやイテレーターへの並行アクセスをサポートするため、
serialize_iterator、synchronized_iterator()、concurrent_tee()を追加しました。 (Raymond Hettinger による貢献。gh-124397。)
timeit¶
timeitのコマンドラインインターフェースの出力が、デフォルトで色付きになりました。 環境変数 で制御できます。 (Hugo van Kemenade による貢献。gh-146609。)コマンドラインインターフェースがデフォルトでエラーのトレースバックに色を付けるようになりました。 環境変数 で制御できます。 (Yi Hong による貢献。gh-139374。)
timeit.Timer.autorange()の目標時間を設定可能にし、コマンドラインインターフェースに--target-timeオプションを追加しました。 (Alessandro Cucci と Miikka Koskinen による貢献。gh-80642。)
tkinter¶
tkinter.Text.search()メソッドが、二つの追加引数をサポートしました。 nolinestop は検索を行の境界を越えて継続できるようにし、strictlimits は検索を指定した範囲内に制限します。 (Rihaan Meher による貢献。gh-130848。)新しいメソッド
tkinter.Text.search_all()を導入しました。 Tcl の-allオプションと-overlapオプションを使い、パターンに一致する箇所をすべて検索できます。 (Rihaan Meher による貢献。gh-130848。)古い名前の Tk コマンドを使う
*_slaves()メソッドの代わりに、新しい名前の Tk コマンド (Tk 8.6 で導入) を使う新しいメソッドpack_content()、place_content()、grid_content()を追加しました。 (Serhiy Storchaka による貢献。gh-143754。)Eventの属性として、Tk の仮想イベント用にuser_dataを、Enter、Leave、FocusIn、FocusOut、ConfigureRequestイベント用にdetailを追加しました。 (Matthias Kievernagel と Serhiy Storchaka による貢献。gh-47655。)
tokenize¶
tokenizeの コマンドラインインターフェース の出力が、デフォルトで色付きになりました。 環境変数 で制御できます。 (Hugo van Kemenade による貢献。gh-148991。)
tomllib¶
tomllibモジュールが TOML 1.1.0 をサポートしました。 後方互換性のある更新なので、有効な TOML 1.0.0 文書はすべて従来と同じように解析されます。official TOML changelog に記載された変更は次のとおりです。
インラインテーブル内で改行と末尾のカンマを許可。
従来はインラインテーブルを 1 行に書く必要があり、末尾にカンマを置けませんでした。 この制約が緩和され、次の記述が有効になりました。
tbl = { key = "a string", moar-tbl = { key = 1, }, }
基本文字列で、255 未満のコードポイントを表す
\xHH表記と、エスケープ文字を表す\eエスケープを追加。null = "null byte: \x00; letter a: \x61" csi = "\e["
日時値と時刻値で秒を省略できるようになりました。 次の記述が有効になりました。
dt = 2010-02-03 14:15 t = 14:15
(Taneli Hukkinen が gh-142956 で貢献しました。)
types¶
書き込みが直接反映される
locals()のプロキシ型を、types.FrameLocalsProxyTypeとして公開しました。 PEP 667 で説明されているframe.f_locals属性の型を表します。 (Peter Bierma による貢献。gh-136492。)
typing¶
PEP 747: 値自体が型式である場合にアノテーションを付ける、新しい特殊形式
TypeFormを追加しました。TypeForm[T]は「T(またはTに代入可能な型) を記述する型形式オブジェクト」を意味します。 実行時のTypeForm(x)は単にxを返すので、動作を変えずに型形式の値に明示的なアノテーションを付けられます。これにより、ユーザーが指定する型式 (例えば
int、str | None、TypedDictクラス、list[int]) を受け付けるライブラリが、正確なシグネチャを公開しやすくなります。from typing import Any, TypeForm def cast[T](typ: TypeForm[T], value: Any) -> T: ...
(Jelle Zijlstra が gh-145033 で貢献しました。)
PEP 728:
TypedDictにクラス引数 closed と extra_items のサポートを追加しました。 閉じたTypedDictは、クラス本体で指定されたキー以外の追加のキーを許可しません。 一方、extra_itemsを指定したTypedDictは、値が指定した型である任意の追加項目を許可します。 (Angela Liss による貢献。gh-137840。)class ExtraTypeVars(P1[S], Protocol[T, T2]): ...のようなコードは、SがProtocolの型引数に含まれていないため、TypeErrorを送出するようになりました。 (Nikita Sobolev による貢献。gh-137191。)class B2(A[T2], Protocol[T1, T2]): ...のようなコードが、型引数の順序を正しく扱うようになりました。 順序は(T1, T2)です。 従来は実行時に誤って(T2, T1)と推論されていました。 (Nikita Sobolev による貢献。gh-137191。)PEP 800: クラスを disjoint base として指定する新しいデコレーター
@typing.disjoint_baseを追加しました。 これは主に、組み込み型やコンパイルされた拡張で定義される型の実行時の意味を、型チェッカーが忠実に反映できるようにするための高度な機能です。 クラスCが disjoint base の場合、その子クラスは、Cの親クラスでも子クラスでもない他の disjoint base を継承できません。 (Jelle Zijlstra による貢献。gh-148639。)TypeVarTupleがTypeVarとParamSpecのインターフェースに合わせ、キーワード引数bound、covariant、contravariant、infer_varianceを受け付けるようになりました。boundの意味は仕様上、引き続き未定義です。
unicodedata¶
Unicode データベースを Unicode 17.0.0 に更新しました。 (Benjamin Peterson による貢献。gh-138706。)
文字が Unicode Standard Annex #31 の識別子の先頭や後続の文字として使えるかを調べる、
unicodedata.isxidstart()関数とunicodedata.isxidcontinue()関数を追加しました。 (Stan Ulbrych による貢献。gh-129117。)Unicode Standard Annex #29, "Unicode Text Segmentation" で定義された規則に従って書記素クラスタを反復処理する
iter_graphemes()関数を追加しました。 このアルゴリズムに関係する文字の特性を取得する、grapheme_cluster_break()、indic_conjunct_break()、extended_pictographic()関数も追加しました。 (Serhiy Storchaka と Guillaume Sanchez による貢献。gh-74902。)文字に割り当てられた Unicode ブロック を返す
block()関数を追加しました。 (Stan Ulbrych による貢献。gh-66802。)
unittest¶
unittest.TestCase.assertLogs()が、メッセージの書式化を制御するフォーマッターを受け付けるようになりました。 (Garry Cairns による貢献。gh-134567。)unittest.TestCase.assertWarns()とunittest.TestCase.assertWarnsRegex()が、指定されたカテゴリや正規表現に一致しない警告を握りつぶさなくなりました。 入れ子のコンテキストマネージャーもサポートしました。 (Serhiy Storchaka による貢献。gh-143231。)
urllib.parse¶
urlsplit()、urlparse()、urldefrag()関数に missing_as_none パラメーターを追加しました。urlunsplit()とurlunparse()関数に keep_empty パラメーターを追加しました。 これにより、空の URI 構成要素と未定義の構成要素を区別し、空の構成要素を保持できます。 (Serhiy Storchaka による貢献。gh-67041。)
venv¶
POSIX プラットフォームでは、仮想環境の作成時に
lib64 -> libシンボリックリンクを使う代わりに、必要に応じて platlib ディレクトリを作成するようになりました。 これにより、sys.platlibdirがlibと異なるプラットフォームでは、仮想環境の purelib と platlib が同じlibディレクトリを共有しなくなります。 (Rui Xi による貢献。gh-133951。)
warnings¶
module 引数を渡さない場合の
warnings.warn_explicit()のモジュールによるフィルタリングを改善しました。 警告フィルターのモジュール正規表現を、ファイル名から.pyを除いたものだけでなく、ファイル名の各親ディレクトリを起点に構成したモジュール名 (/__init__.py、.py、Windows では.pywも除く) とも照合するようになりました。 (Serhiy Storchaka による貢献。gh-135801。)
wave¶
waveに IEEE 浮動小数点数の WAVE 音声 (WAVE_FORMAT_IEEE_FLOAT) のサポートを追加しました。フレーム形式を明示的に扱うため、
wave.Wave_read.getformat()、wave.Wave_write.getformat()、wave.Wave_write.setformat()を追加しました。wave.Wave_write.setparams()は、formatを含む 7 要素のタプルと、後方互換性のための 6 要素のタプル (形式はデフォルトのWAVE_FORMAT_PCM) の両方を受け付けます。WAVE_FORMAT_IEEE_FLOATの出力に、非 PCM の WAVE 形式で必須のfactチャンクを含めるようになりました。
(Lionel Koenig と Michiel W. Beijen が gh-60729 で貢献しました。)
webbrowser¶
macOS では、新しい
webbrowser.MacOSクラスが、osascript で AppleScript を組み立てて実行する代わりに、/usr/bin/open で URL を開きます。 デフォルトのブラウザーはplistlibを使って LaunchServices の設定ファイルから検出し、新規インストールではcom.apple.Safariにフォールバックします。 HTTP(S) 以外の URL では、open -b <bundle-id> を使って OS のファイルハンドラーではなくブラウザーに URL を渡し、ファイルインジェクション攻撃を防ぎます。 (Jeff Lyon による貢献。gh-137586。)
xml¶
文字列を XML の要素名または属性名として使えるかを調べる
xml.is_valid_name()関数を追加しました。 (Serhiy Storchaka による貢献。gh-139489。)文字列を XML 文書で使えるかを調べる
xml.is_valid_text()関数を追加しました。 (Serhiy Storchaka による貢献。gh-139489。)
xml.parsers.expat¶
xmlparser オブジェクトに
SetAllocTrackerActivationThreshold()とSetAllocTrackerMaximumAmplification()を追加し、Expat パーサー内で不釣り合いに大量の動的メモリが使用されることへの保護を調整できるようにしました。 (Bénédikt Tran による貢献。gh-90949。)xmlparser オブジェクトに
SetBillionLaughsAttackProtectionActivationThreshold()とSetBillionLaughsAttackProtectionMaximumAmplification()を追加し、billion laughs 攻撃への保護を調整できるようにしました。 (Bénédikt Tran による貢献。gh-90949。)
zlib¶
adler32_combine()で二つの Adler-32 チェックサムを結合できるようになりました。 (Callum Attryde と Bénédikt Tran による貢献。gh-134635。)crc32_combine()で二つの CRC-32 チェックサムを結合できるようになりました。 (Bénédikt Tran による貢献。gh-134635。)
最適化¶
フリースレッドビルド のパフォーマンス向上のため、
PyMem_RawMalloc()などによる生メモリの割り当てで、mimallocをデフォルトのアロケーターとして使うようになりました。 (Kumar Aditya による貢献。gh-144914。)
base64 と binascii¶
単純な CPU パイプライン処理の最適化により、CPython の基盤となる base64 実装のエンコードが 2 倍、デコードが 3 倍高速になりました。 (Gregory P. Smith と Serhiy Storchaka による貢献。gh-143262。)
Ascii85、Base85、Z85 エンコーディングの実装を C で書き直しました。 エンコードとデコードが 2 桁 (約 100 倍) 高速になり、メモリ消費量も 2 桁 (約 100 分の 1) 減りました。 (James Seo と Serhiy Storchaka による貢献。gh-101178。)
Base32 の実装を C で書き直しました。 エンコードとデコードが 2 桁 (約 100 倍) 高速になりました。 (James Seo による貢献。gh-146192。)
csv¶
csv.Sniffer.sniff()の区切り文字の検出が最大 1.6 倍高速になりました。 (Maurycy Pawłowski-Wieroński による貢献。gh-137628。)
実験的な JIT コンパイラーの改良¶
pyperformance ベンチマークスイートの結果では、x86-64 Linux において、すべての最適化を有効にしてビルドした標準の CPython インタープリタに比べ、JIT は幾何平均で 7–8% の性能向上を示しています。
AArch64 macOS では、すべての最適化を有効にした 末尾呼び出し型インタープリタ に比べ、JIT は 11–12% 高速です。
JIT なしのビルドと比較した JIT ビルドの速度変化は、x86-64 Linux と AArch64 macOS のシステムで、およそ 15% の低下から 100% を超える向上まで幅があります (unpack_sequence マイクロベンチマークを除く)。
JIT の主な改良点は次のとおりです。
ビルド時の依存先を LLVM 21 に変更
新しいトレーシングフロントエンド
JIT に基本的なレジスター割り当てを導入
JIT の最適化を拡充
GDB と GNU の
backtrace()によるスタックの巻き戻しをサポート機械語コードの生成を改善
ビルド時の依存先を LLVM 21 に変更
JIT コンパイラーが、ビルド時のステンシル生成に LLVM 21 を使うようになりました。 従来どおり、LLVM が必要なのは JIT を有効にして CPython をビルドするときだけです。 Python を実行するエンドユーザーが LLVM をインストールする必要はありません。 すべてのサポート対象プラットフォームについて、LLVM のインストール手順は JIT コンパイラーのドキュメント にあります。 (Savannah Ostrowski による貢献。gh-140973。)
新しいトレーシングフロントエンド
JIT コンパイラーが Python 3.14 よりも大幅に多くのバイトコード操作と制御フローをサポートし、より幅広いコードを高速化できるようになりました。 例えば、3.15 の JIT コンパイラーは単純な Python オブジェクトの作成を理解できるようになりました。 オーバーロードされた演算やジェネレーターも部分的にサポートします。 これは JIT のトレーシングフロントエンドを刷新し、以前の実装のように実行経路を推定する代わりに、コードの実際の実行経路を記録するようにしたことで実現しました。 (Ken Jin による gh-139109 での貢献。Windows のサポートは Mark Shannon が gh-141703 で追加しました。)
JIT に基本的なレジスター割り当てを導入
JIT コンパイラーのオプティマイザーに、基本的なレジスター割り当てを追加しました。 これにより、一部のスタック操作を完全に省き、代わりにレジスター上で操作できます。 メモリの読み書きを避けることで、JIT はより効率的なトレースを生成できます。 (Mark Shannon による貢献。gh-135379。)
JIT の最適化を拡充
より多くの 定数伝播 を行うようになりました。 つまり、JIT コンパイラーが、あるユーザーコードの結果が定数になると検出した場合に、そのコードを単純化できます。 (Ken Jin と Savannah Ostrowski による貢献。gh-132732。)
安全に省略できる場合は 参照カウント の処理を省くようになりました。 これにより、一般に Python のほとんどの操作のコストが減ります。 (Ken Jin, Donghee Na, Zheao Li, Hai Zhu, Savannah Ostrowski, Reiden Ong, Noam Cohen, Tomas Roun, PuQing, Cajetan Rodrigues, と Sacul による貢献。gh-134584。)
オブジェクトへの参照が唯一であることを追跡することで、JIT オプティマイザーが参照カウントの更新を除去し、整数や浮動小数点数に対してインプレース操作を行えるようになりました。 (Reiden Ong, と Pieter Eendebak による貢献。gh-143414 と gh-146306。)
JIT オプティマイザーが、3.14 よりも大幅に多くの操作をサポートするようになりました。 (Kumar Aditya, Ken Jin, Jiahao Li, と Sacul による貢献。gh-131798。)
GDB と GNU の backtrace() によるスタックの巻き戻しをサポート
サポート対象の Linux ELF プラットフォームで、JIT コンパイラーが生成した機械語コードの巻き戻し情報を GDB インターフェースに公開するようになりました。
libgcc のフレーム登録が利用可能な場合、同じ巻き戻し情報を GNU の backtrace() でスタックをたどるためにも登録します。
これにより、これらの仕組みを使うネイティブデバッガー、クラッシュハンドラー、診断ツールが、生成されたコードで止まらずに JIT フレームを通過してスタックを巻き戻せます。
(Diego Russo と Pablo Galindo Salgado による貢献。gh-146071 と gh-149104。)
機械語コードの生成を改善
JIT コンパイラーの機械語コード生成器が、macOS と Linux の x86-64 および AArch64 向けに、より良い機械語コードを生成するようになりました。 一般に、3.14 に比べて生成された機械語コードのメモリ使用量が減り、コードの効率も向上することが期待されます。 (Brandt Bucher による gh-136528 と gh-135905 での貢献。AArch64 向けの実装は Mark Shannon による gh-139855 での貢献。AArch64 向けの追加の最適化は Mark Shannon と Diego Russo による gh-140683 と gh-142305 での貢献。)
保守性
JIT のデータ構造のリファクタリングにより、JIT オプティマイザーの操作を単純化しました。 (Zhongtian Zheng による gh-148211、Hai Zhu による gh-143421 での貢献。)
削除¶
ast¶
AST ノード のコンストラクターが、必須の引数を省略した場合や、AST ノードのフィールドに対応しないキーワード引数を渡した場合に
TypeErrorを送出するようになりました。 これらの場合は Python 3.13 以降、DeprecationWarningを発していました。 (Brian Schubert と Jelle Zijlstra による貢献。gh-137600 と gh-105858。)
collections.abc¶
collections.abc.ByteStringをcollections.abc.__all__から削除しました。collections.abc.ByteStringは Python 3.12 以降非推奨で、Python 3.17 で削除される予定です。 (Alex Waygood による貢献。gh-118803。)
ctypes¶
Python 3.13 以降非推奨だった、ドキュメントに記載されていない関数
ctypes.SetPointerType()を削除しました。 (Bénédikt Tran による貢献。gh-133866。)
datetime¶
strptime()が、書式文字列に年の指定なしで%d(月内の日) が含まれている場合にValueErrorを送出するようになりました。 これは Python 3.13 以降非推奨でした。 (Stan Ulbrych と Gregory P. Smith による貢献。gh-70647。)
glob¶
Python 3.13 以降非推奨だった、ドキュメントに記載されていない関数
glob.glob0()とglob.glob1()を削除しました。 代わりにglob.glob()を使い、root_dir 引数にディレクトリを渡してください。 (Barney Gale による貢献。gh-137466。)
http.server¶
CGIHTTPRequestHandlerクラスと、python -m http.server コマンドラインインターフェースの--cgiフラグを削除しました。 これらは Python 3.13 で非推奨になりました。 (Bénédikt Tran による貢献。gh-133810。)
importlib¶
Loaderとそのサブクラスのload_module()メソッドを削除しました。 独自のサブクラスにこのメソッドが定義されていても、インポートシステムは呼び出さなくなります。 このメソッドは Python 3.4 以降、exec_module()に置き換えられ、非推奨でした。 (Brett Cannon による貢献。gh-97850。)
importlib.resources¶
importlib.resources.files()関数の非推奨のpackageパラメーターを削除しました。 (Semyon Moroz による貢献。gh-138044。)
pathlib¶
非推奨の
pathlib.PurePath.is_reserved()を削除しました。 Windows の予約済みパスを検出するにはos.path.isreserved()を使ってください。 (Nikita Sobolev による貢献。gh-133875。)
platform¶
Python 3.13 以降非推奨だった
platform.java_ver()関数を削除しました。 (Alexey Makridenko による貢献。gh-133604。)
sre_*¶
sre_compile、sre_constants、sre_parseモジュールを削除しました。 (Stan Ulbrych による貢献。gh-135994。)
sysconfig¶
sysconfig.is_python_build()の check_home パラメーターを削除しました。 (Filipe Laíns による貢献。gh-92897。)
threading¶
types¶
PEP 626 により Python 3.12 以降非推奨だった
codeobject.co_lnotabを、types.CodeTypeから削除しました。 (Nikita Sobolev による貢献。gh-134690。)
typing¶
typing.ByteStringをtyping.__all__から削除しました。typing.ByteStringは Python 3.9 以降非推奨で、Python 3.17 で削除される予定です。 (Alex Waygood による貢献。gh-118803。)NamedTupleクラスを作るための、ドキュメントに記載されていないキーワード引数の構文 (例えばPoint = NamedTuple("Point", x=int, y=int)) は、サポートされなくなりました。 代わりにクラス構文または関数形式の構文を使ってください。 (Bénédikt Tran による貢献。gh-133817。)TD = TypedDict("TD")またはTD = TypedDict("TD", None)でフィールドがゼロのTypedDict型を作ることは、サポートされなくなりました。 代わりにclass TD(TypedDict): passまたはTD = TypedDict("TD", {})を使ってください。 (Bénédikt Tran による貢献。gh-133823。)非推奨の
@typing.no_type_check_decoratorを削除しました。 (Nikita Sobolev による貢献。gh-133601。)
wave¶
Python 3.13 以降非推奨だった
Wave_readクラスとWave_writeクラスのgetmark()、setmark()、getmarkers()メソッドを削除しました。 (Bénédikt Tran による貢献。gh-133873。)
zipimport¶
非推奨の
zipimport.zipimporter.load_module()を削除しました。 代わりにzipimport.zipimporter.exec_module()を使ってください。 (Jiahao Li による貢献。gh-133656。)
非推奨¶
新たな非推奨事項¶
ast:-
b64decode()とurlsafe_b64decode()で、代替の文字集合を指定したときに+と/を受け付けることは非推奨になりました。 今後の Python では、厳密モードではエラーとなり、厳密モードでなければ破棄されます。 (Serhiy Storchaka による貢献。gh-125346。)
CLI:
コマンドラインオプション
-bと-bbを非推奨とし、Python 3.17 で何もしなくなる予定です。 これらは主に Python 2 から 3 への移行を支援するためのものでした。 Python 3.17 以降、これらの場合にBytesWarningは送出されなくなります。 代わりに型チェッカーを使ってください。(Nikita Sobolev が gh-136355 で貢献しました。)
-
次の文が実行時に
DeprecationWarningを発するようになりました。from collections.abc import ByteStringimport collections.abc; collections.abc.ByteString.
collections.abc.ByteStringをサブクラス化した場合や、isinstance()またはissubclass()の第 2 引数に使った場合は、すでにDeprecationWarningを発していました。 従来は単にインポートした場合や、collections.abcモジュールの属性としてアクセスした場合には、警告を発していませんでした。 (Alex Waygood による貢献。gh-118803。)
-
Morsel.js_outputとBaseCookie.js_outputは非推奨となり、Python 3.19 で削除されます。 代わりにMorsel.outputまたはBaseCookie.outputを使ってください。 (kishorhange111 による貢献。gh-148849。)
-
IMAP4.fileの変更は非推奨となり、Python 3.19 で削除される予定です。 このプロパティは使われなくなり、値を変更しても現在のファイルを明示的に閉じることは ありません。 (Bénédikt Tran による貢献。gh-142307。)
-
profileモジュールは非推奨となり、Python 3.17 で削除されます。 代わりに、互換性のある API を提供するprofiling.tracingを使ってください。 詳しくは PEP 799 を参照してください。 (Pablo Galindo と László Kiss Kollár が gh-138122 で貢献しました。)
re:re.match()とre.Pattern.match()は ソフト非推奨 となり、代わりに新しい APIre.prefixmatch()とre.Pattern.prefixmatch()を使うことが推奨されます。 これらは、より明確な別名として追加されました。 Zen of Python の 「暗黙的であるより明示的であるほうがよい」 という指針に従い、match の意味に関する混乱を減らすことを意図しています。 他の言語の正規表現ライブラリの多くでは、Python が一貫して search と呼んできた操作を match という名前の API で提供しています。従来の名前
match()は30年以上コードで使われているため、削除する予定は ありません。 古いバージョンの Python に対応するコードでは、引き続きmatch()を使ってください。 新しいコードではprefixmatch()を使うことを推奨します。 prefixmatch() と match() の違い を参照してください。(Gregory P. Smith が gh-86519 で、Hugo van Kemenade が gh-148100 で貢献しました。)
-
必須の引数を指定せずに
Struct.__new__()を呼び出すことは非推奨となり、Python 3.20 で削除されます。 初期化済みのStructオブジェクトで__init__()メソッドを呼び出すことも非推奨となり、Python 3.20 で削除されます。(Sergey B Kirpichev と Serhiy Storchaka が gh-143715 で貢献しました。)
型コード
'F'と'D'は、2 文字の形式'Zf'と'Zd'に置き換えられ、soft deprecated となりました。 (Sergey B Kirpichev による貢献。gh-121249。)
-
次の文が実行時に
DeprecationWarningを発するようになりました。from typing import ByteStringimport typing; typing.ByteString.
typing.ByteStringをサブクラス化した場合や、isinstance()またはissubclass()の第 2 引数に使った場合は、すでにDeprecationWarningを発していました。 従来は単にインポートした場合や、typingモジュールの属性としてアクセスした場合には、警告を発していませんでした。 (Alex Waygood による貢献。gh-118803。)実行時チェック可能なプロトコルクラスを継承していても、
runtime_checkable()で明示的にデコレートされていないプロトコルクラスに対し、isinstance()やissubclass()でチェックすることは非推奨です。 Python 3.20 ではTypeErrorが発生します。(Bartosz Sławecki が gh-132604 で貢献しました。)
-
webbrowser.MacOSXOSAScriptはwebbrowser.MacOSに置き換えられ、非推奨となりました。 Python 3.17 で削除される予定です。 (Jeff Lyon による貢献。gh-137586。)
__version__:以下の標準ライブラリモジュールの
__version__、version、VERSION属性は非推奨となり、Python 3.20 で削除されます。 代わりにsys.version_infoを使ってください。ctypes.macholibdecimal(代わりにdecimal.SPEC_VERSIONを使ってください)logging(__date__も非推奨)xml.sax.expatreader
(Hugo van Kemenade と Stan Ulbrych が gh-76007 で貢献しました。)
Python 3.16 で削除予定¶
インポートシステム:
モジュールの
__spec__.loaderを設定せずに__loader__を設定することは非推奨です。 Python 3.16 では、インポートシステムや標準ライブラリは__loader__を設定しなくなり、その値も参照しなくなります。
-
書式コード
'u'(wchar_t) は、Python 3.3 からドキュメントで非推奨とされ、Python 3.13 からは実行時にも非推奨とされています。 Unicode 文字には、代わりに書式コード'w'(Py_UCS4) を使ってください。
-
asyncio.iscoroutinefunction()は非推奨となり、Python 3.16 で削除されます。 代わりにinspect.iscoroutinefunction()を使ってください。 (Jiahao Li と Kumar Aditya が gh-122875 で貢献しました。)asyncioのポリシーシステムは非推奨となり、Python 3.16 で削除されます。 具体的には、以下のクラスと関数が非推奨です:使いたいイベントループの実装を指定するには、
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 で貢献しました。)
-
真偽値に対するビット単位の反転
~Trueや~Falseは、直感に反する意外な結果 (-2と-1) になるため、Python 3.12 から非推奨です。 真偽値の論理否定には、代わりにnot xを使ってください。 元の整数値のビット単位の反転が必要になるまれな場合には、明示的にintに変換してください (~int(x))。
-
functools.reduce()の Python 実装を、functionやsequenceをキーワード引数として指定して呼び出すことは、Python 3.14 から非推奨です。
-
strm引数を持つカスタムログハンドラーへの対応は非推奨となり、Python 3.16 で削除予定です。 代わりにstream引数を持つハンドラーを定義してください。 (Mariusz Felisiak が gh-115032 で貢献しました。)
-
mimetypes.MimeTypes.add_type()で有効な拡張子は、'.' で始まるものか空のものです。 ドットのない拡張子は非推奨となり、Python 3.16 ではValueErrorが発生します。 (Hugo van Kemenade が gh-75223 で貢献しました。)
-
ExecError例外は Python 3.14 から非推奨です。 Python 3.4 以降はshutilのどの関数でも使われておらず、現在はRuntimeErrorの別名になっています。
-
Class.get_methodsメソッドは Python 3.14 から非推奨です。
sys:_enablelegacywindowsfsencoding()関数は Python 3.13 から非推奨です。 代わりに環境変数PYTHONLEGACYWINDOWSFSENCODINGを使ってください。
-
sysconfig.expand_makefile_vars()関数は Python 3.14 から非推奨です。 代わりにsysconfig.get_paths()のvars引数を使ってください。
-
ドキュメント化されておらず、使われてもいない
TarFile.tarfile属性は Python 3.13 から非推奨です。
Python 3.17 で削除予定¶
-
年を含まず
%e(月内の日) を含む書式文字列でstrptime()を呼び出すこと。 これは Python 3.15 から非推奨です。 (Stan Ulbrych が gh-70647 で貢献しました。)
-
collections.abc.ByteStringは Python 3.17 で削除予定です。実行時に
objが バッファプロトコル を実装しているか調べるには、isinstance(obj, collections.abc.Buffer)を使ってください。 型アノテーションにはBufferを使うか、コードが対応する型を明示したユニオン (例えばbytes | bytearray | memoryview) を使ってください。ByteStringは当初、bytesとbytearrayの両方の上位型となる抽象クラスとして意図されていました。 しかし、この ABC はメソッドを一つも持たないため、あるオブジェクトがByteStringのインスタンスだと分かっても、そのオブジェクトに関する有用な情報は何も得られませんでした。memoryviewなど、他の一般的なバッファ型も、実行時にも静的型チェッカーによってもByteStringのサブタイプとして認識されることはありませんでした。
-
encodings.normalize_encoding()に非 ASCII のencoding名を渡すことは非推奨となり、Python 3.17 で削除予定です。 (Stan Ulbrych が gh-136702 で貢献しました。)
-
profileモジュールは非推奨となり、Python 3.17 で削除されます。 代わりに、互換性のある API を提供するprofiling.tracingを使ってください。 詳しくは PEP 799 を参照してください。 (Pablo Galindo と László Kiss Kollár が gh-138122 で貢献しました。)
-
webbrowser.MacOSXOSAScriptは非推奨となりました。 代わりにwebbrowser.MacOSを使ってください。 (gh-137586)
-
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のサブタイプとして認識されることはありませんでした。
-
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 で削除予定¶
Python 3.19 で削除予定¶
-
http.cookies.Morsel.js_output()は非推奨となり、Python 3.19 で削除されます。http.cookies.BaseCookie.js_output()は非推奨となり、Python 3.19 で削除されます。
-
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を使ってください。ctypes.macholibdecimal(代わりにdecimal.SPEC_VERSIONを使ってください)logging(__date__も非推奨)xml.sax.expatreader
(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 ではエラーになります。
-
実行時チェック可能なプロトコルクラスを継承していても、
runtime_checkable()で明示的にデコレートされていないプロトコルクラスに対し、isinstance()やissubclass()でチェックすることは非推奨です。 Python 3.20 ではTypeErrorが発生します。(Bartosz Sławecki が gh-132604 で貢献しました。)
将来のバージョンで削除予定¶
以下の API は将来削除されますが、現時点では削除時期は決まっていません。
-
引数グループの入れ子と、相互排他的なグループの入れ子は非推奨です。
add_argument_group()に、ドキュメント化されていないキーワード引数prefix_charsを渡すことは非推奨になりました。argparse.FileType型コンバーターは非推奨です。
-
ジェネレーター:
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 ofint.__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()メソッドを使ってください。-
utcnow():datetime.datetime.now(tz=datetime.UTC)を使ってください。utcfromtimestamp():datetime.datetime.fromtimestamp(timestamp, tz=datetime.UTC)を使ってください。
gettext:複数形を選択するための値は整数でなければなりません。-
cache_from_source()のdebug_overrideパラメータは非推奨です。 代わりにoptimizationパラメータを使ってください。
-
EntryPointsのタプルインターフェース。戻り値として暗黙的に
Noneを返すこと。
logging:warn()メソッドは Python 3.3 から非推奨です。 代わりにwarning()を使ってください。mailbox:StringIO による入力とテキストモードの使用は非推奨です。 代わりに BytesIO とバイナリモードを使ってください。os: Callingos.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_SSLv3ssl.PROTOCOL_TLSssl.PROTOCOL_TLSv1ssl.PROTOCOL_TLSv1_1ssl.PROTOCOL_TLSv1_2ssl.TLSVersion.SSLv3ssl.TLSVersion.TLSv1ssl.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._UnionGenericAliasは、typing.Unionの実装には使われなくなりました。 この非公開クラスを使っているユーザーとの互換性を保つため、少なくとも Python 3.17 までは互換性を維持するための実装が提供されます。 (Jelle Zijlstra が gh-105499 で貢献しました。)unittest.IsolatedAsyncioTestCase:テストケースからNone以外の値を返すことは非推奨です。urllib.parseの非推奨の関数:代わりにurlparse()を使ってください。splitattr()splithost()splitnport()splitpasswd()splitport()splitquery()splittag()splittype()splituser()splitvalue()to_bytes()
wsgiref:SimpleHandler.stdout.write()は、渡されたデータの一部だけを書き込んで終了してはいけません。xml.etree.ElementTree:Elementの真偽値を調べることは非推奨です。 将来のリリースでは、常にTrueを返すようになります。 代わりにlen(elem)やelem is not Noneを使って明示的に判定してください。sys._clear_type_cache()は非推奨です。 代わりにsys._clear_internal_caches()を使ってください。
ソフト非推奨¶
ソフト非推奨 の API を削除する予定はありません。
re.match()とre.Pattern.match()は ソフト非推奨 となり、代わりに新しい APIre.prefixmatch()とre.Pattern.prefixmatch()を使うことが推奨されます。 これらは、より明確な別名として追加されました。 Zen of Python の 「暗黙的であるより明示的であるほうがよい」 という指針に従い、match の意味に関する混乱を減らすことを意図しています。 他の言語の正規表現ライブラリの多くでは、Python が一貫して search と呼んできた操作を match という名前の API で提供しています。従来の名前
match()は30年以上コードで使われているため、削除する予定は ありません。 古いバージョンの Python に対応するコードでは、引き続きmatch()を使ってください。 新しいコードではprefixmatch()を使うことを推奨します。 prefixmatch() と match() の違い を参照してください。(Gregory P. Smith が gh-86519 で、Hugo van Kemenade が gh-148100 で貢献しました。)
structモジュールの書式型コード'F'と'D'の使用は ソフト非推奨 となり、代わりに2文字の形式'Zf'と'Zd'を使うことが推奨されます。 (Sergey B Kirpichev が gh-121249 で貢献しました。)
C API の変更¶
新しい機能¶
METH_FASTCALL呼び出し規約を使う関数の引数を解析する、PyArg_ParseArray()関数とPyArg_ParseArrayAndKeywords()関数を追加しました。 (Victor Stinner による貢献。gh-144175。)新しい
frozendict型用に次の関数を追加しました。(Victor Stinner が gh-141510 で貢献しました。)
制限付き C API に
PyObject_CallFinalizerFromDealloc()関数を追加しました。 (Victor Stinner による貢献。gh-146063。)PySys_GetObject()の代替として、PySys_GetAttr()、PySys_GetAttrString()、PySys_GetOptionalAttr()、PySys_GetOptionalAttrString()関数を追加しました。 (Serhiy Storchaka による貢献。gh-108512。)文字列のキャッシュ済みハッシュ値を取得する
PyUnstable_Unicode_GET_CACHED_HASH()を追加しました。 注意事項はドキュメントを参照してください。 (Petr Viktorin による貢献。gh-131510。)拡張モジュールの ABI 互換性を検査する API として、
Py_mod_abi、PyABIInfo_Check()、PyABIInfo_VARを追加しました。 (Petr Viktorin による貢献。gh-137210。)
PEP 782 の PyBytesWriter API を実装しました。 次の関数を追加しました。
(Victor Stinner が gh-129813 で貢献しました。)
PyCriticalSectionと関連関数を安定 ABI に追加しました。 (Petr Viktorin による貢献。gh-149225。)spec と initfunc からモジュールを作成する新しい C API
PyImport_CreateModuleFromInitfunc()を追加しました。 (Itamar Oren による貢献。gh-116146。)配列から
tupleを作成するPyTuple_FromArray()を追加しました。 (Victor Stinner による貢献。gh-111489。)新しいモジュールエクスポートフック
PyModExport_*を追加しました。tp_traverseハンドラーで安全に使用できることが保証された関数を追加しました。PyObject_GetTypeData_DuringGC()、PyObject_GetItemData_DuringGC()、PyType_GetModuleState_DuringGC()、PyModule_GetState_DuringGC()、PyModule_GetToken_DuringGC()、PyType_GetBaseByToken_DuringGC()、PyType_GetModule_DuringGC()、PyType_GetModuleByToken_DuringGC()です。 (Petr Viktorin による貢献。gh-145925。)オブジェクトを
stderrにダンプするPyObject_Dump()を追加しました。 デバッグのためだけに使うべきです。 (Victor Stinner による貢献。gh-141070。)PEP 820:
PySlot— C API の統一スロットシステムを実装しました。 ドキュメントは 定義用スロット を参照してください。次のものを追加します。
PySlot構造体新しいスロット ID:
Py_slot_end、Py_slot_invalid、Py_slot_subslots、Py_tp_slots、Py_mod_slots、Py_tp_name、Py_tp_basicsize、Py_tp_extra_basicsize、Py_tp_itemsize、Py_tp_flags、Py_tp_metaclass、Py_tp_module便利なマクロ:
PySlot_DATA、PySlot_FUNC、PySlot_SIZE、PySlot_INT64、PySlot_UINT64、PySlot_STATIC_DATA、PySlot_END、PySlot_PTR、PySlot_PTR_STATIC
PyModule_FromSlotsAndSpec()関数とPyModExportモジュールエクスポートフック も、新しいPySlot構造体を使います。次の関数は soft deprecated になりました。
Py_tp_basesスロットとPy_tp_baseスロットは等価になり、どちらにも単一の型または型のタプルを設定できます。Py_tp_basesスロットを推奨します。 両方を指定した場合は、もう一方は無視されます。(Petr Viktorin が gh-149044 で貢献しました。)
Python のスレッド状態のスタック保護の基底アドレスとサイズを設定する、
PyUnstable_ThreadState_SetStackProtection()関数とPyUnstable_ThreadState_ResetStackProtection()関数を追加しました。 (Victor Stinner による貢献。gh-139653。)オブジェクトを immortal にする C API 関数
PyUnstable_SetImmortal()を追加しました。 (Kumar Aditya による貢献。gh-143300。)Python 3.14 で削除した非公開の暫定的な関数
_Py_InitializeMain()を復活させました。 (Victor Stinner による貢献。gh-142417。)Python のスタックトレースを出力する
PyUnstable_DumpTraceback()関数とPyUnstable_DumpTracebackThreads()関数を追加しました。 (Alex Malyshev による貢献。gh-145559。)
変更された C API¶
Py_TPFLAGS_MANAGED_DICTまたはPy_TPFLAGS_MANAGED_WEAKREFフラグを設定する場合、Py_TPFLAGS_HAVE_GCも設定しなければなりません。 (Sergey Miryanov による貢献。gh-134786。)PyDateTime_IMPORTがスレッドセーフになりました。PyDateTimeAPIがNULLかどうかを直接調べるコードは、代わりにPyDateTime_IMPORTを呼び出すように更新するべきです。 (Kumar Aditya による貢献。gh-141563。)
削除された C API¶
非推奨の
PyUnicode関数を削除しました。PyUnicode_AsDecodedObject():代わりにPyCodec_Decode()を使ってください。PyUnicode_AsDecodedUnicode(): 代わりにPyCodec_Decode()を使ってください。 一部のコーデック (例えば "base64") は、bytesなど、str以外の型を返す場合があることに注意してください。PyUnicode_AsEncodedObject():代わりにPyCodec_Encode()を使ってください。PyUnicode_AsEncodedUnicode(): UsePyCodec_Encode()instead; note that some codecs (for example, "base64") may return a type other thanbytes, such asstr.
(Stan Ulbrych が gh-133612 で貢献しました。)
PyImport_ImportModuleNoBlock():PyImport_ImportModule()の非推奨の別名です。 (Bénédikt Tran による貢献。gh-133644。)PyWeakref_GetObject()とPyWeakref_GET_OBJECT: 代わりにPyWeakref_GetRef()を使ってください。 Python 3.12 以前では pythoncapi-compat project を使うことでPyWeakref_GetRef()を利用できます。 (Bénédikt Tran による貢献。gh-133644。)非推奨の
PySys_ResetWarnOptions()を削除しました。 代わりにsys.warnoptionsとwarnings.filtersを空にしてください。(Nikita Sobolev が gh-138886 で貢献しました。)
次の関数は PyConfig_Get() に置き換えられ、削除されました。
Python 3.13 以前では pythoncapi-compat project を使うことで PyConfig_Get() を利用できます。
Python の初期化関数:
Py_GetExecPrefix(): 代わりにPyConfig_Get("base_exec_prefix")(sys.base_exec_prefix) を使ってください。 仮想環境 を扱う必要がある場合はPyConfig_Get("exec_prefix")(sys.exec_prefix) を使ってください。Py_GetPath(): 代わりにPyConfig_Get("module_search_paths")(sys.path) を使ってください。Py_GetPrefix(): 代わりにPyConfig_Get("base_prefix")(sys.base_prefix) を使ってください。 仮想環境 を扱う必要がある場合はPyConfig_Get("prefix")(sys.prefix) を使ってください。Py_GetProgramFullPath(): 代わりにPyConfig_Get("executable")(sys.executable) を使ってください。Py_GetProgramName(): 代わりにPyConfig_Get("executable")(sys.executable) を使ってください。Py_GetPythonHome(): 代わりにPyConfig_Get("home")または環境変数PYTHONHOMEを使ってください。
(Bénédikt Tran が gh-133644 で貢献しました。)
非推奨になった C API¶
PEP 456 の文字列ハッシュ方式を外部で定義する機能を非推奨としました。 Python 3.19 で削除される予定です。
従来、埋め込み側は
Py_HASH_ALGORITHMをPy_HASH_EXTERNALと定義することで、ハッシュ方式を外部から提供することを指定できました。 しかし、この機能はドキュメントに記載されず、テストもされておらず、おそらく使用もされていませんでした。(Bénédikt Tran が gh-141226 で貢献しました。)
PyArg_ParseTuple()の符号なし整数の書式で、対応する C 型の最大値より大きい Python 整数、または同じサイズの対応する符号付き整数型の最小値より小さい Python 整数を受け付けることは非推奨になりました。 (Serhiy Storchaka による貢献。gh-132629。)PyBytes_FromStringAndSize(NULL, len)と_PyBytes_Resize()は soft deprecated になりました。 代わりにPyBytesWriterAPI を使ってください。 (Victor Stinner による貢献。gh-129813。)_PyObject_CallMethodId()、_PyObject_GetAttrId()、_PyUnicode_FromId()は Python 3.15 以降非推奨で、Python 3.20 で削除されます。 代わりにPyUnicode_InternFromString()の結果をモジュール状態にキャッシュし、PyObject_CallMethod()またはPyObject_GetAttr()を呼び出してください。 (Victor Stinner による貢献。gh-141049。)PyComplexObject型のcvalフィールドを非推奨としました。 Python の複素数と C のPy_complex表現の間の変換には、PyComplex_AsCComplex()とPyComplex_FromCComplex()を使ってください。 (Sergey B Kirpichev による貢献。gh-128813。)_Py_c_sum()、_Py_c_diff()、_Py_c_neg()、_Py_c_prod()、_Py_c_quot()、_Py_c_pow()、_Py_c_abs()関数は soft deprecated になりました。 (Sergey B Kirpichev による貢献。gh-128813。)bytes_warningは Python 3.15 以降非推奨で、Python 3.17 で削除されます。 (Nikita Sobolev による貢献。gh-136355。)Py_INFINITYマクロは soft deprecated になりました。 代わりに C11 標準の<math.h>のINFINITYを使ってください。 (Sergey B Kirpichev による貢献。gh-141004。)次のマクロは soft deprecated になりました。
Py_ALIGNED: 代わりにalignasを推奨します。PY_FORMAT_SIZE_T:"z"を直接使ってください。PY_LONG_LONG、PY_LLONG_MIN、PY_LLONG_MAX、PY_ULLONG_MAX、PY_INT32_T、PY_UINT32_T、PY_INT64_T、PY_UINT64_T、PY_SIZE_MAX: C99 の型や上限・下限値を使ってください。Py_UNICODE_SIZE:sizeof(wchar_t)を直接使ってください。Py_VA_COPY:va_copyを直接使ってください。
削除予定だったマクロ
Py_UNICODE_WIDEは、代わりに soft deprecated となりました。(Petr Viktorin が gh-146175 で貢献しました。)
Py_MATH_ElとPy_MATH_PIlは Python 3.15 以降非推奨で、Python 3.20 で削除されます。 (Sergey B Kirpichev による貢献。gh-141004。)
ビルドの変更¶
同梱の
libmpdecライブラリへの暗黙のフォールバックを削除しました。 今後は--with-system-libmpdecをnoに設定するか、--without-system-libmpdecで明示的に有効にする必要があります。 (Sergey B Kirpichev による貢献。gh-115119。)新しい configure オプション
--with-missing-stdlib-config=FILEにより、配布者は、欠けているか別途パッケージ化されている standard library モジュールについての独自のエラーメッセージを含む JSON 設定ファイルを渡せます。 (Stan Ulbrych と Petr Viktorin による貢献。gh-139707。)新しい configure オプション
--with-pymalloc-hugepagesは、pymalloc のアリーナでヒュージページのサポートを有効にします。 有効にするとアリーナのサイズは 2 MiB になり、割り当てにはMAP_HUGETLB(Linux) またはMEM_LARGE_PAGES(Windows) を使い、通常のページへ自動的にフォールバックします。 Windows ではbuild.bat --pymalloc-hugepagesを使ってください。 実行時には、環境変数PYTHON_PYMALLOC_HUGEPAGESを1に設定し、ヒュージページを明示的に有効にする必要があります。 (Pablo Galindo Salgado による貢献。gh-144319。)Linux カーネルが PR_SET_VMA_ANON_NAME をサポートする場合 (Linux 5.17 以降)、匿名 mmap の用途に注釈を付けられるようになりました。 カーネルがこの機能をサポートし、Python に
-X devを渡すか、Python を デバッグモード でビルドしている場合、注釈は/proc/<pid>/mapsに表示されます。 (Donghee Na による貢献。gh-141770。)CPython はデフォルトでフレームポインターを有効にしてビルドされるようになりました (PEP 831)。 無効にするには
--without-frame-pointersを渡してください。独自のビルドシステムを使う C 拡張やネイティブライブラリの作成者は、スタックを巻き戻すための連鎖が途切れないようにするべきです。 通常は
CFLAGSに-fno-omit-frame-pointerなどのフラグを追加することで対応します。 Python が使う具体的なフラグは--without-frame-pointersのドキュメントを参照してください。(Pablo Galindo Salgado と Savannah Ostrowski が gh-149201 で貢献しました。)
Visual Studio 2026 (MSVC 18) を使った 64 ビットビルドで、新しい 末尾呼び出し型インタープリタ を使えるようになりました。 Visual Studio 18.1.1 での結果では、AMD Ryzen 7 5800X 上の Windows x86-64 で、switch-case インタープリタに比べ、pyperformance の幾何平均で 15–20% の高速化が報告されています。 Windows では、大規模な純粋 Python ライブラリでの 14% から、長時間実行する小さな純粋 Python スクリプトでの 40% までの高速化が観測されています。 これは MSVC 18 で導入された新機能によって実現しました。 python.org の公式 Windows 64 ビットバイナリも、この機能を使うようになりました。 (Chris Eibl、Ken Jin、Brandt Bucher による gh-143068 での貢献。Steve Dower、および Hulon Jenkins を含む MSVC チームに感謝します。)
Python 3.15 への移行¶
この節では、前述の変更とその他のバグ修正のうち、コードの変更が必要になる可能性があるものを列挙します。
sqlite3.ConnectionAPI を整理しました。sqlite3.connect()の database 以外のすべてのパラメーターが、キーワード専用になりました。create_function()メソッドとcreate_aggregate()メソッドの最初の三つのパラメーターが、位置専用になりました。set_authorizer()、set_progress_handler()、set_trace_callback()メソッドの最初のパラメーターが、位置専用になりました。
(Serhiy Storchaka が gh-133595 で貢献しました。)
resource.RLIM_INFINITYが常に正になりました。 以前の値に対応する負の整数 (プラットフォームにより-1や-3など) をresource.setrlimit()とresource.prlimit()に渡すことは非推奨になりました。 (Serhiy Storchaka による貢献。gh-137044。)基盤となるシステムコールをサポートしないプラットフォームでは、
mmap.mmap.resize()がSystemErrorを送出する代わりに、メソッド自体が削除されました。 (An Long による貢献。gh-138205。)xml.etree.ElementTree.iterparse()のイテレーターがファイルを開き、閉じられないままになった場合に、リソース警告を発するようになりました。close()メソッドまたはcontextlib.closing()コンテキストマネージャーを使って閉じてください。 (Osama Abdelkader と Serhiy Storchaka による貢献。gh-140601。)argparse.ArgumentParser.add_argument()に短いオプションと単一のダッシュで始まる長いオプションを渡した場合、長いオプションから dest を推論するようになりました。 例えばadd_argument('-f', '-foo')の dest は、'f'ではなく'foo'になります。 以前の動作を保つには dest 引数を明示してください。 (Serhiy Storchaka による貢献。gh-138697。)base64.urlsafe_b64decode()で入力のパディングが必須でなくなりました。 必須にするには、新しい引数padded=Trueを渡すか、base64.b64decode()に引数altchars=b'-_'を渡してください (後者は古い Python でも動作します)。 (Serhiy Storchaka による貢献。gh-73613。)unittest.TestCase.assertWarns()とunittest.TestCase.assertWarnsRegex()が指定したカテゴリや正規表現に一致しない警告を握りつぶさなくなったため、従来は隠れていた警告がテストから漏れ出す可能性があります。 警告フィルターで抑制するか、追加のassertWarns*()で捕捉して検査してください。 (Serhiy Storchaka による貢献。gh-143231。)
3.15.2 の注目すべき変更¶
importlib¶
複数のスレッドが同時に初めての
import package.submoduleを実行しても、デッドロックや誤ったインポートエラーの危険がなくなりました。 これは gh-83065 の修正により 3.15.0 で導入されたリグレッションです。 パッケージのインポートロックは、__init__が戻るとすぐに解放されるようになりました。 複数のスレッドにまたがる循環インポートでは、importlib.import_module()は_DeadlockErrorを送出する代わりに、import文と同様に初期化途中のモジュールを返すようになりました。 (Gregory P. Smith による貢献。gh-159963。)
ssl¶
sslモジュールが、侵害された一群の eMudhra 中間 CA 証明書のいずれかを含む TLS 証明書チェーンを拒否するようになりました。 対象の証明書は公開鍵で識別するため、同じ鍵を再利用したクロス署名済みのコピーも拒否します。 これは多層防御の最後の備えとして、アプリケーションが独自のルート CA バンドルを指定していても、またプラットフォームのトラストストアが信頼を取り消しているかどうかによらず、適用されます。 (Christian Heimes による貢献。gh-160040 for CVE 2026-115557。)