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のデフォルトのバックエンドがこれに変更されました。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バイトのみを占有する新しい軽量ミューテックスとなりました。
新しい型ヒントの機能:
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-wasitier 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とは別にコマンド履歴が記録されるようになりました。
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 が必要になります。
参考
(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 での貢献。)
その他の言語変更¶
コンパイラは、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
__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を送出するようになりました。(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 プロトコルを実装しています。ユーザー定義クラスでも、
__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¶
fractions¶
glob¶
シェル形式のワイルドカードを含むパスの指定を正規表現に変換する
translate()関数が追加されました。 (Barney Gale による gh-72904 での貢献。)
importlib¶
importlib.resourcesの次の関数で、複数の位置引数を使い、リソースのディレクトリ (またはツリー) にアクセスできるようになりました (テキストを読み取る関数の encoding と errors はキーワード専用引数になりました)。これらの関数は非推奨ではなくなり、削除の予定もなくなりました。 (Petr Viktorin による gh-116608 での貢献。)
contents()は、すべての機能を備えたTraversableAPI を推奨するため、引き続き非推奨です。 ただし、削除する予定はなくなりました。 (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¶
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 ofchmod()are both now available on Windows. Note that the default value of follow_symlinks inlchmod()isFalseon 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 での貢献。)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¶
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の項目を型チェッカーに対して読み取り専用と示せるようになりました。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.sax.expatreader.ExpatParser.flush()
(Sebastian Pipping による gh-115623 での貢献。)
iterparse()が返すイテレーターに、明示的な後処理のためのclose()メソッドが追加されました。 (Serhiy Storchaka による gh-69893 での貢献。)
zipimport¶
最適化¶
いくつかの標準ライブラリモジュールのインポート時間が大幅に短縮されました。 例えば
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 で非推奨になり、今回削除されました。
aifcstandard-aifc: PyPI で再配布されている
aifcライブラリを使ってください。
audioopaudioop-lts: PyPI の
audioop-ltsライブラリを使ってください。
chunkstandard-chunk: PyPI で再配布されている
chunkライブラリを使ってください。
cgiとcgitbcgi.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ライブラリを使ってください。
msilibnisnntplib: 代わりに 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 ライブラリを使ってください。sunaustandard-sunau: PyPI で再配布されている
sunauライブラリを使ってください。
telnetlib: 代わりに PyPI の telnetlib3 または Exscript ライブラリを使ってください。standard-telnetlib: PyPI で再配布されている
telnetlibライブラリを使ってください。
uu: 現代的な代替としてbase64モジュールを使ってください。standard-uu: PyPI で再配布されている
uuライブラリを使ってください。
xdrlibstandard-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¶
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¶
unittest¶
Python 3.11 で非推奨になった、次の
unittest関数が削除されました。unittest.findTestCases()unittest.makeSuite()unittest.getTestCaseNames()
代わりに
TestLoaderのメソッドを使ってください。(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 anSSLContextinstance. Thessl.SSLContext.load_cert_chain()function can be used to load specific certificates, or letssl.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 での貢献。)
新たな非推奨項目¶
dis:-
gettextモジュールで複数形を扱う関数やメソッドの引数に、整数でない数値を渡すことは、翻訳が見つからなかった場合も非推奨になりました。 (Serhiy Storchaka による gh-88434 での貢献。)
glob:非公開の
glob0()関数とglob1()関数が非推奨になりました。 代わりにglob()を使い、ルートディレクトリを指定する path-like object を root_dir 引数に渡してください。 (Barney Gale による gh-117337 での貢献。)
-
CGIHTTPRequestHandlerが非推奨になりました。 Python 3.15 で削除されます。 プロセスベースの CGI HTTP サーバーは、長らく使われなくなっています。 このコードは古く、保守されておらず、ほとんど使われていませんでした。 セキュリティと機能の両面で不具合が生じる可能性が高いものです。 (Gregory P. Smith による gh-109096 での貢献。)python -m http.server のコマンドラインインターフェースの
--cgiフラグが非推奨になりました。 Python 3.15 で削除されます。 (Gregory P. Smith による gh-109096 での貢献。)
-
guess_type()にファイルパスを引数として渡すことが ソフト非推奨 になりました。 代わりにguess_file_type()を使ってください。 (Serhiy Storchaka による gh-66543 での貢献。)
re:-
.PurePath.is_reserved()が非推奨になりました。 Python 3.15 で削除されます。 Windows の予約されたパスを検出するには、os.path.isreserved()を使ってください。 (Barney Gale による gh-88569 での貢献。)
-
platform.java_ver()が非推奨になりました。 Python 3.15 で削除されます。 この関数は Jython のサポートにしか役立たず、API が分かりにくく、ほとんどテストされていません。 (Nikita Sobolev による gh-116349 での貢献。)
-
非公開の
ispackage()関数が非推奨になりました。 (Zackery Spytz による gh-64020 での貢献。)
-
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属性が非推奨になりました。 Python 3.16 で削除されます。 (gh-115256 での貢献。)
-
TracebackException.exc_type属性が非推奨になりました。 代わりにTracebackException.exc_type_strを使ってください。 (Irit Katriel による gh-112332 での貢献。)
-
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.Numast.Strast.Bytesast.NameConstantast.Ellipsis
代わりに
ast.Constantを使ってください。 (Serhiy Storchaka が gh-90953 で貢献しました。)-
子プロセスを監視するクラス
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.ResourceReaderimportlib.abc.Traversableimportlib.abc.TraversableResources
代わりに
importlib.resources.abcのクラスを使ってください:(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()を使ってください。
-
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.SetPointerType()関数は Python 3.13 から非推奨です。
-
古く、ほとんど使われていない
CGIHTTPRequestHandlerは Python 3.13 から非推奨です。 直接の代替はありません。 Web サーバーとリクエストハンドラーを接続するには、CGI 以外なら どの方法でも よりよい選択です。python -m http.server のコマンドラインインターフェースの
--cgiフラグは Python 3.13 から非推奨です。
-
load_module()メソッド:代わりにexec_module()を使ってください。
-
.PurePath.is_reserved()は Python 3.13 から非推奨です。 Windows で予約済みのパスを検出するにはos.path.isreserved()を使ってください。
-
platform.java_ver()は Python 3.13 から非推奨です。 この関数が役立つのは Jython への対応だけで、API は分かりにくく、ほとんどテストされていません。
-
sysconfig.is_python_build()のcheck_home引数は Python 3.12 から非推奨です。
-
RLock()は Python 3.15 から引数を受け取らなくなります。 Python 実装は引数を一切受け付けない一方、C 実装は任意の個数の位置引数やキーワード引数を受け付けてすべて無視するため、Python 3.14 から引数を渡すことは非推奨です。
-
types.CodeType:codeobject.co_lnotabへのアクセスは、PEP 626 で 3.10 から非推奨となり、3.12 で削除予定でした。 しかし、実際にDeprecationWarningが出るようになったのは 3.12 です。 3.15 で削除される可能性があります。 (Nikita Sobolev が gh-101866 で貢献しました。)
-
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.zipimporter.load_module()は Python 3.10 から非推奨です。 代わりにexec_module()を使ってください。 (gh-125746。)
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()を使ってください。
CPython バイトコードの変更¶
YIELD_VALUEの oparg は、yield-from または await の一部としての yield なら1、それ以外なら0になりました。RESUMEの oparg には、例外の深さが 1 かどうかを示すビットが追加されました。 これはジェネレーターを閉じる処理の最適化に必要です。 (Irit Katriel による gh-111354 での貢献。)
C API の変更¶
新しい機能¶
PEP 669 のモニタリングイベントを生成する PyMonitoring C API が追加されました。
PyMonitoring_FireBranchEvent
(Irit Katriel による gh-111997 での貢献。)
1 バイトだけを占有する軽量ミューテックス
PyMutexと、新しいPyMutex_Lock()関数、PyMutex_Unlock()関数が追加されました。PyMutex_Lock()は、処理がブロックする必要がある場合、GIL を保持していれば解放します。 (Sam Gross による gh-108724 での貢献。)システムクロックにアクセスするための PyTime C API が追加されました。
(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 の一環として、フレームのローカル変数、グローバル変数、組み込みの名前について、借用参照 の代わりに 強参照 を返す関数が追加されました。
(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_HasAttrString()の代わりとなるPyObject_HasAttrStringWithError()。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 に含まれるようになりました。
--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(): UsePyConfig.xoptionsinstead.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 初期化設定 の新しい
PyConfigAPI (PEP 587) を使ってください。 (Victor Stinner による gh-105145 での貢献。)Python 3.2 で非推奨となった
PyEval_AcquireLock()関数とPyEval_ReleaseLock()関数が削除されました。 これらは現在のスレッド状態を更新しない関数でした。 次の組み合わせに置き換えられます。low-level
PyEval_AcquireThread()andPyEval_RestoreThread();
(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)。
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(): UsePyCodec_Encode()instead; Note that some codecs (for example, "base64") may return a type other thanbytes, such asstr.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)withPyUnicodeWriter_WriteASCII(writer, str, size)._PyUnicodeWriter_WriteLatin1String(): replace_PyUnicodeWriter_WriteLatin1String(&writer, str, size)by decoding the string withPyUnicode_DecodeLatin1(), writing the result withPyUnicodeWriter_WriteStr(), and releasing the result withPy_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(): UsePyThread_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(): UsePyThread_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. withPyDict_Copy()), or by calling the newPyEval_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 での貢献。)